飞机大战案例分析

飞机大战案例分析
飞机大战案例分析

简单的微信飞机大战

编写成员:张宏万熊波缪伟

专业:11软件工程

姓名:张宏

学号:2011103368

姓名:万熊波

学号:2011103365

姓名:缪伟

学号:2011103388

摘要

相信Android(安卓)已经为人们熟知,经过2011年的洗礼,Android智能

手机火速上位,甚至说现在手机系统由IOS和Android平分也不为过。随着Android智能手机在中国内地的风靡,基于Android平台的应用开发也逐渐成为

IT开发的一大热门。游戏是智能机不可或缺的应用之一,“水果忍者”、“愤

怒的小鸟”等Android游戏应用的成功,让人看到手机游戏在Android平台上的

巨大发展空间。基于此,采用Eclipse和Android ADT作为集成开发平台,开

发本Android游戏APP。

本应用为Android飞机大战游戏,主要有6个操作界面分别为开始界面,游

戏界面,设置界面,得分界面,Win界面,Lose界面。玩家可以选择自己进入设

置界面对游戏进行设置,或进入的分界面查看自己本次操作是否在前六名等操作。作为游戏背景音乐的存在是不可或缺的,本应用在不同的操作界面演奏不同

的背景音乐,玩家还可以在设置界面设置背景音乐的大小。由于Android控件Activity的生命周期的特点,本应用会在被点击“EXIT”按钮的Activity中发

送一个EXIT的广播,所有的本应用的Activity收到广播后会自动结束,使得本

应用能够完全的退出系统。本应用采用Android的SurfaceView绘制游戏界面,

游戏的主界面美观,赏心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该

做到易懂、易操作,以给玩家一个很好的游戏环境。

目录

第1章绪论 (3)

1.1系统开发背景 (3)

1.2系统研究目的和意义 (3)

1.3可行性分析 (4)

第2章系统需求分析 (4)

2.1用户功能需求分析 (4)

2.2系统性能要求 (4)

2.3业务流程分析 (4)

第3章系统总体设计 (5)

3.1系统功能模块分析 (5)

3.1.1系统管理 (5)

3.1.2 APP应用设置 (5)

3.1.3 玩家信息管理 (6)

3.2系统类关系图..................................... 错误!未定义书签。

3.3系统总体设计 (7)

第4章系统详细设计 (9)

4.1开发工具简介 (9)

4.3游戏界面设计..................................... 错误!未定义书签。

4.3.1开始界面...................................... 错误!未定义书签。

4.3.2游戏界面...................................... 错误!未定义书签。

4.3.3设置界面...................................... 错误!未定义书签。

4.3.4 得分界面..................................... 错误!未定义书签。第5章工作总结和展望.. (10)

参考文献............................................... 错误!未定义书签。致谢................................................. 错误!未定义书签。

第1章绪论

1.1 系统开发背景

随着科技的发展,现在手机的功能已不仅仅是简单的接打电话、收发短信了。

更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱

乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适

合各阶层人士的具有很强的娱乐性和交互性的飞机小游戏。

虽然现在市面上存在着各种各样的游戏版本,可是飞机游戏其市场还是相当

大的。因为它的特殊在于人们在玩游戏的时候的过程中使爱不释手。随着游戏关

卡不断提高,其难度也更大,刺激性也更强。可以说该游戏的优势在于它的简单

易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,

不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了

他们的需求。

1.2 系统研究目的和意义

在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人

没有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时

随地都能享受游戏,从繁重的日常生活中解脱出来。

游戏的主界面应该力求美观,赏心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做

到易懂、易操作,以给玩家一个很好的游戏环境。

1.3 可行性分析

该系统采用Eclipse集成Android ADT为开发平台进行APP开发。Eclipse 是一个开放的源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。虽然大都数用户很乐于Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境,这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse 中的每样东西都是插件,对于Eclipse中的每样东西都是插件,对于给Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

基于Eclipse的应用程序的插件开发诸如Siemens公司的PLM产品Teamcenter的插件级开发。

Android专门针对Eclipse开发做了ADT(Android Developer Tools)开发插件,因此该应用使用Eclipse开发完全可行。

第2章系统需求分析

2.1 用户功能需求分析

由于本程序简单易操作,交互性好,对用户没什么特别要求。一般用户经过几分钟练系都可以熟悉本游戏的规则。

2.2 系统性能要求

1.实时性

本应用为手机游戏因此对于用户的操作必须做出立即响应,否则本游戏即为失败。

2.易操作性

单机手机游戏的最大特点即为易操作性,用户在不看说明的情况下也能够玩,并且在玩过几遍之后即熟悉本游戏的规则。这是本应用对于操作性的要求。

2.3 业务流程分析

依据系统的需求分析,得到系统的流程图如图2-3所示:

图2-3 系统流程图

第3章系统总体设计

3.1 系统功能模块分析

当前应用使用的SurfaceView来绘制的页面因此相对来说大部分逻辑都是由Activity来做处理的。本系统的功能模块也根据Activity的不同来划分成6个功能模块。

3.1.1系统管理

各个操作界面布局适当,颜色搭配等要美观。各个Activity之间的切换要快速(PS:它们各自的背景音乐也要随之切换,给用户以顺畅、自然的感觉)。用户在任何一个Activity 点击“EXIT”按钮或ContextMenu中的“退出”都要成功的将当前应用挂起的多个Acitivity和当前Android虚拟机显示的Activity顺利的停止,并销毁

3.1.2 APP应用设置

设置应用系统背景音乐声音大小和游戏难度。

使用SeekBar来控制系统音量,使用RadioGroup来控制飞机难度。

3.1.3 玩家信息管理

在游戏结束时对于玩家的名称和得分进行记录,并在玩家查看排名情况时,以倒序形式显示前六名玩家的得分和姓名等信息。

3.2 系统类关系图

系统实体类、边界类、控制类之间的关系如图3-1所示

图3-1 实体类、控制类、边界类之间的关系

各个界面类之间的关系如图3-2所示

3.3 系统总体设计

系统的中只有玩家一种用户,不必向其他的网站或者是教务系统一样进行身份验证等操作。玩家点击应用图标直接进入应用的开始界面。用户的操作总体可以归并成如3-3玩家用例图所显示的内容,子弹的用例图如图3-4所示,飞机的用例图如图3-5所示。

用户的操作基本可以划分为“加载游戏”,“开始游戏”,“设置游戏”,“玩游戏”,“查看分数”这五个用例。

玩家用案例图

子弹用例图

飞机用例图

第4章系统详细设计

4.1 开发工具简介

Android开发工具(ADT)是一个插件的Eclipse IDE,目的是给开发人员提供一个强大的、集成的环境中构建Android应用程序。

扩展能力的Eclipse ADT让你迅速建立新的Android项目,创建一个应用程序的用户界面,添加基于安卓框架的API,调试您的应用程序使用Android SDK工具,生成apk文件在使用Eclipse运行Android应用的时候Eclipse会自动的将生成的apk文件自动的注册到Android虚拟机中。

在Eclipse ADT发展与高度推荐,是一种最快的方式开始。与引导项目设置它提供,以及工具集成、定制XML编辑器和调试输出窗格,ADT给了你极大的提高在发展中Android应用程序。

使用Eclipse集成Android ADT做Android应用开发是目前企业中常用的Android应用开发方式。

本项目在开发环境:

JDK 1.7

Eclipse 3.7.

4,2 详细分析请看后面的代码

第6章工作总结和展望

本应用以Eclipse集成Android ADT为开发环境,在DalvikVM中对自己编写的应用进行测试。

当时在编写这个应用的时候遇到过很多的问题,有技术性的问题,有性能性的问题,各种常见的异常,空指针,数组越界等问题。当时在做这个项目时最大的压力是时间,在对Android不是非常熟悉的情况下,培训机构仅仅给了我们十几天的时间让我们做出一个完善的Android应用。

记得在刚下需求的时候,前两天一直都在研究需求,分析哪个功能点可以使用什么技术,哪个地方使用某种算法相对来说效率更高。记得有一次被卡在了activity之间的跳转上,由于是在SurfaceView中跳转到另一个Activity的,一时间对于如何在当前SurfaceView中获得它所在的Activity的引用感到不知所措,最后经历了两天的摸索,终于攻克了这一难点。经过自己认真研究攻克的技术点,总是会给人以很大的信心继续走下去,它所带来的那种成就感是难以用语言名状的。

经过十多天的开发自己完成了一个相对比较完整的Android应用,这对

于之前一直想要从事开发的我来说真的是很大的一次激励。在这个项目之后,感

觉自己在实习公司这种真实的开发环境下也很少能够体验到可以与该项目压力

相当的需求了。

这个项目是我个人编程经历的一个节点,也是从这个项目之后,我正式进入公司实习真正的进入了IT这个行业。而这个项目所带给我的开发上的经验就是:无论当前的项目有多难,需求有多么复杂,时间有多么紧迫,一定要分析透需求,之后一点一点的按照常规的开发进行下去,遇到技术难点不要跳过,解决掉这个再进行下一步的开发,否则,问题越积越多你会对自己失去信心。

对于未来,希望自己做一个技术比较过硬的IT编程人员,能够将设计模式融会贯通到自己的代码中,希望自己能够有一个让人一看就一目了然的编程风格。

虽然有些碎碎念,但终归是开发过程中的一些真实的经历。值得自己铭记具体代码如下:

StartFrame.java

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JPanel;

import com.tarena.LocationUtil;

/*

* StartFrame类主要是打飞机开始加载页面

* 关取得当前页面的坐标值传入新的页面中

*/

public class StartFrame extends JFrame{

int x;

int y;

public StartFrame(){

//窗体打开的位置,宽和高

this.setBounds(200, 0, 400, 654);

//禁止标题栏显示

this.setUndecorated(true);

//设置窗体的图标

this.setIconImage(new ImageIcon("images/icon.jpg").getImage());

//创建自定义面板并实例化

StartPanel panel = new StartPanel();

//窗体移动

LocationUtil util = new LocationUtil(this);

//当面板添加到当前窗体

this.add(panel);

//窗体显示

this.setVisible(true);

//启动多线程

new Thread(panel).start();

}

public static void main(String[] args) {

StartFrame t = new StartFrame();

}

//自定义面板,实现多线程接口和鼠标事件

class StartPanel extends JPanel implements Runnable,MouseListener{ //定义一个开始加载飞机的坐标

int x= -57;

int y = 400;

public StartPanel()

{

this.addMouseListener(this);

}

@Override

public void paint(Graphics g) {

super.paint(g);

//画背景图

g.drawImage(new

ImageIcon("images/startback.png").getImage(),0,0,this);

//画加载时的飞机

g.drawImage(new

ImageIcon("images/start_aircraft.png").getImage(),x,y,this);

//关闭图片

g.drawImage(new

ImageIcon("images/close.png").getImage(),360,3,this);

//最小化图片

g.drawImage(new

ImageIcon("images/min.png").getImage(),325,3,this);

}

//多线程run()方法

@Override

public void run() {

//开始加载时的飞机循环画

while(x<=400){

try {

x++;

repaint();

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

//获取窗体x,y的坐标,然后在赋值给x,y

x = StartFrame.this.getLocation().x;

y = StartFrame.this.getLocation().y;

//释放窗体

StartFrame.this.dispose();

//加载新的窗体开始游戏

PlaneFrame f = new PlaneFrame(x,y);

}

@Override

public void mouseClicked(MouseEvent e) {

//退出

if(e.getX()>=360 && e.getX()<=391 && e.getY()>=3 && e.getY()<=34){

System.exit(0);

}

//最小化

if(e.getX()>=325 && e.getX()<=355 && e.getY()>=3 && e.getY()<=34){

StartFrame.this.setState(JFrame.ICONIFIED);

}

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

}

}

PlaneMoveThread.java

/**

*

* 加载窗口飞机移动

*

*/

public class PlaneMoveThread extends Thread{

EnemyPlane plane;

public PlaneMoveThread(EnemyPlane plane){

this.plane = plane;

}

public void run() {

//如果敌机不true

while(plane.isLive){

try {

plane.move();

Thread.sleep(20);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

PlaneFrame.java

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import com.tarena.LocationUtil;

/**

*

* 游戏主窗口

*

*/

public class PlaneFrame extends JFrame implements Runnable { GamePlane plane; //定义一个游戏面板

int move_size = 10;// 敌机移动速度

ImageIcon[] icon = new ImageIcon[3];

JButton close,min; //关闭和最小化按钮

PlaneFrame(int x,int y) {

//打开位置及宽和高

this.setBounds(x, y, 400, 654);

//窗体无标题

this.setUndecorated(true);

//设置图标

this.setIconImage(new ImageIcon("images/icon.jpg").getImage());

//例化面板

plane = new GamePlane(this);

//面板的位置

plane.setBounds(0, 0, 400, 654);

//将当前的面板添加到当前窗体

this.add(plane);

//窗体显示

this.setVisible(true);

//窗体移动

LocationUtil util = new LocationUtil(this);

//加载敌机

for (int i = 0; i < icon.length; i++) {

icon[i] = new ImageIcon("images/shoot" + i + "_0.png");

}

//添加面板的鼠标监听

plane.addMouseMotionListener(plane);

plane.addMouseListener(plane);

//起动面板多线程

new Thread(plane).start();

//起动当前类的多线程

new Thread(this).start();

}

//run()方法中加载敌机

@Override

public void run() {

while (true) {

//如果敌没有被打掉

if(plane.heroLive){

move_size = 5;

int ex = (int) (Math.random() * (plane.getWidth() - 49));

//创建敌机类对象,并实例化

EnemyPlane enemy = new EnemyPlane(ex, 0, plane, move_size);

//通过随机数产生敌机的分类

int pNum=(int)(Math.random()*2);

//传入敌机分类

enemy.icon = icon[pNum];

//将敌机加入面板

plane.enemys.addElement(enemy);

//敌机传入并启动多线程

new PlaneMoveThread(enemy).start();

//休眠时间

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

LocationUtil.java

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;

public class LocationUtil {

//创建一个JFrame对象用于接收获取的JFrame

JFrame fram;

//用于存鼠标坐标

private int xx, yy;

//用于标识鼠标是否压下

private boolean isDraging = false;

public LocationUtil(JFrame frame) {

//将形参值赋给成员变量

this.fram = frame;

//使用匿名内部类为鼠标添加按钮事件监听

fram.addMouseListener(new MouseAdapter() {

//鼠标按键压下

public void mousePressed(MouseEvent e) {

isDraging = true;

xx = e.getX();

yy = e.getY();

}

//鼠标按键抬起

public void mouseReleased(MouseEvent e) {

isDraging = false;

}

});

//使用匿名内部类为鼠标添加托动事件监听

fram.addMouseMotionListener(new MouseMotionAdapter() {

//鼠标托动方法

public void mouseDragged(MouseEvent e) {

if (isDraging) {

int left =fram.getLocation().x;

int top = fram.getLocation().y;

fram.setLocation(left + e.getX() - xx, top + e.getY() - yy);

}

}

});

}

}

GamePlane.java

package com.tarena;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import java.util.Vector;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JPanel;

/**

*

* 游戏面板

*

*/

public class GamePlane extends JPanel implements Runnable, MouseMotionListener,

MouseListener {

private int xx, yy;// 鼠标压下的位置

JFrame frame;

int score = 0;// 积分

boolean heroLive = true;// 定义英雄机为true;

private boolean isDraging = false; // 鼠标是否压下

Vector bullets = new Vector();// 子弹数组

Vector enemys = new Vector();// 敌机数组Vector bombs = new Vector();// 爆炸数组

// 英雄机的坐标

int hero_x = 200;

int hero_y = 500;

public GamePlane(JFrame frame) {

this.frame = frame;

}

public void paint(Graphics g) {

super.paint(g);

// 画背景图

g.drawImage(new ImageIcon("images/backmain.png").getImage(), 0,

0, this);

g.drawImage(new ImageIcon("images/close.png").getImage(), 360, 3,

this);

g.drawImage(new ImageIcon("images/min.png").getImage(), 325, 3,

this);

// 如果英雄机为true

if (heroLive) {

g.drawImage(new ImageIcon("images/hero.png").getImage(),

hero_x, hero_y, this);

}

// 画子弹

for (int i = 0; i < bullets.size(); i++) {

Bullet b = bullets.get(i);

g.drawImage(new ImageIcon("images/bullet.png").getImage(),

b.x, b.y, this);

}

// 画敌机

for (int i = 0; i < enemys.size(); i++) {

EnemyPlane p = enemys.get(i);

g.drawImage(p.icon.getImage(), p.x, p.y, this);

}

// 画敌机

for (int i = 0; i < bombs.size(); i++) {

Bomb bomb = bombs.get(i);

g.drawImage(new ImageIcon("images/bomb.png").getImage(),

bomb.x, bomb.y, this);

}

// 如果英雄机heroLive的值为false;

if (!heroLive) {

// 画英雄机销毁图片

g.drawImage(

new ImageIcon("images/hero_destory.png").getImage(),

hero_x, hero_y, this);

// 循环将敌机标识为false清除

for (int i = 0; i < enemys.size(); i++) {

enemys.get(i).isLive = false;

}

// 将敌机数组清空

enemys.clear();

// 设置字体

g.setFont(new Font("微软雅黑", Font.BOLD, 20));

// 画提示信息

g.drawString("分数:" + score + "单击鼠标继续", 100, 350);

}

}

// 炮弹移动

public void bbmove() {

Bullet bullet = new Bullet(hero_x + 45, hero_y - 14, this);

bullets.addElement(bullet);

new BulletMoveThread(bullet).start();

}

@Override

public void run() {

while (true) {

// 如果英雄机标识为true

if (heroLive) {

// 炮弹移动

bbmove();

// 休眠时间

try {

Thread.sleep(100);

baozha();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

//定义一个方法用于处理爆炸效果

public void baozha() {

// 处理爆炸

for (int i = 0; i < bombs.size(); i++) {

Bomb bomb = bombs.elementAt(i);

if (bomb.isLive) {

bomb.graw();

} else {

bombs.remove(i);

}

}

}

//鼠标托动

@Override

public void mouseDragged(MouseEvent e) {

if (isDraging) {

int left = frame.getLocation().x;

int top = frame.getLocation().y;

frame.setLocation(left + e.getX() - xx, top + e.getY() - yy);

}

}

//鼠标移动

@Override

public void mouseMoved(MouseEvent e) {

if (heroLive) {

hero_x = e.getX() - 111 / 2;

hero_y = e.getY() - 120 / 2;

if (e.getX() <= 111 / 2) {

hero_x = 5;

}

if (e.getY() <= 120 / 2 + 39) {

hero_y = 39;

}

if (hero_x >= this.getWidth() - 100) {

hero_x = this.getWidth() - 100;

}

if (hero_y >= this.getHeight() - 120) {

hero_y = this.getHeight() - 120;

}

repaint();

}

}

//鼠标单击

@Override

public void mouseClicked(MouseEvent e) {

飞机大战实验报告

飞机大战实验报告 专业:网络工程132班 学号:139074298 姓名:孙仁强 计算机科学与技术学院二零一六年十二月

一、软件运行所需要的软硬件环境 本系统是以Windows系统为操作平台,用Java编程语言来实现本系统所需功能的。本机器的配置如下: 处理器:CORE i7 主频:1.2Hz以上 内存:4G以上 硬盘:HHD 50G 编程语言:Java 开发环境:windows7 开发软件:Eclipse Mars 二、游戏流程 1.用户打开游戏,进入开始菜单。 2.用户点击开始游戏按钮,进入游戏界面; 3.用户通过触屏方式控制玩家飞机上下左右移动,躲避与子弹相撞; 4.游戏失败后,显示本次游戏得分,用的秒数和水平; 5.退出游戏 三、主要代码 1、准备代码设置窗口使用双缓冲使飞机不闪烁 Constant设置窗口大小 package com.ahut.准备代码; publicclass Constant { publicstaticfinalint GAME_WIDTH = 350; publicstaticfinalint GAME_HEIGHT = 600; } package com.ahut.准备代码; import java.awt.Image; import java.awt.image.BufferedImage;

import java.io.IOException; import https://www.360docs.net/doc/e87285280.html,.URL; public class GameUtil { private GameUtil () {} public static Image getImage(String path) { BufferedImage bi = null; try { URL u = GameUtil.class.getClassLoader().getResource(path); bi = javax.imageio.ImageIO.read(u); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bi; } } package com.ahut.准备代码; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyFrame extends Frame{ public void lauchFrame() { setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT); setLocation(100, 100); setVisible(true); new PaintThread().start(); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); }

飞机大战实训报告.

程序设计综合实践 实习报告 学院名称 专业班级 学生姓名 学号 指导教师 山东科技大学

一、实习题目:飞机大战游戏的设计与实现 二、实习时间:18周~ 19周实习地点: 三、实习任务: 1.基本功能要求:飞机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术等技术实现战机(玩家)和敌机(计算机)对战功能 2.扩展功能:在完成基本功能基础上可以增加双人对战、游戏积分制、声音效果、多种子弹类型、客机类型、游戏关卡设计、多种类型敌机、游戏中间结果存贮等功能 四、小组分工说明:自己完成 五、实习成绩 六、指导教师对实习的评语: 指导教师(签章): 2015年月日

目录 1.概述 (4) 1.1实训项目简介 (4) 1.2实训项目功能说明 (4) 2.相关技术 (5) 2.1透明贴图技术 (5) 2.2 获取矩形区域并判断两个矩形区域是否相撞 (5) 2.3鼠标控制我方战机 (5) 2.4 Windows定时器技术 (6) 2.5 CObList链表 (6) 2.6对话框的应用 (7) 2.7双缓冲技术 (7) 3.需求分析 (7) 3.1功能需求分析 (7) 3.2 数据需求分析 . (7) 3.3 行为需求分析 (7) 3.4 其他需求 (7) 4.总体设计与详细设计 (8) 4.1 系统模块划分 (8) 4.2 主要功能模块 (8) 4.2.1系统主要类图 (8) 4.2.2飞机大战游戏设计执行流程图 (8) 4.3 扩展功能设计思路 (9) 4.4 软件结构设计体会 (9) 5.编码实现 (10) 5.1绘制游戏背景位图的程序 (10) 5.2各个游戏对象的绘制 (10) 5.3我方战机位置的动态控制 (12) 5.4各个游戏对象碰撞的实现 (13) 5.5游戏界面输出当前游戏信息 (15) 6.测试情况说明 (17) 6.1主要模块测试情况 (17) 6.2 主要功能测试情况 (18) 7. 实训中遇到的主要问题及解决方法 (19) 8.实训收获与体会 (19)

飞机大战MFC实验报告

实训报告 飞机大战游戏设计与开发

目录 1. 概述 (4) 2. 相关技术 (4) 2.1 透明贴图技术 (4) 2.2 CObList链表 (4) 2.3获取矩形区域函数 (4) 2.4弹出对话框函数 (5) 2.5字体的个性化输出函数 (5) 2.6设置定时器 (5) 2.7双缓冲技术 (5) 2.8 内存释放技术 (6) 2.9对话框中添加动态按钮 (6) 2.10检测方向键按下 (6) 3. 需求分析(用结构化方法或面向对象方法给出系统的主要需求模型) (6) 3.1功能需求分析 (6) 3.2 数据需求分析 (7) 3.3 行为需求分析 (7) 3.4 其他需求 (8) 4. 总体设计与详细设计 (8) 4.1 系统模块划分 (9) 4.2 主要功能模块 (10) 4.3 扩展功能设计思路 (10) 5. 编码实现 (11) 5.1游戏初始创建 (11) 5.2定时器 (11) 5.3背景及游戏开始、结束界面绘制函数 (11) 5.4键盘控制函数 (12) 5.5游戏对象进行碰撞测试和碰撞销毁 (13) 5.6创建动态按钮(开始游戏、游戏规则) (13) 5.6重新开始游戏代码 (14) 5.7设置游戏难度代码 (14) 5.8游戏结束时释放资源函数 (15) 5.9调整对话框大小函数 (15) 5.10开始界面背景绘制函数 (15) 5.11选择下一关卡以及选择完成后的执行代码 (16) 6.测试情况说明。 (17) 6.1主要模块测试情况(白盒) (17) 6.11各游戏对象碰撞检测爆炸模块测试 (17) 6.12战机导弹的方向速度模块测试 (17) 6.13文字显示,游戏结束和关卡进入模块测试 (18) 6.14设置游戏难度和重新开始模块测试 (18) 6.2 主要功能测试情况(黑盒) (18)

克隆飞机大战教学指导设计

克隆飞机大战教学指导 设计 集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]

第12课克隆飞机大战 【教材分析】 本节课是Scratch模块的第12课内容,是学习Scratch基础部分的延续,认识和理解“克隆”控件,为后面独立设计程序打下基础。 【学情分析】 在本节课之前,学生已经掌握了使用条件语句、循环语句,侦测、外观、动作等模块,还未涉及“克隆”控件,更不知如何使用。 【教学目标与要求】 1.认识与理解“克隆”控件。 2.掌握利用“克隆”控件控制角色变化方法。 3.通过使用“克隆”控件,掌握多个角色相同动作的实现方法。 4.通过使用“克隆”控件,感受编程的乐趣。 【教学重点与难点】 重点:认识与理解“克隆”控件。 难点:利用“克隆”控件控制角色变化。 【教学方法与手段】 任务驱动法。 【课时安排】 安排1课时。 【教学准备】 多媒体网络教室、《飞机大战》课件及学件。 【教学过程】

师:在这个游戏中共2个角色,分别是“火炮”和“飞机”。下面我们就根据教材提示绘制游戏角色。 1.绘制飞机角色 (1)单击,打开“绘图编辑器”,使用椭圆工具画出飞机造型。 师:除了使用椭圆工具,也可通过画笔、直线、矩形等工具画出飞机造型。 (2)单击“绘制新造型”,画出飞机爆炸后的造型。 师:可以放大或还原图像,便于观察或修改细节部分。 2.绘制火炮角色 (1)画出火炮,将中心点设置在火炮下方。中心点是角色旋转的位置,角色将以此点为中心进行旋转。 (2)复制造型1,调整火力位置,模拟开火的样式,注意中心点不移动。 师:通过快速点击造型1、造型2看到造型切换的效果。 任务二:编写程序 师:角色制作完毕后,我们该如何设计角色的程序呢?先来回忆一下,两个角色都是如何运转的? 生(预设):火炮间断发射,用鼠标左右键控制炮管方向。飞机从顶部随机位置往下飞,被炮击中爆炸并消失或飞到舞台底部消失。 1.火炮开火 (1)模拟火炮开火。 (2)利用鼠标左右键控制炮管方向。 2.克隆飞机

飞机大战游戏设计与实现

程序设计综合实践报告 信息科学与工程学院 2015年12月20日

目录 1. 概述 (1) 1.1 关卡设置 (1) 1.2 敌机设置 (1) 1.3 战机设置 (1) 1.4 游戏设置 (1) 2. 相关技术 (2) 2.1 Windows定时器技术 (2) 2.2 双缓冲技术 (2) 2.3 获取矩形区域 (2) 3. 总体设计与详细设计 (2) 3.1 系统模块划分 (2) 3.2 主要功能模块 (3) 4. 编码实现 (4) 4.1 初始准备 (4) 4.2 战机对象 (6) 4.3 敌机对象 (7) 4.4 道具对象 (9) 4.5 主要内容 (10) 4.6 窗口显示信息 (17) 5. 实训中遇到的主要问题及解决方法 (20) 5.1 产生中断及解决方案 (20)

5.2 图片闪烁问题及解决方案 (20) 6. 实训体会 (20)

1. 概述 项目:飞机大战 主要功能有以下几点: 1.1 关卡设置 本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。 1.2 敌机设置 小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。当小boss被战机的子弹击中或与战机相撞时失去5滴血。当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss消失。小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。大boss则在屏幕中随机走动不出屏幕,直至血量为0消失。 1.3 战机设置 战机初始有五条生命,每条命的血量为50,所获得的积分以及其生命值、血条都在窗口的左上角显示。在第一、二关时,按空格键战机会出现两个向上发射的炮弹,到第三、四关的时候,按空格键战机会发射三个不同方向的炮弹。战机吃到药瓶道具时血量会增加20,但不可以超过50;吃到闪电道具时,便可放大招,放大招的次数为15。当战机被敌方的炮弹击中或与敌方相撞时,血量减少,减少为0时生命值减1,直至生命值为0。 1.4 游戏设置 进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。根据积分情况进入不同的关卡。游戏通关时屏幕清空,并显示通关成功,按Y可重新开始游戏。当战机的血量以及生命值为0时,游戏失败,屏幕清空并显示游戏结束,按Y即可重新开始游戏。

飞机大战程序设计报告

程序设计综合实践 实习报告 一、实习题目:飞机大战游戏 二、实习时间:2014.9.20-2014.9.30实习地点:J13-132、232 三、实习任务:通过项目实战,掌握C++面向对象编程的基础技术和Windows 应用程序的编程方法,能够运用MFC技术及其开发环境进行小项目的开发。 四、小组分工说明: 五、实习成绩 六、指导教师对实习的评语:

指导教师(签章): 年月日 飞机大战游戏 1.实习目的 1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本 素质和技术能力要求。 1.2使学生掌握C++及Window程序设计的基本技术,能够运用MFC技术及其 开发环境进行小型项目的开发。 1.3重点培养学生的独立创新精神和查阅资料能力,提高其口头和书面的沟 通能力。 1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决 问题的能力 1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编 程习惯。 2. 实习计划 1、9.20—9.21先建立CGameObject 类,利用继承机制,根据此类进行依次的派生。 2、9.22—9.25再建立派生类:Bomb,Ball,Enemy,MyPlane,Explosion等, 并实现各自功能。 3、9.26—9.29在xxView.cpp中的OnTimer中实现背景的设置,对敌机, 导弹,敌机子弹,爆炸效果的绘制,以及敌机子弹和战机,导弹和敌机的碰撞检验,并添加爆炸效果 4、9.29—9.30最后释放pDC以及定时器

3.实习过程 3.1 技术准备 透明贴图技术 绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。 在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。整个功能的实现过程如下: (1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图; (2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中; (3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色; (4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图 设备描述表中存放的位图与位图设备描述表中的位图一样; (5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操 作绘制到对话框上; (6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作; (7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背 景进行逻辑异或操作绘制到对话框上; (8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指 针,最后把新建的设备描述表也删除。 BOOL CGameObject::LoadImage(CImageList& imgList,UINT

飞机大战游戏设计报告

飞机大战游戏设计报告 The document was finally revised on 2021

JAVA期中作业 飞 机 大 战 目录

飞机大战游戏设计报告 1、游戏名称 《飞机大战》 2、游戏初步框架: 游戏元素:游戏背景、不同种类的飞机、敌机 游戏成分:碰撞之后的血量计算、分数统计、暂停恢复、数据存储 游戏的总体设计:分为三个场景,第一个为游戏的进入场景,第二个为游戏的主界面场景,第三个为游戏结束场景,游戏分别有不同关卡,每一关有自己的剧情设计,玩法各一。 游戏开始场景就是开场背景,资源加载以及初始化处理,比如数据存储等。 游戏主界面场景是游戏核心,主要展示游戏过程,在游戏过程中计算得分,玩家战机血量等。 游戏结束界面是统计当前分数,显示玩家的最高分记录,并给出菜单的进一步设计。 3、游戏规则: (1)玩家战机数量为1。 (2)玩家可自由选择战机。 (3)玩家飞机可通过键盘控制战机上下左右移动。 (4)玩家子弹攻击敌机,敌机血量减少。 (5)敌机有计算机自主控制 (6)敌机从界面上端出现,不能反向运动,不能左右移动。 (7)敌机数量随机,由计算机控制。 (8)敌机可发送子弹,若战机被击中,血量减少,血量减少到一定程度,战机坠毁,游戏结束。 (9)子弹具有一定的速度。 (10)玩家可在一段时间内发送导弹清除屏幕中除Boss外的敌机。 4、需求分析 功能需求: 飞机大战需要实现的主要功能如下: (1)用户进入游戏开始菜单可以选择开始游戏、退出游戏。 (2)战机可根据玩家的操作自由移动,但不可移出窗体外。 (3)玩家飞机以一定速度自下而上飞行,用户可以控制飞机上下左右移动。 (4)玩家飞机可连续发射子弹,子弹位置由战机起始位置决定,用户通过操控飞机位置来扫射飞机。 (5)玩家可选择不同的飞机,不同种类飞机的飞行速度不同。

飞机大战游戏设计报告

JAVA期中作业 飞 机 大 战

目录 飞机大战游戏设计报告 1、游戏名称 (1) 2、游戏初步框架: (1) 3、游戏规则: (1) 4、需求分析 (2) 4.1功能需求: (2) 4.2数据需求: (3) 4.3用户需求: (3) 4.4行为需求: (3) 5、系统设计 (4) 5.1 系统模块划分 (4) 5.2 主要功能模块 (5) 6、详细设计 (6) 6.1 开发工具 (6) 6.2 游戏界面设计 (6)

飞机大战游戏设计报告 1、游戏名称 《飞机大战》 2、游戏初步框架: 游戏元素:游戏背景、不同种类的飞机、敌机 游戏成分:碰撞之后的血量计算、分数统计、暂停恢复、数据存储 游戏的总体设计:分为三个场景,第一个为游戏的进入场景,第二个为游戏的主界面场景,第三个为游戏结束场景,游戏分别有不同关卡,每一关有自己的剧情设计,玩法各一。 游戏开始场景就是开场背景,资源加载以及初始化处理,比如数据存储等。 游戏主界面场景是游戏核心,主要展示游戏过程,在游戏过程中计算得分,玩家战机血量等。 游戏结束界面是统计当前分数,显示玩家的最高分记录,并给出菜单的进一步设计。 3、游戏规则: (1)玩家战机数量为1。 (2)玩家可自由选择战机。 (3)玩家飞机可通过键盘控制战机上下左右移动。 (4)玩家子弹攻击敌机,敌机血量减少。

(5)敌机有计算机自主控制 (6)敌机从界面上端出现,不能反向运动,不能左右移动。 (7)敌机数量随机,由计算机控制。 (8)敌机可发送子弹,若战机被击中,血量减少,血量减少到一定程度,战机坠毁,游戏结束。 (9)子弹具有一定的速度。 (10)玩家可在一段时间内发送导弹清除屏幕中除Boss外的敌机。 4、需求分析 4.1功能需求: 飞机大战需要实现的主要功能如下: (1)用户进入游戏开始菜单可以选择开始游戏、退出游戏。 (2)战机可根据玩家的操作自由移动,但不可移出窗体外。 (3)玩家飞机以一定速度自下而上飞行,用户可以控制飞机上下左右移动。 (4)玩家飞机可连续发射子弹,子弹位置由战机起始位置决定,用户通过操控飞机位置来扫射飞机。 (5)玩家可选择不同的飞机,不同种类飞机的飞行速度不同。 (6)玩家飞机发射的子弹击中敌机后,敌机生命值减少,当生命值变为零时敌机坠毁,子弹击中敌机后消失。 (7)玩家飞机若被Boss敌机的子弹击中,玩家飞机则坠毁,游戏失败。

基于项目式学习的Scratch教学实践应用

龙源期刊网 https://www.360docs.net/doc/e87285280.html, 基于项目式学习的Scratch教学实践应用 作者:游畅 来源:《广东教育·综合》2018年第02期 项目式学习是一种新型的教学模式,融合了多种教育理念,其中具有代表性的是建构主义学习理论、多元智能理论、发现学习理论与情境认知理论。基于项目式学习的Scratch学习实践,是通过对课程内容进行“项目化”或“问题化”处理,开发课程学习资源,让学生利用各种资源工具进行合作学习,加强对学科知识的深度理解,并进一步重构或巩固所学知识。Scratch 项目强调从学生已有经验出发,在复杂、真实的生活情景中运用课程知识,自主地进行问题分析与探究,通过小组合作方式解决问题或制作作品,以完成知识的意义建构。 游戏是伴随人类社会发展的一种文化,是儿童生活的重要组成部分,也是童儿探索世界的积极活动。游戏是孩子的天性,很多学生喜欢玩游戏。从这个角度出发,教师可引导学生用Scratch来编写小游戏。Scratch项目设计主要采用主题类项目类型,下面以游戏项目主题为例,阐述基于项目式学习Scratch游戏项目教学实践过程。 游戏项目主题的设计目的,是让学生在创作数字游戏作品的过程中,掌握算法和设计方法,通过实践活动提高学生的逻辑推理能力,通过自由创作激发学生的创造潜力,通过小组合作增进学生的团队意识,通过创作整合其它学科的数字作品提高学生的知识水平。游戏类别可分为迷宫主题类(守球门、小蝌蚪找妈妈、大灰狼来了)、动作主题类(切水果、接苹果、打蝙蝠)、益智主题类(剪刀石头布、知识问答)、射击主题类(飞镖、飞机大战)等。 项目实施包括选定项目、协作分组、问题建模、主题探究、作品制作五个步骤,是项目式学习的核心所在。在开展项目式教学时,教师与学生在网络环境的支持下,依托在线学习社区结合协作交流工具、多样学习资源、认知工具等信息化学习工具进行项目式学习。下面以越秀区农林下路小学“动作类游戏”主题为例,阐述游戏项目实施的策略。 1. 确定项目 选定项目主题时,教师需要分析教学目标、分析学习者特征并对学习内容进行分析,确定项目。根据教学目标以及学习内容,确定研究中的具体教学目标为:引导学生掌握Scratch的基本操作,培养学生运用技术的创造力。 根据基于项目学习的具体要求,在教学实践中,教师首先要创设情境,让学生体验《切水果》游戏,让学生总结该游戏的“过关经验”,让学生讨论类似的游戏,从而提出创作主题是“动作类游戏”。通过学习社区的投票功能选出最受欢迎的作品作为将要完成的作品,如《打蝙蝠》。 2. 协作分组

飞机大战实训报告

目录 1. 概述.................................................. 1. 概述 这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。

实现的主要功能: 1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。 2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射子 弹数量增加。 3.战机起始十条命,可以通过过关和吃到道具增加血量。 4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss 会有分数加成。 5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高 等级。 2. 相关技术 碰撞检测 用CRect类的GetRect()函数可以获得当前对象的矩形区域, IntersectRect()并用此函数判断二者是否碰撞。 CObList链表 这个程序使用CObList链表来存储各效果。CobList类似于一个双向链表,POSITION 类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。 本程序中主要用到的函数有:

GetHeadPosition():获取链表首元素的POSITION; AddTail():将新的元素添加到链表最后; GetNext( POSITION& rPosition ):使rPosition指向下一个元素。 设置定时器 SetTimer()函数来设置定时器。 背景滚动 为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。 内存释放技术 这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。 3. 总体设计与详细设计 系统模块划分

飞机大战实训报告

目录 1. 概述 (1) 2. 相关技术 (2) 2.1碰撞检测 (2) 2.2 CObList链表 (2) 2.3 设置定时器 (2) 2.4 背景滚动 (2) 2.5内存释放技术 (2) 3. 总体设计与详细设计 (2) 3.1 系统模块划分 (2) 3.2 主要功能模块 (3) 4. 编码实现 (5) 5. 实训中遇到的主要问题及解决方法 (37) 6. 实训体会 (37) 1. 概述 这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。 实现的主要功能: 1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。 2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射 子弹数量增加。

3.战机起始十条命,可以通过过关和吃到道具增加血量。 4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者 boss会有分数加成。 5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高 等级。 2. 相关技术 2.1碰撞检测 用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断二者是否碰撞。 2.2CObList链表 这个程序使用CObList链表来存储各效果。CobList类似于一个双向链表,POSITION 类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。 本程序中主要用到的函数有: GetHeadPosition():获取链表首元素的POSITION; AddTail():将新的元素添加到链表最后; GetNext( POSITION& rPosition ):使rPosition指向下一个元素。 2.3 设置定时器 SetTimer()函数来设置定时器。 2.4 背景滚动 为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。 2.5内存释放技术 这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。 3. 总体设计与详细设计 3.1 系统模块划分

《信贷全流程风险管理系统、贷前尽职调研与贷后尽职管理系统高端讲座》

《信贷全流程风险管理、贷前尽职调查与贷后尽职管理高端讲座》 (两天学员版) 目录 第一模块:信贷风险管理的新经验 第二模块:信贷全流程风险管理的新技能 第三模块:个人信贷主要风险点与防控措施 第四模块:信贷尽职调查的新技能 第五模块:贷后尽职管理的新技能 第一模块、信贷风险管理的新经验 20条实战经验 10条工作经验 认识要高 营销要稳 思路要新 措施要硬 机制要活 活动要搞 目标要准 管理要细 经验要多 队伍要带 第二模块、信贷全流程风险管理的新技能 导论 风险 风险的双侧性质 商业银行信贷风险 商业银行信贷的地位与作用 信贷风险管理存在的问题 信贷风险的特点 信贷风险的危害 我国商业银行信贷管理的发展过程 我国商业银行信贷新规 信贷风险全流程管理 信贷风险全流程管理的意义 信贷风险全流程管理的目标 一、一大文化 培育新型的信贷文化 保护自己 保护家庭 保护同事 保护银行

保护社会 保护客户 二、两大关系 1.正确处理发展与管理的关系 (案例讨论:小微企业贷款准入管理) 2.正确处理激励与约束的关系 三、三大环节 1.贷前尽职调查环节 贷前尽职调查的定义 贷前尽职调查的作用 2.贷中尽职控制环节 前后台分离 信贷尽职审查审批 贷放分控 用信与支付控制 (案例讨论:贷款支付管理) 支付方式 实贷实付 不安抗辨权 账户监管 3.贷后尽职管理环节 贷后尽职管理的定义 贷后尽职管理的特征 贷后尽职管理的必要性 四、四大建设 1.信贷队伍建设 资格认定 分类管理 等级管理 职业培训 2.信贷体制建设 集约化经营 专业化经营 条线式管理 事业部制 3.信贷制度建设 产品制度 管理制度 考评制度 4.信贷系统建设 人员控制与机器控制 网上作业 信贷管理系统建设 客户关系管理系统建设

C++课程设计报告【飞机大战】

C++程序设计A2 课程设计报告 课程名称C++程序设计A2 课题名称飞机大战 专业计算机科学与技术 班级1820544 ___ 学号182054424 _____ 姓名王锐____ _ 指导教师韩燕丽__ 2019年6 月15 日

(一)、课程设计题目: 飞机大战 (二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握C++语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C++的编程思路来完成系统的设计。 (2)在系统的设计中,要求运用面向对象的机制(继承及多态性),来实现系统功能,并且要建立清晰的类层次结构。 (3)在系统设计中要分析和定义各个类,每个类中要有各自的数据成员和成员数。 (4)主函数中提供菜单选项,并给出足够的选择信息以及提示信息。 (5)程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行。对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。(三)、设计方法和基本原理: 功能要求: 设计一个基于控制台的简洁流畅的飞机大战游戏。 问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试;

飞机大战游戏 产品需求规格说明书

[键入文字] 飞机大战游戏 产品需求规格说明书 1

目录 0. 文档介绍 (1) 0.1文档目的 (1) 0.2文档范围 (1) 0.3读者对象 (1) 0.4参考文档 (1) 0.5术语与缩写解释 (1) 1. 产品介绍 (2) 2. 产品面向的用户群体 (2) 3. 产品应当遵循的标准或规范 (2) 4. 产品范围 (2) 5. 产品中的角色 (2) 6. 产品的功能性需求 (2) 6.0功能性需求分类 (2) 6.1游戏基本规则 (3) 6.1.1 飞机对战规则 (3) 6.2游戏特效 (3) 6.2.1 界面背景特效 (3) 6.2.2游戏对象特效 (4) 6.2.3 声音特效 (4) 6.2.4 文字提示 (4) 7. 产品的非功能性需求 (4) 7.1用户界面需求 (4) 7.2软硬件环境需求 (5) 7.3产品质量需求 (5) 附录B:需求确认 (6)

0. 文档介绍 0.1 文档目的 让系统设计人员了解飞机大战游戏的开发要求。 0.2 文档范围 本文主要包含飞机大战游戏的需求。包括游戏规则及界面特效的要求。 0.3 读者对象 系统设计人员 0.4 参考文档 《Windows游戏编程大师技巧》 0.5 术语与缩写解释

1. 产品介绍 飞机大战游戏作为PC中一款桌面游戏,界面简洁流畅、游戏方式简单,玩起来易于上手。 2. 产品面向的用户群体 面向休闲游戏的玩家,例如家庭、办公室人员等,使用人群广泛。 3. 产品应当遵循的标准或规范 本产品遵循Microsoft编程规范。 4. 产品范围 仅针对使用Microsoft Windows XP及以上版本操作系统,不必考虑低级版本的兼任性。 5. 产品中的角色 6. 产品的功能性需求 6.0 功能性需求分类

基于项目式学习的Scratch教学实践应用

基于项目式学习的Scratch教学实践应用 项目式学习是一种新型的教学模式,融合了多种教育理念,其中具有代表性的是建构主义学习理论、多元智能理论、发现学习理论与情境认知理论。基于项目式学习的Scratch学习实践,是通过对课程内容进行“项目化”或“问题化”处理,开发课程学习资源,让学生利用各种资源工具进行合作学习,加强对学科知识的深度理解,并进一步重构或巩固所学知识。Scratch项目强调从学生已有经验出发,在复杂、真实的生活情景中运用课程知识,自主地进行问题分析与探究,通过小组合作方式解决问题或制作作品,以完成知识的意义建构。 游戏是伴随人类社会发展的一种文化,是儿童生活的重要组成部分,也是童儿探索世界的积极活动。游戏是孩子的天性,很多学生喜欢玩游戏。从这个角度出发,教师可引导学生用Scratch来编写小游戏。Scratch项目设计主要采用主题类项目类型,下面以游戏项目主题为例,阐述基于项目式学习Scratch游戏项目教学实践过程。一、游戏项目的主题设计 游戏项目主题的设计目的,是让学生在创作数字游戏作品的过程中,掌握算法和设计方法,通过实践活动提高学生

的逻辑推理能力,通过自由创作激发学生的创造潜力,通过小组合作增进学生的团队意识,通过创作整合其它学科的数字作品提高学生的知识水平。游戏类别可分为迷宫主题类(守球门、小蝌蚪找妈妈、大灰狼来了)、动作主题类(切水果、接苹果、打蝙蝠)、益智主题类(剪刀石头布、知识问答)、射击主题类(飞镖、飞机大战)等。二、游戏项目的实施策略 项目实施包括选定项目、协作分组、问题建模、主题探究、作品制作五个步骤,是项目式学习的核心所在。在开展项目式教学时,教师与学生在网络环境的支持下,依托在线学习社区结合协作交流工具、多样学习资源、认知工具等信息化学习工具进行项目式学习。下面以越秀区农林下路小学“动作类游戏”主题为例,阐述游戏项目实施的策略。 1. 确定项目 选定项目主题时,教师需要分析教学目标、分析学习者特征并对学习内容进行分析,确定项目。根据教学目标以及学习内容,确定研究中的具体教学目标为:引导学生掌握Scratch的基本操作,培养学生运用技术的创造力。 根据基于项目学习的具体要求,在教学实践中,教师首先要创设情境,让学生体验《切水果》游戏,让学生总结该游戏的“过关经验”,让学生讨论类似的游戏,从而提出创作主题是“动作类游戏”。通过学习社区的投票功能选出最

c++飞机大战实训报告附带码

目录 1. 概述 (2) 实训项目简介 (2) 实训功能说明 (2) 基本功能 (2) 附加功能 (2) 2. 相关技术 (3) Windows定时器技术 (3) 透明贴图实现技术 (3) CObList链表 (4) 获取矩形区域 (4) 使用AfxMessageBox显示游戏过程中的提示信息 (4) 内存释放 (4) CImageList处理爆炸效果 (4) 对话框的应用 (4) 3. 总体设计与详细设计 (4) 系统模块划分 (4) 主要功能模块 (5) 系统对象类图 (5) 系统主程序活动图 (5) 系统部分流程图 (5) 4. 编码实现 (8) 绘制游戏背景位图程序 (8) 飞机大战游戏对象的绘制程序 (8) 飞机大战游戏对象战机位置的动态控制 (8) 飞机大战游戏对象之间的碰撞实现 (9) 游戏界面输出当前信息 (9) 5. 项目程序测试 (9) 战机移动及子弹发射模块测试 (9) 敌机及炸弹模块测试 (20) 爆炸模块测试 (20) 6. 实训中遇到的主要问题及解决方法 (10) 7. 实训体会 (11)

1. 概述 实训项目简介 本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。 实训功能说明 基本功能 (1)设置一个战机具有一定的速度,通过键盘,方向键可控制战机的位置,空格键发射子弹。 (2)界面中敌机出现的位置,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加。 (3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。 (4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。且爆炸发生后敌机、子弹、炸弹均消失,战机生命值减一。 附加功能 (1)为游戏界面添加了背景图片,并在战机发射子弹、战机击中敌机、敌机击中战机、以及战机敌机相撞时均添加了背景音效。 (2)为游戏设置了不同的关卡,每个关卡难度不同,敌机与敌机炸弹的速度随着关卡增大而加快,进入第二关以后敌机从上下方均会随机出现,且随机发射炸弹。 (3)第一关卡敌机从上方飞出,速度一定,战机每打掉一直敌机则增加一分,每积十分,则为战机增加一个生命值,当战机得分超过50分则可进入下一关;进入第二、三关时敌机速度加快,分别从上下两方飞出,此时战机每得分20、30分,才会增加一个生命值,得分超过100、150分则进入下一关、通关。 (4)在游戏界面输出当前游戏进行信息,包括当前得分、当前关卡以及击中敌机数量。 (5)增加了鼠标控制战机位置这一效果,战绩的位置随着鼠标的移动而移动,并且点击鼠标左键可使得战机发射子弹。 (6)实现了暂停游戏的功能,玩家可通过键盘上的‘Z’键,对游戏进行暂停。 (7)通过对话框的弹出可提示玩家是否查看游戏说明、是否进入下一关、是否重新开始等消息,使得玩家可自己选择。

c++实训报告---飞机大战

目录 1. 概述 (2) 1.1 实训项目简介 (2) 1.2 实训功能说明 (2) 1.2.1 基本功能 (2) 1.2.2 附加功能 (2) 2. 相关技术 (3) 2.1 Windows定时器技术 (3) 2.2 透明贴图实现技术 (3) 2.3 CObList链表 (4) 2.4获取矩形区域 (5) 2.5使用AfxMessageBox显示游戏过程中的提示信息 (5) 2.6内存释放 (5) 2.7 CImageList处理爆炸效果 (5) 2.8对话框的应用 (5) 3. 总体设计与详细设计 (6) 3.1 系统模块划分 (6) 3.2 主要功能模块 (7) 3.2.1 系统对象类图 (7) 3.2.2 系统主程序活动图 (8) 3.2.3 系统部分流程图 (8) 4. 编码实现 (11) 4.1 绘制游戏背景位图程序 (11) 4.2 飞机大战游戏对象的绘制程序 (12) 4.3 飞机大战游戏对象战机位置的动态控制 (14) 4.4 飞机大战游戏对象之间的碰撞实现 (16) 4.5 游戏界面输出当前信息 (18) 5. 项目程序测试 (19) 5.1战机移动及子弹发射模块测试 (19) 5.2 敌机及炸弹模块测试 (20) 5.3 爆炸模块测试 (20) 6. 实训中遇到的主要问题及解决方法 (20) 7. 实训体会 (20)

1. 概述 1.1 实训项目简介 本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。 1.2 实训功能说明 1.2.1 基本功能 (1)设置一个战机具有一定的速度,通过键盘,方向键可控制战机的位置,空格键发射子弹。 (2)界面中敌机出现的位置,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加。 (3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。 (4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。且爆炸发生后敌机、子弹、炸弹均消失,战机生命值减一。 1.2.2 附加功能 (1)为游戏界面添加了背景图片,并在战机发射子弹、战机击中敌机、敌机击中战机、以及战机敌机相撞时均添加了背景音效。 (2)为游戏设置了不同的关卡,每个关卡难度不同,敌机与敌机炸弹的速度随着关卡增大而加快,进入第二关以后敌机从上下方均会随机出现,且随机发射炸弹。 (3)第一关卡敌机从上方飞出,速度一定,战机每打掉一直敌机则增加一分,每积十分,则为战机增加一个生命值,当战机得分超过50分则可进入下一关;进入第二、三关时敌机速度加快,分别从上下两方飞出,此时战机每得分20、30分,才会增加一个生命值,得分超过100、150分则进入下一关、通关。 (4)在游戏界面输出当前游戏进行信息,包括当前得分、当前关卡以及击中敌机数量。 (5)增加了鼠标控制战机位置这一效果,战绩的位置随着鼠标的移动而移动,并且点击鼠标左键可使得战机发射子弹。 (6)实现了暂停游戏的功能,玩家可通过键盘上的‘Z’键,对游戏进行暂停。 (7)通过对话框的弹出可提示玩家是否查看游戏说明、是否进入下一关、是否重新开始等消息,使得玩家可自己选择。

成功案例分析-微信

简介 微信是于年月日推出地一个为提供服务地免费.个人收集整理勿做商业用途 提供类似于免费即时通讯服务地免费聊天软件.用户可以通过手机、平板、网页快速发送语音、视频、图片和文字.微信提供公众平台、朋友圈、消息推送等功能,用户可以通过摇一摇、搜索号码、附近地人、扫二维码方式添加好友和关注公众平台,同时微信帮将内容分享给好友以及将用户看到地精彩内容分享到微信朋友圈.个人收集整理勿做商业用途 微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)短信、、和,同时,也可以使用通过共享流媒体内容地资料和基于位置地社交插件“摇一摇”、“”、“”、”公众平台“、”语音记事本“等服务插件.微信支持多种语言,支持,,和数据网络,版,版、版、版.个人收集整理勿做商业用途 截至年月注册用户量已经突破亿,是亚洲地区最大用户群体地移动即时通讯软件. 发展简史 微信由地信息技术公司(.)于年月筹划启动,由腾讯广州研发中心产品团队打造.该团队经理所带领地团队曾成功开发过、等互联网项目.腾讯公司总裁在产品策划地邮件中确定了这款产品地名称叫做“微信”.个人收集整理勿做商业用途 年: 年月日,微信发布针对用户地测试版.该版本支持通过号来导入现有地联系人资料,但仅有即时通讯、分享照片和更换头像等简单功能.个人收集整理勿做商业用途 在随后、和三个测试版中,微信逐渐增加了对通讯录地读取、与腾讯微博私信地互通以及多人会话功能地支持,截至年月底,腾讯微信获得了四五百万注册用户.个人收集整理勿做商业用途 年月日,微信发布了版本,该版本新增了那样地语音对讲功能,使得微信地用户群第一次有了显著增长.个人收集整理勿做商业用途 年月,微信添加了“查看附近地人”地陌生人交友功能,用户达到万.到年底,微信用户已超过万;年月,微信用户破亿.个人收集整理勿做商业用途 年月日,微信发布版本,该版本加入了“摇一摇”和漂流瓶功能,增加了对繁体中文语言界面地支持,并增加港、澳、台、美、日五个地区地用户绑定手机号.个人收集整理勿做商业用途 年: 年月,微信用户数亿大关.月日,微信发布版本.这一版本增加了类似和一样地相册功能,并且可以把相册分享到朋友圈.]个人收集整理勿做商业用途 年月,腾讯公司开始做出将微信推向国际市场地尝试,为了微信地欧美化,将其英文版更名为“”,之后推出多种语言支持.个人收集整理勿做商业用途 年月日,微信版本增加了视频聊天插件,并发布网页版微信界面. 年月日,微信版本增加了摇一摇传图功能,该功能可以方便地把图片从电脑传送到手机上.这一版本还新增了语音搜索功能,并且支持解绑手机号码和号,进一步增强了用户对个人信息地把控.个人收集整理勿做商业用途 年月日,腾讯微信团队发布消息称,微信注册用户已破亿. 年: 年月日深夜,腾讯微信团队在微博上宣布微信用户数突破亿,成为全球下载量和用户量最多地通信软件,影响力遍及、、、,海外聚集地和少数西人.年月因进行实名化,要求用户上传手持身份证照片引起部分网民反感.个人收集整理勿做商业用途 年月日,微信发布版.这一版本支持实时对讲和多人实时语音聊天,并进一步丰富了“摇一摇”和二维码地功能,支持对聊天记录进行搜索、保存和迁移.同时,微信还加入了语音提醒和

相关文档
最新文档