android-打飞机游戏-课程设计论文.doc_第1页
android-打飞机游戏-课程设计论文.doc_第2页
android-打飞机游戏-课程设计论文.doc_第3页
android-打飞机游戏-课程设计论文.doc_第4页
android-打飞机游戏-课程设计论文.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(第三学期课程设计论文) java和android 课 程 设 计题 目: 星球大战(飞机游戏) 专 业: 计算机科学与技术 年 级: 2010 学 号: 2010312050 姓 名: 杨显财 日 期: 2013/7/20 目 录目录2前言3一、课程设计目的4二、设计任务及要求4三、任务选定4四、总体设计框架4五、详细设计与实现过程5(一)配置开发环境5(二)功能定义6(三)类的设计8(四)java源文件及其功能如表所示8(五)系统实现91、主类GameView92、类Plane173、类Bullet224、类EnPlane255、类EnBullet286、类Ufo307、类Boss338、类GameSound369.类Boom3810、类BackGround4011、类Score41六、课程设计小结44参考资料45前 言自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次生命都用完后就跳到GAME OVER的页面,这时可以选择重新开始或退出游戏。当我军子弹击中敌军时,敌军和子弹消失。当飞机与敌机相撞的时候,敌机爆炸(同时播放效果),我军飞机减少生命值减1,击中一架敌军加10分,当分数答到1200分时,BOSS就会出现,BOSS有100次生命值,击败BOSS,会跳出FICTORY页面,游戏胜利即游戏通关。(三)类的设计(类之间的关系图)(四)java源文件及其功能如表所示表1.1 文件清单序号文件名主要功能备注1GameView.java主窗体类含main方法2Plane.java定义飞机类3Bullet.java定义飞机的子弹类4EnPlane.java定义敌机类5EnBullet.java定义敌机子弹类6Boss.java定义Boss类7Boom.java定义爆炸类8Score.java定义分数类9Ufo.java定义Ufo类10BackGround.java定义游戏背景类11GameSound.java定义播放背景音乐类(五)系统实现1、主类GameView(其中有一个内部类(线程类))(1)成员变量如表2.1所示表2.1 成员变量成员变量描述变量类型成员变量名工具包Toolkittk游戏状态intGame_type飞机坐标intx,y子弹坐标intx,y飞机对象PlaneplaneBoss对象BossbossUfo对象Ufouf背景对象BackGroundbg子弹集合ArrayListList敌机集合ArrayListList敌机子弹集合ArrayListList爆炸图片数组Imagebooms媒体跟踪器对象MediaTrackermt声音对象GameSoundmusic计数器intnum(2)方法如表2.2所示表2.2 方法名称功能备注GameView()创建主窗口addKeyListener()添加键盘监听paint(Graphics g)画图片方法main(String args)主方法(3)游戏窗体及代码package plane.view;import java.awt.Button;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.List;import java.util.Random;import plane.view.GameSound.BgSoundThread;public class GameView extends Frame static GameView gameView;public Toolkit tk = Toolkit.getDefaultToolkit();public Image plane_img = tk.getImage(./src/images/mplane.png);public Image circlebullet = tk.getImage(./src/images/bullet2.png);public Image enemyplane = tk.getImage(./src/images/p1.png),tk.getImage(./src/images/p2.png), tk.getImage(./src/images/p3.png),tk.getImage(./src/images/p4.png);public Image enemybullet = tk.getImage(./src/images/bullet.png);public Image booms = 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);public Image bg = tk.getImage(./src/images/bg.jpg);public Image go = tk.getImage(./src/images/go.png);public Image boos = tk.getImage(./src/images/boos.png);public Image victory = tk.getImage(./src/images/victory.png);public Image ufo = tk.getImage(./src/images/ufo.gif);public Plane plane; public Bullet bullet;public List bullets;public int time;public List enPlane;public List enBullet;public Random random=new Random();public Boom boom;public Boom planeBoom;private boolean PauseConvertStart = false;public String musicFire = music/fire1.mp3 ;public String musicBgString = music/bg.mp3;public String musicBg = ;BackGround backGround;private Image imageBuff;private int GameState; / 0 表示游戏结束,1表示正在运行GameSound gs = new GameSound();public Score score;repainThread rp;Boos boos2;Ufo uf;boolean isOver = true;public int enPlaneCount= 60;Random randomUfo = new Random();Overridepublic void update(Graphics g) if (imageBuff = null) imageBuff = this.createImage(700, 700);Graphics gBuff = imageBuff.getGraphics();g.drawImage(imageBuff, 0, 0, getWidth(), getHeight(), this);paint(gBuff); public class repainThread extends Thread Override public void run() if(score.nextState) time = 0; enPlaneCount = enPlaneCount - 10; while(true) try time+; if (time % enPlaneCount= 0) if(!score.isBoos&GameState=1) enPlane.add(new Enplane(random.nextInt(700-150),0,true,GameView.this,enemyplanerandom.nextInt(4); if(!plane.isLife | !boos2.isLife) GameState = 0; Button bt = new Button(重新开始); bt.addMouseListener(new MouseAdapter() Override public void mouseClicked(MouseEvent e) / TODO Auto-generated method stub super.mouseClicked(e); gs.bst.stop(); gameView.dispose(); gameView = new GameView(); ); bt.setBackground(Color.white); bt.setSize(60,30); bt.setLocation(380, 477); GameView.this.add(bt); Button escButton = new Button(退出游戏); escButton.setBackground(Color.white); escButton.setSize(60,30); escButton.setLocation(461, 477); escButton.addMouseListener(new MouseAdapter() Override public void mouseClicked(MouseEvent e) / TODO Auto-generated method stub super.mouseClicked(e); System.exit(0); ); GameView.this.add(escButton); this.stop(); repaint();/不断重画该窗体 Thread.sleep(20); catch (Exception e) / TODO: handle exception public GameView()uf = new Ufo(100, 0, true, this);boos2 = new Boos(0, 27, true, this,100);gs = new GameSound();gs.playBgSound(musicBgString);score = new Score(0, 0, true, this);GameState = 1;backGround = new BackGround(0, 0, this);boom = new Boom(-200, -100, false, this);enBullet =new ArrayList();enPlane = new ArrayList();bullets = new ArrayList();planeBoom = new Boom(-200, -200, false, this);rp = new repainThread();rp.start();plane = new Plane(100, 550, true, this,5); this.setSize(700,700); this.setTitle(星球大战); this.setResizable(false); this.addWindowListener(new WindowAdapter() Override public void windowClosing(WindowEvent e) System.exit(0);/0表示正常退出 ); this.addKeyListener(new KeyAdapter() Override public void keyPressed(KeyEvent e) if (e.getKeyCode() = KeyEvent.VK_ESCAPE) if(GameState = 2) GameState =1; PauseConvertStart =true; else if(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 = new GameView(); plane.keyPre(e); Overridepublic void keyReleased(KeyEvent e) plane.keyRepre(e); ); this.setLocationRelativeTo(null); this.setVisible(true); Override public void paint(Graphics g) /在窗体中画东西 系统自动调用 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 (int i = 0; i =700) enBullet.remove(eb); if(eb.isLife) eb.draw(g); else enBullet.remove(eb); if(!score.isBoos) for (int i = 0; i enPlane.size(); i+) Enplane ep = enPlane.get(i); if(ep.isLife) ep.draw(g); else enPlane.remove(ep); else boos2.draw(g); for (int i = 0; i bullets.size(); i+) Bullet b = 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(victory,127, 200, this); gs.bst.stop(); if(plane.isLife) if(plane.isHit) else if (!boos2.isLife) else plane.draw(g); plane.hit(enBullet, enPlane,boos2); public static void main(String args) gameView = new GameView(); 2、类Plane(1)成员变量如表2.3所示表2.3 成员变量成员变量描述变量类型成员变量名飞机坐标intx,y飞机生命值intHp窗体对象GameViewgv工具包Toolkittk飞机图片Imageplane_img(2)方法如表2.4所示表2.4 方法名称功能备注Plane(int x,int y,int hp)初始化fj_x,fj_y,hp构造方法paint(Graphics g)画飞机图片getRect()话矩形框套住飞机move(keyEvent e)移动飞机(3)plane效果及代码package plane.view;import java.awt.Graphics;import java.awt.List;import java.awt.Rectangle;import java.awt.event.KeyEvent;public class Plane extends Thread public int x;public int y;public int time;public boolean isLife;public GameView gv;private boolean u, d, l, r, f;public int moveState; / 0:不移动 1:up 2:down 3:left 4:right 5:left uppublic int life;public int fireSpeed = 3;public boolean isHit = false;public Plane(int x, int y, boolean isLife, GameView gv, int life) this.x = x;this.y = y;this.life = life;this.isLife = isLife;this.gv = gv;public void hit(java.util.List enBullets,java.util.List enPlanes,Boos boos) if (boos.getRec().intersects(getRec() & boos.isStart) boos.life-;if (boos.life = 0) boos.isLife = false;life-;gv.planeBoom = new Boom(x, y, true, gv);isHit = true;if (life = 0) this.isLife = false;gv.boom = new Boom(boos.x, boos.y, true, gv);gv.bullets.remove(this);gv.score.score = gv.score.score + gv.score.single;for (int i = 0; i enBullets.size(); i+) EnBullet eb = enBullets.get(i);if (eb.getRec().intersects(getRec() life-;gv.planeBoom = new Boom(x, y, true, gv);isHit = true;if (life = 0) this.isLife = false;gv.planeBoom = new Boom(x, y, true, gv);gv.boom = new Boom(eb.x, eb.y, true, gv);eb.isLife = false;gv.bullets.remove(this);for (int i = 0; i enPlanes.size(); i+) Enplane ep = enPlanes.get(i);if (ep.getRec().intersects(getRec() life-;gv.planeBoom = new Boom(x, y, true, gv);gv.score.score = gv.score.score + gv.score.single;isHit = true;if (life = 0) this.isLife = false;gv.boom = new Boom(ep.x, ep.y, true, gv);ep.isLife = false;gv.enPlane.remove(this);public void keyRepre(KeyEvent e) int code = e.getKeyCode();switch (code) case KeyEvent.VK_W: / 向上移动case KeyEvent.VK_UP:u = false;break;case KeyEvent.VK_S: / 向下移动case KeyEvent.VK_DOWN:d = false;break;case KeyEvent.VK_A: / 向左移动case KeyEvent.VK_LEFT:l = false;break;case KeyEvent.VK_D: / 向右移动case KeyEvent.VK_RIGHT:r = false;break;case KeyEvent.VK_J:/ 向左上移动f = false;break;public void keyPre(KeyEvent e) int code = e.getKeyCode();switch (code) case KeyEvent.VK_W:case KeyEvent.VK_UP:u = true;break;case KeyEvent.VK_A:case KeyEvent.VK_LEFT:l = true;break;case KeyEvent.VK_S:case KeyEvent.VK_DOWN:d = true;break;case KeyEvent.VK_D:case KeyEvent.VK_RIGHT:r = true;break;case KeyEvent.VK_J:f = true;break;public void move() if (u) y -= 15;if (y = 700 - gv.plane_img.getHeight(gv) y = 700 - gv.plane_img.getHeight(gv);if (l) x -= 15;if (x = 700 - gv.plane_img.getWidth(gv) x = 700 - gv.plane_img.getWidth(gv);if (f) if (gv.score.nextState) time = 0;fireSpeed += 2;gv.score.nextState = false;time+;if (time % fireSpeed = 0) fire();public void fire() Bullet bullet = new Bullet(gv.plane.x, gv.plane.y, isLife, gv);gv.gs.playSound(gv.musicFire);gv.bullets.add(bullet);public void draw(Graphics g) g.drawImage(gv.plane_img, x, y, gv);move();public Rectangle getRec() return new Rectangle(x, y, 150, 150);3、类Bullet(1)成员变量(表2.5)表2.5变量描述类型成员变量名子弹坐标intx,y子弹图片Imagebullet窗体对象GameViewgv(2)方法(表2.6)表2.6名称功能备注Bullet(int x,int y,GameView m)初始化子弹出现的位置构造方法getRect()画矩形框为子弹添加外套paint(Graphics g)画子弹(3)Bullet效果及代码package plane.view;import java.awt.Graphics;import java.awt.Rectangle;import java.util.List;public class Bullet public int x;public int y;public boolean isLife;public GameView gv;public Bullet(int x, int y, boolean isLife, GameView gv) super();this.x = x + 63;this.y = y + 20;this.isLife = isLife;this.gv = gv;public void draw(Graphics g) move();g.drawImage(gv.circlebullet, x, y, gv);public void move() y -= 15;public void hit(List enPlane, List enBullets, Boos boos) if (boos.getRec().intersects(getRec() & boos.isStart) boos.life-;if (boos.life = 0) boos.isLife = false;gv.boom = new Boom(boos.x, boos.y, true, gv);this.isLife = false;gv.bullets.remove(this);gv.score.score = gv.score.score + gv.score.single;for (int i = 0; i enPlane.size(); i+) Enplane ep = enPlane.get(i);if (ep.getRec().intersects(getRec() gv.boom = new Boom(ep.x, ep.y, true, gv);ep.isLife = false;this.isLife = false;gv.bullets.remove(this);gv.enPlane.remove(ep);gv.score.score = gv.score.score + gv.score.single;for (int i = 0; i enBullets.size(); i+) EnBullet eb = enBullets.get(i);if (eb.getRec().intersects(getRec() gv.boom = new Boom(eb.x, eb.y, true, gv);eb.isLife = false;this.isLife = false;gv.enBullet.remove(this);gv.enBullet.remove(eb);public Rectangle getRec() return new Rectangle(x, y, 23, 60);4、类EnPlane(1)变量(表2.7)表2.7变量描述类型成员变量名敌机坐标intx,y敌机状态booleanisLife窗体对象GameViewgv(2)方法(表2.8)表2.8名称功能备注EnPlaen(int x, int y GameView gv)初始化敌机的属性值构造方法getRect()为敌机添加矩形外框paint(Graphics g)画敌机(3)EnPlane效果及代码package

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论