JAVA课程设计飞机大战
- 格式:ppt
- 大小:2.42 MB
- 文档页数:19
飞机大战程序课程设计一、课程目标知识目标:1. 学生能理解飞机大战程序的基本原理和编程逻辑;2. 学生掌握运用编程软件(如Scratch或Python)进行飞机大战游戏的初步设计;3. 学生了解游戏设计中角色、背景、分数等基本元素及其实现方法;4. 学生掌握基本的程序调试和修改技巧。
技能目标:1. 学生能运用所学知识独立完成一个简单的飞机大战游戏设计;2. 学生能够通过小组合作,进行程序设计和调试,提高问题解决能力;3. 学生学会运用信息技术工具,进行游戏设计和开发,培养创新思维和动手能力。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,树立学习信息技术的自信心;2. 学生通过合作学习,培养团队协作精神和沟通能力;3. 学生在创作过程中,体验编程的乐趣,培养探究精神和持续学习的习惯;4. 学生学会遵守网络道德规范,养成良好的信息技术使用习惯。
二、教学内容本课程以《信息技术》教材中关于编程模块为基础,结合课程目标,制定以下教学内容:1. 程序设计基本概念:程序、变量、循环、条件语句等;2. 游戏设计基本原理:角色设计、场景布置、事件处理等;3. 编程软件使用:Scratch或Python编程环境的基本操作和功能;4. 飞机大战游戏设计:游戏规则、角色控制、碰撞检测、得分系统;5. 程序调试与优化:调试技巧、代码优化、问题解决策略;6. 项目实践:分组进行飞机大战游戏设计,从构思、编写、调试到展示。
教学内容安排和进度如下:第一课时:程序设计基本概念学习;第二课时:游戏设计基本原理及编程软件介绍;第三课时:飞机大战游戏设计(一)角色设计及场景布置;第四课时:飞机大战游戏设计(二)事件处理及碰撞检测;第五课时:飞机大战游戏设计(三)得分系统及程序调试;第六课时:项目实践与展示,总结评价。
三、教学方法本课程采用以下多样化的教学方法,以激发学生的学习兴趣和主动性,提高教学效果:1. 讲授法:教师通过生动的语言和形象的表达,为学生讲解编程基本概念、游戏设计原理等理论知识,使学生掌握必要的编程基础。
项目设计报告项目名称:进击的飞机目录一、游戏整体概括 (3)1.1 游戏概括 (3)1.2 开发环境 (3)二、系统需求分析 (4)2.1用户功能需求分析 (4)2.2 系统性能要求 (4)2.3业务流程分析 (4)三、系统总体设计 (5)3.1 系统功能模块分析 (5)3.2 系统类关系图 (5)3.3 系统总体设计 (6)四、系统详细设计 (8)4.1 开发工具简介 (8)4.2 游戏界面设计 (8)4.2.1游戏开始界面ReadyView (8)4.2.2游戏主界面MainView (9)4.2.2.1 鼠标控制玩家飞机移动 (10)4.2.2.2 碰撞逻辑 (10)4.2.2.3 游戏暂停 (11)4.2.3帮助界面HelpView (11)4.2.4游戏失败界面EndView (12)五、游戏开发计划 (13)5.1游戏开发计划表 (13)5.2 游戏开发计划具体分工 (15)一、游戏整体概括1.1游戏概括本项目是一个基于android平台的、集休闲娱乐、互动交友、丰富生活等诸多元素与一身的手机竞技类游戏。
旨在通过此应用的设计与推广,为社会大众的生活增添乐趣与新意。
本项目产品名称为“进击的飞机”,功能丰富完善,界面简洁流畅,游戏方式简单,玩家易于上手。
1.2开发环境开发环境:Windows 7 & Windows 8.1开发工具:Eclipse开发语言:Java开发平台:Android ADT二、系统需求分析2.1用户功能需求分析由于本游戏交互性好,简单易操作,对用户并没有特殊的要求。
一般用户经过几分钟练习就可以掌握游戏规则。
2.2 系统性能要求①实时性:本应用为手机游戏因此对于用户的操作必须做出立即响应,否则本游戏即为失败。
②易操作性:单机手机游戏的最大特点即为易操作性,用户在不看说明的情况下也能够玩,并且在玩过几遍之后即熟悉本游戏的规则。
这是本应用对于操作性的要求。
2.3业务流程分析三、系统总体设计3.1 系统功能模块分析当前应用使用的SurfaceView来绘制的页面,因此相对来说大部分逻辑都是由View类来做处理的。
飞机大战游戏课程设计一、课程目标知识目标:1. 学生能理解游戏编程的基本概念,掌握飞机大战游戏中所涉及的计算思维和编程逻辑。
2. 学生能描述飞机大战游戏中角色、敌人和道具的基本属性,运用数学知识进行碰撞检测和分数计算。
3. 学生了解并能应用游戏设计中的美术元素,如角色设计、背景布局等。
技能目标:1. 学生能够运用所学的编程知识,独立设计和编写一个简单的飞机大战游戏。
2. 学生通过实践操作,掌握游戏中角色移动、射击、得分等功能的实现。
3. 学生能够运用合作学习的方法,与团队成员共同完成游戏设计,提高团队协作能力。
情感态度价值观目标:1. 学生培养对编程和游戏设计的兴趣,激发学习信息技术的热情。
2. 学生在游戏设计过程中,体验创新和解决问题的快乐,增强自信心。
3. 学生通过团队合作,学会尊重他人意见,培养良好的沟通和协作能力。
4. 学生了解游戏在现实生活中的应用,认识到信息技术在现代社会中的重要性。
课程性质:本课程为信息技术课程,以实践操作为主,结合理论知识,培养学生的编程能力和计算思维。
学生特点:五年级学生对新鲜事物充满好奇,具备一定的信息技术基础,喜欢动手实践,善于合作学习。
教学要求:课程要求学生在掌握基本知识的基础上,注重实践操作,通过合作学习,培养编程技能和团队协作能力。
教学过程中,教师需关注学生个体差异,提供个性化指导,确保每位学生都能达到课程目标。
二、教学内容1. 游戏编程基本概念:介绍游戏编程的定义、作用和基本流程,结合课本相关章节,让学生了解游戏设计的基本框架和编程思维。
2. 游戏角色设计:讲解角色属性、移动、射击等功能的实现方法,指导学生运用数学知识进行碰撞检测和分数计算。
3. 游戏场景设计:介绍背景、道具等元素的设计方法,结合课本中的美术知识,让学生学会如何制作美观、有趣的游戏场景。
4. 编程语言和工具:教授适合五年级学生的编程语言(如Scratch)和工具,使其能够运用所学知识独立编写飞机大战游戏。
package ;import java.awt. Color;import java・awt.Font;import java. awt. Graphics;import java・awt.1mage;import java.awt.Rectangle;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import javax・ inuigeio. ImagelO;public class Plane {Image feijiImage = null;int x = 300;int y = 700;int 1ifeCount=5;pub 1 ic Plane () {try {feijiImage 二Image10. read(Plane.class・getClsssLoader()・ getResourceAsStream("images/feiji. png ff));} catch (IOException e) {e. printStackTrace();}}public void draw(Graphics g) {// 画飞机图片g・drawlmage(feijiImage, x, y. null);//飞机移动this・ move();// 血条if(lifeCount>0) {g. setColor(Color. WHITE);g. fillRect(20, 80, 100, 10);g. setColor(Color・ red);g. fillRect(20, 80. (100/5)*1 ifeCount, 10);g.setColor(Color・ blue);g. setFont (new Font (M幼圆",Font. BOLD, 30));g. drawString("Score:"+Play01. count, 20, 60);pub1ic void move(){if(isUP && !isDown && !isLeft && !isRight){// 上y=y-5;}else if (! islJP && isDown && ! isLeft && ! isRight) { // 下y二y+5;}else if(!isUP && !isDown && isLeft && !isRight){ // 左x=x-5;}else if(!isUP && !isDown && !isLeft && isRight){ // 右x=x+5;}else if(isUP && !isDown && isLeft && !isRight){ // 左上x=x-5;y=y-5;}else if (! islIP && isDown && isLeft && ! isRight) { // 左下x=x-5;y=y+5;}else if(isUP && !isDown && !isLeft && isRight){ // 右上x=x+5;y=y-5;}else if(!isUP && isDown &&右下x=x+5; y二y+5;boolean isUP = false;boolean isDown = false;boolean isLeft = false;boolean isRight = false;//据下pub1ic void keyPressed(KeyEvent e) { int keyCode = e. getKeyCodeO : !isLeft && isRight){//if (keyCode == KeyEvent. VK RIGHT keyCode == KeyEvent. VK D) { isRight=true;} else if (keyCode == KeyEvent. VK LEFT keyCode == KeyEvent. VK_A){ isLeft=true;} else if (keyCode == KeyEvent. VK UP I keyCode == KeyEvent. VK_W){ isUP=true;} else if (keyCode == KeyEvent. VK DOWN keyCode == KeyEvent. VK S){ isDown=true;}}//放开public void keyReleased(KeyEvent e) {int keyCode = e. getKeyCodeO :if (keyCode == KeyEvent. VK RIGHT keyCode == KeyEvent. VK D){ isRight=false;} else if (keyCode == KeyEvent. VK LEFT keyCode == KeyEvent. VK_A) { isLeft二false;} else if (keyCode == KeyEvent. VK UP I keyCode == KeyEvent. VK_W){ isUP=false;} else if (keyCode == KeyEvent. VK DOWN keyCode == KeyEvent. VK S){ isDown=false;}}public Rectangle getRectangle() {return new Rec tangle(x,y,feijilmage・ getWidth(null),feijiImage・ getHeight (null));}}package ;public class PlaneStatus {public static int roleNum = 1;publ ic static int playStatus = 0; // 0 游戏开始前1 第一关游戏结束}package ;import java. awt. Graphics;import java・awt・ Image;import java・swt.Rectangle;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import javax・ inuigeio. ImsgelO;public class Power {Image PowerImage = null;int x = 20;int y = 0;public Power() {this, x二(int) (Math, random() *540) +20: try {Power Image 二ImagelO. read(Gift. class. getdassLoader ()・ getResourceAsStream(" images/power・ pnj?"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {// 画血瓶图片g. drawlmage(PowerImage, x, y. null):// 血瓶移动y++;}pub 1 ic Rectangle getRectangleO {returnnew Rectangle(x,y t Powei'Image・ getWidth(null),PowerImage・ getHeight(null)); }} package ;import java. awt. Graphics; import java・swt・ Image; import java・awt.Rectangle;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import java .util. ArrayList;import java.util.List;import javax・ imageio. ImagelO;//第一关public class PlayOl {static int count=0;Image bglmage = nul1://战机Plane plane = new PlaneO ://战机子弹List<MyZiDan> mzds 二new ArrayList<MyZiDan>();//敌机List<Diji> dijis = new ArrayList<Diji>();//敌机子弹//List<DijiZiDan> dijizidans = new ArrayList<DijiZiDan>();//血瓶List<Gift> gifts = new ArrayList<Gift>();List<Power> powers 二new /\rrayList<Power>(): public PlayOl() { try {bglmage = Image10. read(Play01. class・getClassLoader()・ getResourceAsStream("images/bg 01. jpg"));} catch (IOException e) {e.printStackTrace();}}int bgYl = 0;int bgY2 = -600;int fireTime = 0;boolean flag=false;public void draw(Graphics g) {//画背景图片g. drawImage(bgImage, 0, bgY11 null):bgYl += 5;if (bgYl <= 600) {bgYl = 0;}g. drawImage(bgImage, 0. bgY2f null);bgY2 += 5;if (bgY2 >= 0) {bgY2 = -600;}//清理战机子弹for (int i = 0; i < mzds.size(); i++) {MyZiDan myZidan = mzds・get(i);if (myZidan. x > 800) {mzds・ removed);}}//添加子弹if (isFirel == true && flag==false) {if (fireTime % 8 == 0) {mzds.sdd(new MyZiDan(plane.x + 25, plane.y + 0)): } fireTime++;}if (isFirel== true && fl3g==true) {if (fireTime % 4 == 0) {mzds・3dd(new MyZiDan(plane. x +8. plane.y +0));mzds・3dd(new MyZiDan(plane.x +52, plane.y +0));}fireTime++;}//画战机子弹for (int i = 0; i < mzds.size(); i++) {MyZiDan myZidan = mzds・get(i);myZidan.draw(g);}//清理敌机for (int i = 0; i < di jis. size(): i++) {Di ji dj = di jis. get (i):if (dj. x < -100) {dijis・ remove(i);}//抽奖:添加敌机if ((int) (Math, random() * 20) == 5) {di jis.add(new Diji ()):}//抽奖:添加血瓶if ((int) (Math, random() * 1000) == 5) { gifts, add (new Gift ()):}for (int i = 0; i < gifts. size(): i++) {Gift gift = gifts・get(i);gift. draw(g);}////抽奖:添加powerif ((int) (Math, random() * 1000) == 5) powers. add(new Power ());}for (int i = 0; i < powers・size(); i++) Power power = powers・get(i);power・ draw(g);}//画敌机for (int i = 0; i < di jis. size() ; i++) {Diji dj = dijis. get (i):dj・ draw(g);}//画飞机plane・ draw(g);//判断战机相撞for (int i = 0; i < di jis. size(): i++) {//先得到每一个敌机Diji dj = dijis・get(i);Rectangle rl = dj. getRectangleO :Rectangle r2 = plane.getRectangleO; if (rl. intersects(r2)) {dijis・ remove(i);plane・ lifeCount = plane・ lifeCount 一1; if(plane. lifeCount>0) flag=false;if(plane. lifeCount<l){ PlaneStatus・pl3ySt3tus=-l; }}}//判断战机和血瓶相撞for (int i = 0; i < gifts. size(): i++) {//先得到每一个血瓶Gift gift = gifts・get(i);Rectangle rl = gift. getRectangle();Rectangle r2 = plane・getRectsngleO; if (rl. intersects(r2)) {gifts・ remove(i);if (plane.1ifeCount <5) {plane・ lifeCount = plane. lifeCount + 1: }}}////判断战机和Power相撞for (int i = 0; i < powers.size(); i++) {//先得到每一个powerPower power = powers・get(i);Rectangle rl = power. getRectangleO :Rectangle r2 = plane.getRectangleO; if (rl. intersects(r2)) {powers. remove(i):flag=true;}}//判断敌机在中弹for (int i = 0; i < mzds.size(); i++) {//得到每个战机子弹MyZiDan myzidan = mzds ・get(i);Rectangle rl = myzidan. getRectangleO : for (int j = 0; j < di jis. size() ; j++) { //每一个敌机Di ji di ji = di jis. get (j):Rectangle r2 = di ji. getRectangleO : if (rl. intersects(r2)) { mzds.remove(i); dijis ・ remove(j);}count++; }}}boolean boolean isFirel = false ;isFire2 = false ;public void keyPressed(KeyEvent e) { plane. keyPressed(e);if (e. getKeyCodeO == KeyEvent. VK J) { isFirel = true ;}/♦if (e. getKeyCodeO == KeyEvent. VK K) { isFire2 = true ;public void keyReleased(KeyEvent e) { plane ・ keyReleased(e);if (e. getKeyCodeO == KeyEvent. VK J) { isFirel = false ;fi reTime = 0;}/♦if (e. getKeyCodeO == KeyEvent. VK K) { isFire2 = false ;fireTime = 0; }*/if ( e. getKeyCodeO —KeyEvent. VK P) {for(int i=0; i<dijis.size();i++) di jis. remove(i);}package ;import java・swt.Color;import java・owt・Font;import java. awt. Graphics;import java.awt.1mage;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import javax・ inuigeio. ImagelO;//游戏结束public class Over {Image obg=null;Image ng=nul1:public Over() {try {obgImage10. read(Before・ class・ getClassLoader()・ getResourceAsStream(n images/obg・jpg” ));ngI mage 10. read (Before ・ class ・ getClassLoader ()・ getResourceAsStreomC'inuiges/ng ・png"));} catch (IOException e) {e.printStackTrace();}}pub1ic void draw(Graphics g){g・drawlmage(obg, 0. 0. null);g. drawlmage(ng, 120,100. null);g.setColor(Color・ black);g. setFont (new Font (n幼圆Font. BOLD, 40));g. drawString(R游戏结束啦! ".200 ,600 );}public void keyPressed(KeyEvent e) {}public void keyReleased(KeyEvent e) {}}package ;import java.awt. Color;import java・swt.Graphics;import java・awt・ Image;import java・ awt・ event・ KeyAdapter; import java・ awt・ event. KeyEvent; import javax ・ swing. JFrame;public class MainFrame extends JFrame {Before before =new Before():PlavOl playOl = new PlayOl():Over over = new Over ():public MainFrameO {// 设置标题this. setTitleC1' 让子弹飞一会、*);// 设置大小this.setSize(600, 800);// 定位居中this. setLocationRelativeTo(null);// 添加关闭操作this. setDefaultCloseOperation(JFrame.EXIT ON CLOSE):// 禁止重置大小zthis・ setResizable(false);// 添加键盘监听器KeyLi stener --> KeyAdapter this.addKeyListener(new KeyAdaptei-() {Overridepublic void keyPressed(KeyEvent e) { if(PlaneStatus. playStatus == 0) { before・keyPressed (e);}else if(PlaneStatus.playStatus =1) { playOl. keyPressed(e);}else if (PlaneStatus・ playStatus二=T) { over・ keyPressed(e);Overridepublic void keyReleased(KeyEvent e) { if (PlaneStatus. playStatus == 0){ before・ keyReleased(e);}else if(PlaneStatus.playStatus =1) { playOl. keyReleased(e);}else if (PlaneStatus・ playStatusHT) { over・ keyReleased(e);}});// 启动一个线程:每隔20亳秒执行一次new Thread () {public void run() { while(true) {MainFrame・ this・ repaint();try {Thread, sleep(20);} catch (InterruptedException e) { e.printStackTrace();}}}}• start ();// 显示this. setVisible(true);}Image bufferimage =null;//这个方法也是20毫秒执行一次public void paint(Graphics g){if(bufferImage==null) {bufferlmage = this・ cre3teIni8ge(600, 800):}Graphics g4Image = bufferimage・getGraphicsO: g4Image. setColor(Color.BLACK);g4Image. fillRect(0, 0. 600, 800);this・ draw(g41mage);g. drawImage(bufferImage, 0, 0, null);}public void draw(Graphics g){if(PlaneStatus. playStatus == 0){before・ draw(g);}else if(PlaneStatus.playStatus =1) {play0L draw(g);}else if (PlaneStatus・ pl3yStatus==T) {}over. draw(g);pub1ic static void main(String[] args) { new MoinFrame():}}package ;import java. awt. Graphics;import java.awt・ Inuige;import java.awt.Rectangle;import java・ io. IOException;import javax・ inuigeio. ImagelO;public class MyZiDan {Image zidanImage = null;int x ;int y ;public MyZiDan(int x,int y) {this・ x=x;this・ y=y;try {zidanImage 二Image10. read(MyZiDan.class・getClassLosder()・ getResourceAsStream("images/zidan・ png w));} catch (IOException e) {e. printStackTrace ();}}pub1ic void draw(Graphics g) {// 画我军子弹图片g. drawlmage(zidanlmage, x, y. null)://我的飞机子弹移动速度y-二20;}public Rectangle getRectangle() {returnnew Rectangle(x,y t zidanImage. getWidth(null),zidanlmage・ getHeight (null)); }package ;import java. awt. Graphics;import java・awt・ Image;import java・awt.Rectangle;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import javax・ imageio. ImsgelO;public class Diji {Image dijiImage = null;int y = -20;int x = 10;//20 ~ 760int r;public Di ji () {this. x=(int) (Math, random()*540) +40:try {r = (int) (Math, random () *3)+1 :dijiImage = ImagelO. read(Diji・class. getClassLoader()・ getResource/XsStream(" images/di j i "+r+"・ png n)); } catch (IOException e) {e. “intStackTra ceO ;}}pub1ic void draw(Graphics g) {// 画敌机图片g・drawlmage(dijiImage, x, y, nul1):// 敌机移动if(r==l) {y+=4;}else if(r==2) {y+=4;}else if(r==3){y+=7:}}pub 1 ic Rectangle getRectangleO {return newRec tangle(x,y,d i j iImage. getWidth(nu11),dijiImage・ getHeight (nul1)); } }package ;import java. awt. Graphics;import java.awt・ Image;import java・owt.Rectangle;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import javax・ inuigeio. ImagelO;public class Gift {Image Giftimage = null;int x = 20;int y = 0;pub 1 ic Gift () {this. x=(int) (Math, random()*540) +20:try {Gift Image = Image10. read(Gift・cl^ss・getClossLoader ()・ getResourceAsStream("images/blood・ png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {// 画血瓶图片g. draw I mage (G i f 11 mage t x, y, null):// 血瓶移动y++;}public Rectangle getRectangleO {return new Rectangle(x,y,GiftImage・ getWidth(null).Giftimage・ getHeight(null));package ;import java. awt. Graphics;import java.awt.1mage;import java.awt.Rectangle;import java・ io. IOException;import javax・ inuigeio. ImagelO;public class DijiZiDan {Image zidanImage = null;int x ;int y ;int fangxiang =0;pub1ic DijiZiDan(int x,int y) {this・ x=x;this・ y二y;fangxiang = (int) (Math•匸andom()*5) ;//0、7 try {zidanImage = Image10. read(DijiZiDan.class・getClassLoaderO・ getResourceAsStreamCiniages/dijizidan. jpg"));} catch (IOException e) {e.printStackTrace();}}pub1ic void draw(Graphics g) {// 画敌机子弹图片g. drawImage(zidanlmage, x, y, null);//移动this・ move():}public void move(){if (fangxiang==0){// 下y=y+2;}else if(fangxiang==l) {// 左x=x-2;}else if(fangxiang==2){// 右x=x+2;}else if(fangxiang==3) {// 左下x=x-2;y=y+2;}else if(fangxiang==4) {// 右下x=x+2;y二y+2;}}public Rectangle getRectangle(){return new Rectangle(x,y t zidanImage. getWidth(null),zidanlmage・ getHeight(null));}} package ;import java・awt.Color;import java・nwt.Font;import java. awt. Graphics;import java.awt・ Image;import java・ awt・ event・ KeyEvent;import java・ io. IOException;import javax・ imageio. ImagelO;//游戏开始之前public class Before {Image bg=null;Image wfeiji二null;Image kdiji1二null;Image kdiji2二null;Image kdiji3=null;public Before() {try {bg = Image10. read(Before・ class・ getClassLoader()・ getResourceAsStream(n images/bg・ jpg H));wt e1j iImage 10. read (Before ・ class ・ getClassLoader ()・ get Resource?\sS tream (n i mages/f e i j i1. png"));kdijil= Image10. read(Before ・ class ・ getClassLoader()・ getResourceAsStream(n images/kdi ji 01 .png"));kdiji2= Image10. read(Before ・ class ・ getClassLoader()・ getResource/\sStream(n images/kdi ji 02 .png"));kdiji3= Image 10. read (Before ・ class ・ getClassLoader ()・ getResource/XsSti'eam (n i mages/kd i j i03 .png"));} catch (IOException e) {e. pr i ntStackTrace ();}}int time^O ;pub1ic void draw(Graphics g) {if (PlaneStatus. roleNum^^l) {//画妹妹 g. drawlmage(bg, 0, 0, null);g. drawImage(wfeiji t 260, 600, null)g. drawImage(kdiji11g. drawImage(kdiji11g. drawlmage(kdiji1,g. drawlmage(kdiji1,g. drawlmage(kdiji2,g. drawlmage(kdiji2,g. drawlmage(kdiji2,g. drawlmage(kdiji3,g. drawlmage(kdiji3,g. drawlmage(kdiji3,}// 画回车符 time++;g. setColor(Color. YELLOW); 200 • 50, null); 400. 50, null); 150, 480, null); 400, 480, null); 100, 200, null); 300. 100, null); 480 • 2001 null); 300. 300, null); 70. 400, null); 510. 400, null);g. setFont (new Font(w幼圆Font. BOLD・ 30)): if (time<=10){g. drawString(w[Enter]»n, 50, 750);}else if(time<=20) {g. drawString(" [Enter] »n. 50, 750);}else if(time<=30) {g. drawString(" [Enter] »n■50, 750);if(time==30){time=0;}}}public void keyPressed(KeyEvent e) {int keyCode = e. getKeyCodeO ;if(keyCode == KeyEvent. VK ENTER){PlaneStatus・ playStatus=l:}if(keyCode ==KeyEvent. VK LEFT keyCode==KeyEvent. VK RIGHT ){ PlaneStatus. roleNum = 3-PlaneStatus. roleNum;//1^2 互换 }}pub1ic void keyReleased(KeyEvent e) {}。
飞机大战课程设计类一、教学目标本课程旨在通过飞机大战项目的设计与实现,让学生掌握以下知识目标:1. 理解飞机大战游戏的基本原理和开发流程;2. 掌握飞机大战游戏中飞机控制、敌机生成、子弹发射等核心模块的开发方法;3. 熟悉飞机大战游戏中地图切换、得分记录等高级功能的实现方法。
技能目标:1. 能够运用面向对象编程思想进行软件开发;2. 熟练使用相关编程语言和开发工具进行项目开发;3. 具备一定的软件调试和优化能力。
情感态度价值观目标:1. 培养学生团队协作、自主探究的学习精神;2. 培养学生面对挑战、勇于创新的勇气;3. 使学生认识到编程不仅是一门技术,更是一种解决问题的方式,提升学生对编程的兴趣和热情。
二、教学内容教学内容以飞机大战项目的开发为主线,共分为以下几个部分:1. 飞机大战游戏概述,介绍飞机大战游戏的基本原理和开发流程;2. 飞机控制模块开发,讲解飞机控制的相关知识,并通过实践让学生掌握飞机控制模块的开发方法;3. 敌机生成模块开发,讲解敌机生成机制,让学生学会如何实现敌机的自动生成;4. 子弹发射模块开发,讲解子弹发射原理,让学生掌握子弹发射模块的开发方法;5. 地图切换与得分记录功能实现,让学生了解地图切换和得分记录的实现方法,提升学生对高级功能的理解和开发能力。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用以下教学方法:1. 讲授法,用于讲解飞机大战游戏的基本原理、开发流程以及相关知识点;2. 案例分析法,通过分析实际案例,让学生掌握飞机控制、敌机生成、子弹发射等核心模块的开发方法;3. 实验法,让学生动手实践,实际操作飞机大战项目的开发,提升学生的实际编程能力;4. 讨论法,鼓励学生在课堂上提问、分享心得,促进学生之间的交流与合作。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1. 教材:《飞机大战项目开发实战》,用于引导学生学习飞机大战项目的开发方法;2. 参考书:《Python编程:从入门到实践》、《Unity 2D游戏开发实战》,用于为学生提供更多的编程知识和实践案例;3. 多媒体资料:包括教学视频、演示文稿等,用于丰富教学手段,提高学生的学习兴趣;4. 实验设备:计算机、键盘、鼠标等,用于让学生进行实践操作。
飞机大战实验报告专业:网络工程132班学号:*********姓名:孙**计算机科学与技术学院二零一六年十二月一、软件运行所需要的软硬件环境本系统是以Windows系统为操作平台,用Java编程语言来实现本系统所需功能的。
本机器的配置如下:处理器:CORE i7主频:1.2Hz以上内存:4G以上硬盘:HHD 50G编程语言:Java开发环境:windows7开发软件:Eclipse Mars二、游戏流程1.用户打开游戏,进入开始菜单。
2.用户点击开始游戏按钮,进入游戏界面;3.用户通过触屏方式控制玩家飞机上下左右移动,躲避与子弹相撞;4.游戏失败后,显示本次游戏得分,用的秒数和水平;5.退出游戏三、主要代码1、准备代码设置窗口使用双缓冲使飞机不闪烁Constant设置窗口大小package com.ahut.准备代码;public class Constant {public static final int GAME_WIDTH = 350;public static final int GAME_HEIGHT = 600;}package com.ahut.准备代码;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.IOException;import .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 blocke.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() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}private Image offScreenImage = null;public void update(Graphics g) {if (offScreenImage == null)offScreenImage = this.createImage(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);Graphics gOff = offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}class PaintThread extends Thread {public void run() {while (true) {repaint();try {Thread.sleep(40);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}主代码飞机:package com.ahut.plane;import java.awt.Graphics;import java.awt.event.KeyEvent;import com.ahut.准备代码.GameUtil;public class Plane extends GameObject {private boolean left, up, right, down;private boolean live = true;public void draw(Graphics g) {if (live) {g.drawImage(img, (int)x, (int)y, null);move();}}public void addDirection(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT: //左left = true; break;case KeyEvent.VK_UP: //上up = true; break;case KeyEvent.VK_RIGHT: //右right = true; break;case KeyEvent.VK_DOWN: //下down = true; break;default: break;}}public void minusDirection(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT: //左left = false; break;case KeyEvent.VK_UP: //上up = false; break;case KeyEvent.VK_RIGHT: //右right = false; break;case KeyEvent.VK_DOWN: //下down = false; break;default: break;}}public void move() {if (left) {x -= speed;}if (right) {x += speed;}if (up) {y -= speed;}if (down) {y += speed;}}public Plane(String imgpath, double x, double y) { this.img = GameUtil.getImage(imgpath);this.width = img.getWidth(null);this.height = img.getHeight(null);this.x = x;this.y = y;}public Plane() {}public void setLive(boolean live) {this.live = live;}public boolean isLive() {return live;}}子弹:package com.ahut.plane;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;import com.ahut.准备代码.Constant;public class Bullet extends GameObject {double degree;public Bullet() {degree = Math.random() * Math.PI * 2;x = Constant.GAME_WIDTH / 2;y = Constant.GAME_HEIGHT / 2;width = 10;height = 10;}public Rectangle getRect() {return new Rectangle((int)x, (int)y, width, height);}public void draw(Graphics g) {Color oldColor = g.getColor();g.setColor(Color.yellow);g.fillOval((int)x, (int)y, width, height);x += speed * Math.cos(degree);y += speed * Math.sin(degree);if (y > Constant.GAME_HEIGHT - height || y < 30) {degree = -degree;}if (x < 0 || x > Constant.GAME_WIDTH - width) {degree = Math.PI - degree;}g.setColor(oldColor);}}游戏对象:package com.ahut.plane;import java.awt.Image;import java.awt.Rectangle;public class GameObject {Image img;double x,y;int speed=5;int width,height;public Rectangle getRect() {return new Rectangle((int)x, (int)y, width, height);}public GameObject(Image img, double x, double y, int speed, int width,int height) {super();this.img = img;this.x = x;this.y = y;this.speed = speed;this.width = width;this.height = height;}public GameObject() {}}主线程package com.ahut.plane;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.ArrayList;import java.util.Date;import com.ahut.准备代码.GameUtil;import com.ahut.准备代码.MyFrame;public class PlaneGameFrame extends MyFrame {Image bg = GameUtil.getImage("image/ped.jpg");Plane p = new Plane("image/plane.png", 50, 50);ArrayList bulletList = new ArrayList();Date startTime;Date endTime;public void paint(Graphics g) {g.drawImage(bg, 0, 0, null);p.draw(g);//在这里画子弹for (int i = 0; i < bulletList.size(); i++) {Bullet b = (Bullet)bulletList.get(i);b.draw(g);//检测跟飞机的碰撞boolean peng = b.getRect().intersects(p.getRect());if (peng) {p.setLive(false);break;}}if (!p.isLive()) {int period = ((int)endTime.getTime() - (int)startTime.getTime()) / 1000; //转换成秒printInfo(g, "时间: " + period + "秒", 20, 115, 300, Color.white);switch (period / 10) {case 0:case 1:printInfo(g, "菜鸟", 40, 115, 270, Color.white);break;case 2:printInfo(g, "入门", 40, 115, 270, Color.yellow);break;case 4:printInfo(g, "精通", 40, 115, 270, Color.white);break;case 5:printInfo(g, "大师", 40, 115, 270, Color.white);break;}}// printInfo(g, "分数: 100", 10, 50, 50, Color.yellow);}public void printInfo(Graphics g, String str, int size, int x, int y, Color color) { Color c = g.getColor();g.setColor(color);Font f = new Font("宋体", Font.BOLD, size);g.setFont(f);g.drawString(str, x, y);g.setColor(c);}public void launchFrame() {uchFrame();addKeyListener(new KeyMonitor());for (int i = 0; i < 10; i++) {Bullet b = new Bullet();bulletList.add(b);}startTime = new Date();}class KeyMonitor extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {p.addDirection(e);}@Overridepublic void keyReleased(KeyEvent e) {p.minusDirection(e);}}public static void main(String[] args) {new PlaneGameFrame().launchFrame();}}四、游戏实现截图五、实验总结JAVA和EclipsexMars是一款非常好的面向对象开发语言和平台,通过这一段时间的JAVA 程序开发,我感觉到尽管的是不同的语言和平台,开发程序一样需要动脑和努力,每一款软件或者游戏都不是一朝一夕能制作出的,都需要大量的构思和编程,学习好软件工程这门课对日后的编程很有用,最后还有繁琐的调试检查运行时的错误,通过这次接触JAVA我今后会更努力的学习它。
package com;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.event.KeyEvent;import java.io.IOException;import javax.imageio.ImageIO;public class Plane {Image feijiImage = null;int x = 300;int y = 700;int lifeCount=5;public Plane() {try {feijiImage = ImageIO.read(Plane.class.getClassLoader().getResourceAsStream("images/feiji.png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {//画飞机图片g.drawImage(feijiImage, x, y, null);//飞机移动this.move();// 血条if(lifeCount>0){g.setColor(Color.WHITE);g.fillRect(20, 80, 100, 10);g.setColor(Color.red);g.fillRect(20, 80, (100/5)*lifeCount, 10);g.setColor(Color.blue);g.setFont(new Font("幼圆", Font.BOLD, 30));g.drawString("Score:"+Play01.count, 20, 60);}}public void move(){if(isUP && !isDown && !isLeft && !isRight){//上y=y-5;}else if(!isUP && isDown && !isLeft && !isRight){ //下y=y+5;}else if(!isUP && !isDown && isLeft && !isRight){ //左x=x-5;}else if(!isUP && !isDown && !isLeft && isRight){ //右x=x+5;}else if(isUP && !isDown && isLeft && !isRight){ //左上x=x-5;y=y-5;}else if(!isUP && isDown && isLeft && !isRight){ //左下x=x-5;y=y+5;}else if(isUP && !isDown && !isLeft && isRight){ //右上x=x+5;y=y-5;}else if(!isUP && isDown && !isLeft && isRight){ //右下x=x+5;y=y+5;}}boolean isUP = false;boolean isDown = false;boolean isLeft = false;boolean isRight = false;// 摁下public void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {isRight=true;} else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {isLeft=true;} else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) {isUP=true;} else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) { isDown=true;}}// 放开public void keyReleased(KeyEvent e) {int keyCode = e.getKeyCode();if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {isRight=false;} else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {isLeft=false;} else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) {isUP=false;} else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) { isDown=false;}}public Rectangle getRectangle(){return new Rectangle(x,y,feijiImage.getWidth(null),feijiImage.getHeight(null));}}package com;public class PlaneStatus {public static int roleNum = 1;public static int playStatus = 0;// 0 游戏开始前 1 第一关-1 游戏结束}package com;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyEvent;import java.io.IOException;import javax.imageio.ImageIO;public class Power {Image PowerImage = null;int x = 20;int y = 0;public Power() {this.x=(int)(Math.random()*540)+20;try {PowerImage = ImageIO.read(Gift.class.getClassLoader().getResourceAsStream("images/power.png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {//画血瓶图片g.drawImage(PowerImage, x, y, null);//血瓶移动y++;}public Rectangle getRectangle(){return new Rectangle(x,y,PowerImage.getWidth(null),PowerImage.getHeight(null));}}package com;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.event.KeyEvent;import java.util.ArrayList;import java.util.List;import javax.imageio.ImageIO;// 第一关public class Play01 {static int count=0;Image bgImage = null;// 战机Plane plane = new Plane();// 战机子弹List<MyZiDan> mzds = new ArrayList<MyZiDan>();// 敌机List<Diji> dijis = new ArrayList<Diji>();// 敌机子弹//List<DijiZiDan> dijizidans = new ArrayList<DijiZiDan>();// 血瓶List<Gift> gifts = new ArrayList<Gift>();List<Power> powers = new ArrayList<Power>();public Play01() {try {bgImage = ImageIO.read(Play01.class.getClassLoader().getResourceAsStream("images/bg_01.jpg"));} catch (IOException e) {e.printStackTrace();}}int bgY1 = 0;int bgY2 = -600;int fireTime = 0;boolean flag=false;public void draw(Graphics g) {// 画背景图片g.drawImage(bgImage, 0, bgY1, null);bgY1 += 5;if (bgY1 <= 600) {bgY1 = 0;}g.drawImage(bgImage, 0, bgY2, null);bgY2 += 5;if (bgY2 >= 0) {bgY2 = -600;}// 清理战机子弹for (int i = 0; i < mzds.size(); i++) {MyZiDan myZidan = mzds.get(i);if (myZidan.x > 800) {mzds.remove(i);}}// 添加子弹if (isFire1 == true && flag==false) {if (fireTime % 8 == 0) {mzds.add(new MyZiDan(plane.x + 25, plane.y + 0));}fireTime++;}if (isFire1== true && flag==true) {if (fireTime % 4 == 0) {mzds.add(new MyZiDan(plane.x +8, plane.y +0));mzds.add(new MyZiDan(plane.x +52, plane.y +0));}fireTime++;}// 画战机子弹for (int i = 0; i < mzds.size(); i++) {MyZiDan myZidan = mzds.get(i);myZidan.draw(g);}// 清理敌机for (int i = 0; i < dijis.size(); i++) {Diji dj = dijis.get(i);if (dj.x < -100) {dijis.remove(i);}}// 抽奖:添加敌机if ((int) (Math.random() * 20) == 5) {dijis.add(new Diji());}// 抽奖:添加血瓶if ((int) (Math.random() * 1000) == 5) {gifts.add(new Gift());}for (int i = 0; i < gifts.size(); i++) {Gift gift = gifts.get(i);gift.draw(g);}//// 抽奖:添加powerif ((int) (Math.random() * 1000) == 5) {powers.add(new Power());}for (int i = 0; i < powers.size(); i++) {Power power = powers.get(i);power.draw(g);}// 画敌机for (int i = 0; i < dijis.size(); i++) {Diji dj = dijis.get(i);dj.draw(g);}// 画飞机plane.draw(g);// 判断战机相撞for (int i = 0; i < dijis.size(); i++) {// 先得到每一个敌机Diji dj = dijis.get(i);Rectangle r1 = dj.getRectangle();Rectangle r2 = plane.getRectangle();if (r1.intersects(r2)) {dijis.remove(i);plane.lifeCount = plane.lifeCount - 1;if(plane.lifeCount>0)flag=false;if(plane.lifeCount<1){ PlaneStatus.playStatus=-1; }}// 判断战机和血瓶相撞for (int i = 0; i < gifts.size(); i++) {// 先得到每一个血瓶Gift gift = gifts.get(i);Rectangle r1 = gift.getRectangle();Rectangle r2 = plane.getRectangle();if (r1.intersects(r2)) {gifts.remove(i);if (plane.lifeCount <5) {plane.lifeCount = plane.lifeCount + 1;}}}//// 判断战机和Power相撞for (int i = 0; i < powers.size(); i++) {// 先得到每一个powerPower power = powers.get(i);Rectangle r1 = power.getRectangle();Rectangle r2 = plane.getRectangle();if (r1.intersects(r2)) {powers.remove(i);flag=true;}}// 判断敌机在中弹for (int i = 0; i < mzds.size(); i++) {// 得到每个战机子弹MyZiDan myzidan = mzds.get(i);Rectangle r1 = myzidan.getRectangle();for (int j = 0; j < dijis.size(); j++) {// 每一个敌机Diji diji = dijis.get(j);Rectangle r2 = diji.getRectangle();if (r1.intersects(r2)) {mzds.remove(i);dijis.remove(j);count++;}}}boolean isFire1 = false;boolean isFire2 = false;public void keyPressed(KeyEvent e) {plane.keyPressed(e);if (e.getKeyCode() == KeyEvent.VK_J) {isFire1 = true;}/*if (e.getKeyCode() == KeyEvent.VK_K) {isFire2 = true;}*/}public void keyReleased(KeyEvent e) {plane.keyReleased(e);if (e.getKeyCode() == KeyEvent.VK_J) {isFire1 = false;fireTime = 0;}/*if (e.getKeyCode() == KeyEvent.VK_K) {isFire2 = false;fireTime = 0;}*/if( e.getKeyCode()==KeyEvent.VK_P){for(int i=0;i<dijis.size();i++)dijis.remove(i);}}}package com;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyEvent;import java.io.IOException;import javax.imageio.ImageIO;// 游戏结束public class Over {Image obg=null;Image ng=null;public Over() {try {obg = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/obg.jpg"));ng = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/ng.png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g){g.drawImage(obg, 0, 0, null);g.drawImage(ng, 120,100, null);g.setColor(Color.black);g.setFont(new Font("幼圆", Font.BOLD, 40));g.drawString("游戏结束啦!",200 ,600 );}public void keyPressed(KeyEvent e) {}public void keyReleased(KeyEvent e) {}}package com;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JFrame;public class MainFrame extends JFrame {Before before =new Before();Play01 play01 = new Play01();Over over = new Over();public MainFrame() {//设置标题this.setTitle(" 让子弹飞一会~"); //设置大小this.setSize(600, 800);//定位居中this.setLocationRelativeTo(null);//添加关闭操作this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //禁止重置大小zthis.setResizable(false);//添加键盘监听器//KeyListener --> KeyAdapterthis.addKeyListener(new KeyAdapter(){@Overridepublic void keyPressed(KeyEvent e) {if(PlaneStatus.playStatus == 0){before.keyPressed(e);}else if(PlaneStatus.playStatus ==1){play01.keyPressed(e);}else if(PlaneStatus.playStatus==-1){over.keyPressed(e);}}@Overridepublic void keyReleased(KeyEvent e) {if(PlaneStatus.playStatus == 0){before.keyReleased(e);}else if(PlaneStatus.playStatus ==1){play01.keyReleased(e);}else if(PlaneStatus.playStatus==-1){over.keyReleased(e);}}});//启动一个线程:每隔20 毫秒执行一次new Thread(){public void run(){while(true){MainFrame.this.repaint();try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}}}}.start();//显示this.setVisible(true);}Image bufferImage =null;//这个方法也是20毫秒执行一次public void paint(Graphics g){if(bufferImage==null){bufferImage = this.createImage(600, 800);}Graphics g4Image = bufferImage.getGraphics();g4Image.setColor(Color.BLACK);g4Image.fillRect(0, 0, 600, 800);this.draw(g4Image);g.drawImage(bufferImage, 0, 0, null);}public void draw(Graphics g){if(PlaneStatus.playStatus == 0){before.draw(g);}else if(PlaneStatus.playStatus ==1){play01.draw(g);}else if(PlaneStatus.playStatus==-1){over.draw(g);}}public static void main(String[] args) {new MainFrame();}}package com;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.io.IOException;import javax.imageio.ImageIO;public class MyZiDan {Image zidanImage = null;int x ;int y ;public MyZiDan(int x,int y) {this.x=x;this.y=y;try {zidanImage = ImageIO.read(MyZiDan.class.getClassLoader().getResourceAsStream("images/zidan.png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {//画我军子弹图片g.drawImage(zidanImage, x, y, null);//我的飞机子弹移动速度y-=20;}public Rectangle getRectangle(){return new Rectangle(x,y,zidanImage.getWidth(null),zidanImage.getHeight(null));}}package com;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.event.KeyEvent;import java.io.IOException;import javax.imageio.ImageIO;public class Diji {Image dijiImage = null;int y = -20;int x = 10;//20 ~ 760int r;public Diji() {this.x=(int)(Math.random()*540)+40;try {r = (int)(Math.random()*3)+1;dijiImage = ImageIO.read(Diji.class.getClassLoader().getResourceAsStream("images/diji_"+r+".png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {//画敌机图片g.drawImage(dijiImage, x, y, null);//敌机移动if(r==1){y+=4;}else if(r==2){y+=4;}else if(r==3){y+=7;}}public Rectangle getRectangle(){return new Rectangle(x,y,dijiImage.getWidth(null),dijiImage.getHeight(null));}}package com;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.event.KeyEvent;import java.io.IOException;import javax.imageio.ImageIO;public class Gift {Image GiftImage = null;int x = 20;int y = 0;public Gift() {this.x=(int)(Math.random()*540)+20;try {GiftImage = ImageIO.read(Gift.class.getClassLoader().getResourceAsStream("images/blood.png"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {//画血瓶图片g.drawImage(GiftImage, x, y, null);//血瓶移动y++;}public Rectangle getRectangle(){return new Rectangle(x,y,GiftImage.getWidth(null),GiftImage.getHeight(null));}}package com;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.io.IOException;import javax.imageio.ImageIO;public class DijiZiDan {Image zidanImage = null;int x ;int y ;int fangxiang =0;public DijiZiDan(int x,int y) {this.x=x;this.y=y;fangxiang = (int)(Math.random()*5);//0 ~ 7try {zidanImage = ImageIO.read(DijiZiDan.class.getClassLoader().getResourceAsStream("images/dijizidan.jpg"));} catch (IOException e) {e.printStackTrace();}}public void draw(Graphics g) {//画敌机子弹图片g.drawImage(zidanImage, x, y, null);//移动this.move();}public void move(){if(fangxiang==0){//下y=y+2;}else if(fangxiang==1){//左x=x-2;}else if(fangxiang==2){//右x=x+2;}else if(fangxiang==3){//左下x=x-2;y=y+2;}else if(fangxiang==4){//右下x=x+2;y=y+2;}}public Rectangle getRectangle(){return new Rectangle(x,y,zidanImage.getWidth(null),zidanImage.getHeight(null));}}package com;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyEvent;import java.io.IOException;import javax.imageio.ImageIO;// 游戏开始之前public class Before {Image bg=null;Image wfeiji=null;Image kdiji1=null;Image kdiji2=null;Image kdiji3=null;public Before() {try {bg = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/bg.jpg"));wfeiji = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/feiji_1.png"));kdiji1 = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/kdiji_01.png"));kdiji2 = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/kdiji_02.png"));kdiji3 = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/kdiji_03.png"));} catch (IOException e) {e.printStackTrace();}}int time=0;public void draw(Graphics g){if(PlaneStatus.roleNum==1){// 画妹妹g.drawImage(bg, 0, 0, null);g.drawImage(wfeiji, 260, 600, null);g.drawImage(kdiji1, 200, 50, null);g.drawImage(kdiji1, 400, 50, null);g.drawImage(kdiji1, 150, 480, null);g.drawImage(kdiji1, 400, 480, null);g.drawImage(kdiji2, 100, 200, null);g.drawImage(kdiji2, 300, 100, null);g.drawImage(kdiji2, 480, 200, null);g.drawImage(kdiji3, 300, 300, null);g.drawImage(kdiji3, 70, 400, null);g.drawImage(kdiji3, 510, 400, null);}//画回车符time++;g.setColor(Color.YELLOW);g.setFont(new Font("幼圆", Font.BOLD, 30));if(time<=10){g.drawString("[Enter]>>", 50, 750);}else if(time<=20){g.drawString("[Enter] >>", 50, 750);}else if(time<=30){g.drawString("[Enter] >>", 50, 750);if(time==30){time=0;}}}public void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();if(keyCode == KeyEvent.VK_ENTER){PlaneStatus.playStatus=1;}if(keyCode ==KeyEvent.VK_LEFT ||keyCode==KeyEvent.VK_RIGHT ){ PlaneStatus.roleNum = 3-PlaneStatus.roleNum;//1~2 互换}}public void keyReleased(KeyEvent e) {}}。
packagecom;;importjava.awt.Color;;importjava.awt.Font;;importjava.awt.Graphics;;importjava.awt.Image;;importjava.awt.Rectangle;importjava.awt.event.Key;importjava.io.IOExceptio;imppackage com;
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.io.IOException; import javax.imageio.ImageIO; public class Plane { Image feijiImage = null; int x = 300; int y = 700; intlifeCount=5; public Plane() { try { feijiImage = ImageIO.read(Plane.class.getClassLoader() .getResourceAsStream("images/feiji.png")); } catch (IOException e) { e.printStackTrace(); } } public void draw(Graphics g) { // 画飞机图片 g.drawImage(feijiImage, x, y, null); // 飞机移动 this.move(); // 血条 if(lifeCount>0){ g.setColor(Color.WHITE); g.fillRect(20, 80, 100, 10); g.setColor(Color.red); g.fillRect(20, 80, (100/5)*lifeCount, 10); g.setColor(Color.blue); g.setFont(new Font("幼圆", Font.BOLD, 30)); g.drawString("Score:"+Play01.count, 20, 60); } } // public void move(){ if(isUP&& !isDown&& !isLeft&& !isRight){ 上 y=y-5; }else if(!isUP&&isDown&& !isLeft&& !isRight){
飞机大战课程设计报告摘要一、课程目标知识目标:1. 让学生掌握飞机大战游戏中的基础物理知识,如速度、重力、碰撞等;2. 帮助学生了解计算机编程的基本逻辑,如循环、条件语句、变量等;3. 使学生理解游戏设计的基本原则,如游戏规则、界面设计、用户体验等。
技能目标:1. 培养学生运用物理知识解决实际问题的能力,如设计合理的飞行轨迹;2. 培养学生运用编程技能实现游戏功能,如编写飞机移动、发射子弹等代码;3. 提高学生的团队协作能力,通过合作完成一个完整的飞机大战游戏项目。
情感态度价值观目标:1. 激发学生对科学知识的兴趣,培养探索精神和创新意识;2. 培养学生面对挑战的积极态度,增强克服困难的信心;3. 引导学生正确看待游戏,认识到游戏可以成为学习工具,培养健康游戏观念。
课程性质:本课程为跨学科综合实践课程,结合物理、计算机编程和游戏设计等多学科知识。
学生特点:五年级学生,具备一定的物理知识和逻辑思维,对计算机编程和游戏设计有浓厚兴趣。
教学要求:注重理论与实践相结合,强调动手实践,鼓励学生探究、创新和合作。
通过本课程,使学生将所学知识应用于实际项目中,提高综合运用能力。
二、教学内容1. 物理知识模块:- 速度与加速度的概念及其在飞机运动中的应用;- 重力、碰撞的基本原理及其在游戏中的表现;- 简单力学知识在飞机大战游戏中的运用。
2. 计算机编程模块:- 编程环境与工具的使用;- 基本编程语法,如变量、循环、条件语句等;- 利用编程实现飞机大战游戏的基本功能,如飞机移动、子弹发射、敌机生成等。
3. 游戏设计模块:- 游戏规则设计与策划;- 游戏界面设计,如布局、色彩、字体等;- 用户体验与游戏测试,优化游戏性能。
教学大纲:1. 第一周:介绍物理知识模块,学习速度、加速度等概念,分析飞机运动规律;2. 第二周:学习重力、碰撞原理,探讨在游戏中如何应用;3. 第三周:学习计算机编程模块,掌握编程基础,编写简单的飞机大战游戏功能;4. 第四周:深入学习编程,实现游戏核心功能,如飞机移动、子弹发射等;5. 第五周:开展游戏设计模块教学,设计游戏规则、界面,进行初步测试;6. 第六周:优化游戏设计,进行用户体验测试,完善飞机大战游戏项目。
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)玩家飞机可连续发射子弹,子弹位置由战机起始位置决定,用户通过操控飞机位置来扫射飞机。