android打飞机游戏课程设计论文解读.docx

上传人:b****4 文档编号:12311887 上传时间:2023-04-18 格式:DOCX 页数:60 大小:3.67MB
下载 相关 举报
android打飞机游戏课程设计论文解读.docx_第1页
第1页 / 共60页
android打飞机游戏课程设计论文解读.docx_第2页
第2页 / 共60页
android打飞机游戏课程设计论文解读.docx_第3页
第3页 / 共60页
android打飞机游戏课程设计论文解读.docx_第4页
第4页 / 共60页
android打飞机游戏课程设计论文解读.docx_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

android打飞机游戏课程设计论文解读.docx

《android打飞机游戏课程设计论文解读.docx》由会员分享,可在线阅读,更多相关《android打飞机游戏课程设计论文解读.docx(60页珍藏版)》请在冰豆网上搜索。

android打飞机游戏课程设计论文解读.docx

android打飞机游戏课程设计论文解读

 

《java和android》

课程设计

 

题目:

星球大战(飞机游戏)

专业:

计算机科学与技术

年级:

2010

学号:

2010312050

姓名:

杨显财

日期:

2013/7/20

前言

自1946年第一台计算机问世以来,计算机产业的飞速发展已远远超出人们对它的预料,在某些生产线上,甚至一秒钟就能生产出一台微型计算机,产量猛增,价格低廉,这就使得它的应用范围迅速扩展。

如今,计算机已深入到人类社会的各个领域。

各种应用程序不断地被开发应用,随之程序设计语言也不断发展完善,Java便是这程序语言世界里的一朵奇葩,如今甚为流行。

与C++语言相比,Java是一种完全面向对象的语言,它吸取了C++语言的语句结构,去掉了指针、多继承、运算符重载等这些降低安全性、低可靠性的语言元素,并实现了自动回收垃圾的功能,从而使得Java语言更具有可移植性、鲁棒性、安全性、与环境无关性等特点,赢得了广大软件开发者的青睐。

今天,作为计算机科学与技术及相关专业的学生,更应该了解Java语言的语法规范,理解Java语言程序设计的基本特点,掌握利用Java语言编写程序的基本技巧,学会利用Java开发环境调试程序。

为了更进一步将所学知识与实际结合起来,我选择了用Java实现飞机游戏(星球大战),在老师指导的基础上增加了一些功能和背景素材,使这个游戏具有更佳的视觉效果和可玩性。

一、课程设计目的

1、熟悉Java开发环境,熟悉用Java完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。

2、通过此设计,了解Java语言的特点;熟悉Java程序的编写;体会Java语言在问题求解中的特点。

3、总结学习Java语言的心得和体会,并对Java课程设置提出自己的意见和建议。

二、设计任务及要求

根据Java和android课程的学习,选择以下所列中的任一,并完成:

1、java版的翻窗口游戏;

2、android版的翻窗口游戏;

3、java版的打飞机游戏;

4、android版的打飞机游戏。

三、任务选定

根据小学期我对Java语言的学习和了解,我决定做一个Java版的打飞机游戏(星球大战)。

四、总体设计框架(主要功能)

星球大战

爆炸

我军飞机移动

敌军发子弹

敌军飞机移动

音乐

等级通关

我军发子弹

 

背景音乐

我军发射子弹的音乐

敌军飞机撞到我军飞机

敌机子弹碰到我军子弹

 

敌机子弹碰到我军飞机

我军发子弹碰到敌机

 

五、详细设计与实现过程

(一)配置开发环境

1、安装JDK

首先将下载的jdk-7u7-windows-i586.exe安装到C:

\下

2、配置环境变量

选择计算机>右键>属性>高级设置>环境变量,选择Path,双击Path,将安装JDK目录下的bin文件夹的路径复制,然后将它粘贴到Path后面,点击确定按钮完成环境变量的配置。

3、安装eclipse

双击eclipse快捷方式图标,它会在你选择的路径下生成一个workspace文件夹,以后的项目都在这里面。

(二)功能定义

本游戏通过玩家飞机发射子弹攻击敌机,当敌机被飞机子弹打中的时候飞发生爆炸,使得敌机消失,并且同时播放效果音乐以及爆炸效果。

本游戏中的角色:

我军飞机、敌机、敌军BOSS等均能发射子弹攻击对方。

当敌机子弹打中我军时我军飞机的生命值会相应的减少1次,我军飞机共有5次生命,5次生命都用完后就跳到GAMEOVER的页面,这时可以选择重新开始或退出游戏。

当我军子弹击中敌军时,敌军和子弹消失。

当飞机与敌机相撞的时候,敌机爆炸(同时播放效果),我军飞机减少生命值减1,击中一架敌军加10分,当分数答到1200分时,BOSS就会出现,BOSS有100次生命值,击败BOSS,会跳出FICTORY页面,游戏胜利即游戏通关。

(三)类的设计(类之间的关系图)

 

(四)java源文件及其功能如表所示

表1.1文件清单

序号

文件名

主要功能

备注

1

GameView.java

主窗体类

含main方法

2

Plane.java

定义飞机类

3

Bullet.java

定义飞机的子弹类

4

EnPlane.java

定义敌机类

5

EnBullet.java

定义敌机子弹类

6

Boss.java

定义Boss类

7

Boom.java

定义爆炸类

8

Score.java

定义分数类

9

Ufo.java

定义Ufo类

10

BackGround.java

定义游戏背景类

11

GameSound.java

定义播放背景音乐类

(五)系统实现

1、主类GameView(其中有一个内部类(线程类))

(1)成员变量如表2.1所示

表2.1成员变量

成员变量描述

变量类型

成员变量名

工具包

Toolkit

tk

游戏状态

int

Game_type

飞机坐标

int

x,y

子弹坐标

int

x,y

飞机对象

Plane

plane

Boss对象

Boss

boss

Ufo对象

Ufo

uf

背景对象

BackGround

bg

子弹集合

ArrayList

List

敌机集合

ArrayList

List

敌机子弹集合

ArrayList

List

爆炸图片数组

Image

booms[]

媒体跟踪器对象

MediaTracker

mt

声音对象

GameSound

music

计数器

int

num

(2)方法如表2.2所示

表2.2方法

名称

功能

备注

GameView()

创建主窗口

addKeyListener()

添加键盘监听

paint(Graphicsg)

画图片方法

main(String[]args)

主方法

(3)游戏窗体及代码

packageplane.view;

importjava.awt.Button;

importjava.awt.Color;

importjava.awt.Frame;

importjava.awt.Graphics;

importjava.awt.Image;

importjava.awt.Toolkit;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importjava.awt.event.MouseAdapter;

importjava.awt.event.MouseEvent;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Random;

importplane.view.GameSound.BgSoundThread;

publicclassGameViewextendsFrame{

staticGameViewgameView;

publicToolkittk=Toolkit.getDefaultToolkit();

publicImageplane_img=tk.getImage("./src/images/mplane.png");

publicImagecirclebullet=tk.getImage("./src/images/bullet2.png");

publicImageenemyplane[]={tk.getImage("./src/images/p1.png"),tk.getImage("./src/images/p2.png"),

tk.getImage("./src/images/p3.png"),tk.getImage("./src/images/p4.png")};

publicImageenemybullet=tk.getImage("./src/images/bullet.png");

publicImagebooms[]={tk.getImage("./src/images/bao.gif"),tk.getImage("./src/images/b2.gif"),

tk.getImage("./src/images/b3.gif"),tk.getImage("./src/images/b4.gif"),

tk.getImage("./src/images/b5.gif"),tk.getImage("./src/images/b6.gif"),

tk.getImage("./src/images/b7.gif"),tk.getImage("./src/images/b8.gif"),

tk.getImage("./src/images/b9.gif"),tk.getImage("./src/images/b10.gif"),

tk.getImage("./src/images/b11.gif")};

publicImagebg=tk.getImage("./src/images/bg.jpg");

publicImagego=tk.getImage("./src/images/go.png");

publicImageboos=tk.getImage("./src/images/boos.png");

publicImagevictory=tk.getImage("./src/images/victory.png");

publicImageufo=tk.getImage("./src/images/ufo.gif");

publicPlaneplane;

publicBulletbullet;

publicListbullets;

publicinttime;

publicListenPlane;

publicListenBullet;

publicRandomrandom=newRandom();

publicBoomboom;

publicBoomplaneBoom;

privatebooleanPauseConvertStart=false;

publicStringmusicFire="music/fire1.mp3";

publicStringmusicBgString="music/bg.mp3";

publicStringmusicBg="";

BackGroundbackGround;

privateImageimageBuff;

privateintGameState;//0表示游戏结束,1表示正在运行

GameSoundgs=newGameSound();

publicScorescore;

repainThreadrp;

Boosboos2;

Ufouf;

booleanisOver=true;

publicintenPlaneCount=60;

RandomrandomUfo=newRandom();

@Override

publicvoidupdate(Graphicsg){

if(imageBuff==null){

imageBuff=this.createImage(700,700);

}

GraphicsgBuff=imageBuff.getGraphics();

g.drawImage(imageBuff,0,0,getWidth(),getHeight(),this);

paint(gBuff);

}

publicclassrepainThreadextendsThread{

@Override

publicvoidrun(){

if(score.nextState)

{

time=0;

enPlaneCount=enPlaneCount-10;

}

while(true){

try{

time++;

if(time%enPlaneCount==0){

if(!

score.isBoos&&GameState==1)

{

enPlane.add(newEnplane(random.nextInt(700-150),0,true,GameView.this,enemyplane[random.nextInt(4)]));

}

if(!

plane.isLife||!

boos2.isLife)

{

GameState=0;

Buttonbt=newButton("重新开始");

bt.addMouseListener(newMouseAdapter(){

@Override

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

super.mouseClicked(e);

gs.bst.stop();

gameView.dispose();

gameView=newGameView();

}

});

bt.setBackground(Color.white);

bt.setSize(60,30);

bt.setLocation(380,477);

GameView.this.add(bt);

ButtonescButton=newButton("退出游戏");escButton.setBackground(Color.white);

escButton.setSize(60,30);

escButton.setLocation(461,477);

escButton.addMouseListener(newMouseAdapter(){

@Override

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

super.mouseClicked(e);

System.exit(0);

}

});

GameView.this.add(escButton);

this.stop();

}

}

repaint();//不断重画该窗体

Thread.sleep(20);

}catch(Exceptione){

//TODO:

handleexception

}

}

}

}

publicGameView(){

uf=newUfo(100,0,true,this);

boos2=newBoos(0,27,true,this,100);

gs=newGameSound();

gs.playBgSound(musicBgString);

score=newScore(0,0,true,this);

GameState=1;

backGround=newBackGround(0,0,this);

boom=newBoom(-200,-100,false,this);

enBullet=newArrayList<>();

enPlane=newArrayList();

bullets=newArrayList<>();

planeBoom=newBoom(-200,-200,false,this);

rp=newrepainThread();

rp.start();

plane=newPlane(100,550,true,this,5);

this.setSize(700,700);

this.setTitle("星球大战");

this.setResizable(false);

this.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowClosing(WindowEvente){

System.exit(0);//0表示正常退出

}

});

this.addKeyListener(newKeyAdapter(){

@Override

publicvoidkeyPressed(KeyEvente){

if(e.getKeyCode()==KeyEvent.VK_ESCAPE){

if(GameState==2)

{

GameState=1;

PauseConvertStart=true;

}

elseif(GameState==1){

GameState=2;

PauseConvertStart=false;

}

else{

System.exit(0);

}

}

if(e.getKeyCode()==KeyEvent.VK_ENTER){

if(GameState==0){

gs.bst.stop();

gameView.dispose();

gameView=newGameView();

}

}

plane.keyPre(e);

}

@Override

publicvoidkeyReleased(KeyEvente){

plane.keyRepre(e);

}

});

this.setLocationRelativeTo(null);

this.setVisible(true);

}

@Override

publicvoidpaint(Graphicsg){//在窗体中画东西系统自动调用

if(GameState==2){

gs.bst.suspend();

return;

}

if(GameState==1&&PauseConvertStart){

gs.bst.resume();

gs.tag=true;

}

if((!

plane.isLife||!

boos2.isLife)&&isOver)

{

backGround.draw(g);

score.draw(g);

isOver=false;

}

if(plane.isLife&&boos2.isLife){

backGround.draw(g);

uf.draw(g);

score.draw(g);

if(boom!

=null&&boom.isLife){

boom.darw(g);

}

if(planeBoom.isLife)

{

planeBoom.darw(g);

}

for(inti=0;i

EnBulleteb=enBullet.get(i);

if(eb.y>=700){

enBullet.remove(eb);

}

if(eb.isLife)

{

eb.draw(g);

}

else

{

enBullet.remove(eb);

}

}

if(!

score.isBoos)

{

for(inti=0;i

Enplaneep=enPlane.get(i);

if(ep.isLife)

{

ep.draw(g);

}

else

{

enPlane.remove(ep);

}

}

}

else{

boos2.draw(g);

}

for(inti=0;i

Bulletb=bullets.get(i);

b.hit(enPlane,enBullet,boos2);

if(b.y<=0){//判断子弹超出屏幕

bullets.remove(b);//把子弹从弹夹中移除

}

b.draw(g);

}

}

if(!

plane.isLife||!

boos2.isLife)

{

if(!

plane.isLife){

g.drawImage(go,177,200,this);

}

if(!

boos2.isLife){

g.drawImage(vi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1