Java游戏开发项目及游戏源码
- 格式:doc
- 大小:296.50 KB
- 文档页数:59
java课程设计小游戏拿火柴一、教学目标本节课的教学目标是使学生掌握Java语言的基本语法和编程技巧,通过编写小游戏“拿火柴”来提高学生的编程实践能力。
具体目标如下:1.掌握Java语言的基本语法和结构。
2.理解面向对象编程的基本概念。
3.学习使用Java编写简单的图形界面程序。
4.能够使用Java编写基本的控制结构和函数。
5.学会使用Java编写简单的图形界面程序。
6.能够运用面向对象编程思想来解决问题。
情感态度价值观目标:1.培养学生的编程兴趣,提高学生主动学习编程的积极性。
2.培养学生团队协作、沟通交流的能力。
3.培养学生解决问题、创新思维的能力。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java语言基本语法和结构:数据类型、变量、常量、运算符、控制结构等。
2.面向对象编程:类、对象、属性、方法、继承、多态等。
3.Java图形界面编程:Swing组件、事件处理、布局管理器等。
4.小游戏“拿火柴”的设计和实现:游戏规则、界面设计、逻辑实现等。
三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用以下几种教学方法:1.讲授法:讲解Java语言的基本语法和结构,以及面向对象编程的基本概念。
2.案例分析法:分析实际编程案例,让学生理解Java编程的应用场景。
3.实验法:让学生动手编写小游戏“拿火柴”,提高学生的编程实践能力。
4.小组讨论法:分组进行讨论,培养学生的团队协作和沟通交流能力。
四、教学资源本节课的教学资源包括以下几个方面:1.教材:《Java编程入门》或《Java核心技术》等。
2.参考书:《Java编程思想》、《Java并发编程实战》等。
3.多媒体资料:教学PPT、视频教程、在线编程实践平台等。
4.实验设备:计算机、网络环境、编程软件(如Eclipse、IntelliJ IDEA等)。
五、教学评估本节课的教学评估将采用多元化评价方式,以全面、客观、公正地评价学生的学习成果。
Java游戏开发之坦克大战代码标题:Java游戏开发之坦克大战代码关键词:Java坦克大战,坦克大战Java代码这是一个Java坦克大战的源码,实现了大部分功能,是学习Java绘图技术的好例子主类:package com.qq.TankGame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Paint;import java.awt.Panel;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextArea;/////**// * 功能:java绘图// * @author Administrator// *// */public class TankGame extends JFrame implements ActionListener{MyPanel mp = null;myStartPanel msp = null;EnemyTask em = null;JMenuBar jmb = null;JMenu jm = null;JMenuItem jmi1 = null;JMenuItem jmi2 = null;JMenuItem jmi3 = null;public static void main(String[] args) {TankGame tankGame = new TankGame();}public TankGame(){jmb = new JMenuBar();jm = new JMenu("游戏(G)");jm.setMnemonic('G');jmi1 = new JMenuItem("开始游戏(S)");jmi1.setMnemonic('S');jmi1.addActionListener(this);jmi1.setActionCommand("newGame");jmi2 = new JMenuItem("继续游戏(O)");jmi2.setMnemonic('O');jmi3 = new JMenuItem("退出游戏(X)");jmi3.setMnemonic('X');jmi3.addActionListener(this);jmi3.setActionCommand("exit");//启动mp线程//em = new EnemyTask();//mp = new MyPanel();msp = new myStartPanel();this.setJMenuBar(jmb);this.add(msp);//this.add(mp);jmb.add(jm);jm.add(jmi1);jm.add(jmi2);jm.add(jmi3);this.setSize(600,500);//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//this.addKeyListener(mp);Thread t1 = new Thread(msp);t1.start();// Thread t = new Thread(mp);// t.start();}@Overridepublic void actionPerformed(ActionEvent arg0) {if(arg0.getActionCommand().equals("newGame")){mp = new MyPanel();Thread t = new Thread(mp);t.start();this.remove(msp);this.remove(mp);this.add(mp);this.setVisible(true);this.addKeyListener(mp);//Recoder.getRecording();}else if(arg0.getActionCommand()== "exit"){//Recoder.KeepRecording();Recoder.KeepExit();//KeepExit();System.exit(0);}}}class myStartPanel extends JPanel implements Runnable{ int times = 0;public void paint(Graphics g ){super.paint(g);g.fillRect(0, 0, 400, 300);if(times%2 ==0){g.setColor(Color.BLUE);Font f = new Font("华文新魏", Font.BOLD, 30);g.setFont(f);g.drawString("stage:1", 150, 150);}}@Overridepublic void run() {while(true){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}this.repaint();times ++;}}}class MyPanel extends JPanel implements KeyListener,Runnable{ int [] TanksX = new int[20];int [] TanksY = new int[20];int [] ShotsX = new int[100];int [] ShotsY = new int[100];// int [][]Tanks = new int[20][2];// int [][]Shots = new int[20][2];int [] ETdirects = new int[20];int [] HeroShotsX = new int[10];int [] HeroShotsY = new int[10];static Hero hero = null;EnemyTask et = null;shot s = null;boolean isPaintShot = true;int a = 0, b = 0 , c = 0;int [] directs = new int [10];static //敌人坦克集合Vector<EnemyTask> ets = new Vector<EnemyTask>();int enSize = 3; //敌人坦克初始数量int enSizes = 5; //敌人坦克画面总数量int hintEnemyTanks = 0;//击中敌人坦克数量public void showInfo(Graphics g ){//画提示信息//画出提出坦克this.drawTank(80, 330, g, 0, 1);this.drawTank(160, 330, g, 0, 0);g.setColor(Color.BLACK);g.drawString(Recoder.getEnNum() + "", 105, 350);g.drawString(Recoder.getMyLife() + "", 185, 350);//画出成绩g.setColor(Color.BLACK);Font f = new Font("宋体", Font.BOLD, 15);g.setFont(f);g.drawString("你的总成绩:", 400, 20);this.drawTank(410, 30, g, 0, 1);g.drawString((20 - Recoder.getEnNum()) + "", 435, 50);}public void paint(Graphics g){super.paint(g);g.fillRect(0, 0, 400, 300);this.showInfo(g);//画出提示信息//自己坦克if(hero.isLive == true){this.drawTank(hero.getX(), hero.getY(), g, hero.direct, hero.type); }else{if(Recoder.getMyLife() > 0){hero = new Hero(30, 270 ,0,0,10 , true);hero.isLive = true;}}//画出敌人坦克for(int i = 0; i <ets.size(); i++){EnemyTask et = ets.get(i);if(!et.isLive){ets.remove(i);if(Recoder.getEnNum() >0){this.drawTank(50, 0, g, 1, 1);ets.add(et);//et.isLive = true;Thread t = new Thread(et);t.start();}// if(Recoder.getEnNum() > 0){// et.isLive = true;// }}if(et.isLive){this.drawTank(et.getX(), et.getY(),g, et.direct, et.type);System.out.println("et.ss.size()"+et.ss.size());for(int j = 0; j < et.ss.size(); j++){//敌人坦克子弹s = et.ss.get(j);if(s.isLive){if(isPaintShot){g.fill3DRect(s.x, s.y, 5, 10, false);}}else{et.ss.remove(j);}}}// if(!et.isLive){// ets.remove(i);// }}//画出子弹for(int i = 0; i< hero.ss.size(); i++){if(hero.ss.get(i)!= null && hero.ss.get(i).isLive == true){ g.fill3DRect(hero.ss.get(i).x, hero.ss.get(i).y, 5, 10, false); }if(hero.ss.get(i).isLive == false){hero.ss.remove(hero.ss.get(i));}}}// public void hintTank2(shot s , Hero et){// switch (et.direct) {// case 0:// case 1:// if(s.x < et.x + 20 && s.x > et.x// && s.y < et.y + 30 && s.y > et.y){// s.isLive = false;// et.isLive = false;// }// //break;// case 2:// case 3:// if(s.x < et.x + 30 && s.x > et.x// && s.y < et.y + 20 && s.y > et.y){// s.isLive = false;// et.isLive = false;// }// //break;////// default://// break;// }//// }public boolean hintTank(shot s , Tank et){boolean b = false;switch (et.direct) {case 0:case 1:if(s.x < et.x + 20 && s.x > et.x&& s.y < et.y + 30 && s.y > et.y){s.isLive = false;et.isLive = false;b = true;}break;case 2:case 3:if(s.x < et.x + 30 && s.x > et.x&& s.y < et.y + 20 && s.y > et.y){s.isLive = false;et.isLive = false;b = true;}break;// default:// break;}return b;}public void drawTank (int x , int y , Graphics g , int direct , int type){ switch(type){//坦克类型case 0:g.setColor(Color.RED);break;case 1:g.setColor(Color.BLUE);break;}switch (direct) {case 0://向上g.fill3DRect(x, y, 5, 30, false );g.fill3DRect(x + 15, y, 5, 30, false );g.fill3DRect(x + 5, y + 5, 10, 20, false );g.fillOval(x + 5, y + 10, 10, 10);g.drawLine(x + 10, y,x + 10, y + 15);break;case 1://向下g.fill3DRect(x, y, 5, 30, false );g.fill3DRect(x + 15, y, 5, 30, false );g.fill3DRect(x + 5, y + 5, 10, 20, false );g.fillOval(x + 5, y + 10, 10, 10);g.drawLine(x + 10, y + 15,x + 10,y + 30 ); break;case 2://向左g.fill3DRect(x, y, 30, 5, false );g.fill3DRect(x , y + 15, 30, 5, false );g.fill3DRect(x + 5, y + 5, 20, 10, false );g.fillOval(x + 10, y + 5, 10, 10);g.drawLine(x , y + 10,x + 15,y + 10 );break;case 3://向右g.fill3DRect(x, y, 30, 5, false );g.fill3DRect(x , y + 15, 30, 5, false );g.fill3DRect(x + 5, y + 5, 20, 10, false );g.fillOval(x + 10, y + 5, 10, 10);g.drawLine(x + 15,y + 10, x + 30 , y + 10); break;default:break;}}public MyPanel (){hero = new Hero(30, 270 ,0,0,10 , true);//tanks = new tank(100,100, 2 ,1);//初始化敌人坦克Recoder.setHero(hero);for(int i = 0; i < enSize; i++){//创建敌人坦克的对象Recoder.getRecording();EnemyTask et = new EnemyTask((i + 1)*50, 0, 1, 1, 5 ,true); et.setEts(ets);Recoder.setEtss(ets);//传ets到RecoderThread t = new Thread(et);t.start();shot s = new shot(et.x + 10 , et.y + 30, et.direct);et.ss.add(s);Thread t2 = new Thread(s);t2.start();ets.add(et);//加入到集合中//et.setColor(1);}Recoder.setEnSize(enSize);}@Overridepublic void keyPressed(KeyEvent arg0) {// TODO Auto-generated method stubif(arg0.getKeyCode() == KeyEvent.VK_S){//hero.setX(hero.getX() ++ 1);// int i= hero.getY();// i += hero.speed;// hero.setY(i);this.hero.MoveDown();hero.setD(1);}if(arg0.getKeyCode() == KeyEvent.VK_W){//hero.setX(hero.getX() ++ 1);// int i= hero.getY();// i -= hero.speed;// hero.setY(i);hero.MoveUp();hero.setD(0);}if(arg0.getKeyCode() == KeyEvent.VK_D){//hero.setX(hero.getX() ++ 1);// int i= hero.getX();// i += hero.speed;// hero.setX(i);hero.MoveRight();hero.setD(3);}if(arg0.getKeyCode() == KeyEvent.VK_A){//hero.setX(hero.getX() ++ 1);// int i= hero.getX();// i -= hero.speed;// hero.setX(i);hero.MoveLeft();hero.setD(2);}//判断是否按下Jif(arg0.getKeyCode() == KeyEvent.VK_J){if(hero.ss.size() <= 4){this.hero.shotEnemy();//System.out.println("j");}}if(arg0.getKeyCode() == KeyEvent.VK_SPACE){//空格暂停 if(hero.speed != 0){a = hero.speed ;hero.speed = 0;for(int i = 0; i < ets.size(); i ++){//System.out.println("aaaaaaaaaaaaaa");EnemyTask et = ets.get(i);//System.out.println("speed" + et.speed);b = et.speed;et.speed = 0;directs[i] = et.direct;//System.out.println(et.direct);//System.out.println(directs[i]);//et.direct = 0;et.isdirects = false;for(int j = 0 ; j < et.ss.size(); j ++){shot s = et.ss.get(j);c = s.speed;s.speed = 0;System.out.println("aa");}}//System.out.println("b1 =" + b);isPaintShot = false;}else{hero.speed = a;//System.out.println("a2 =" + a);for(int i = 0; i < ets.size(); i ++){//System.out.println("bbbbbbbbbbbbbbbbbbb");EnemyTask et = ets.get(i);et.isdirects = true;et.speed = b;et.direct = directs[i];for(int j = 0 ; j < et.ss.size(); j ++){shot s = et.ss.get(j);s.speed = c;isPaintShot = true;}}s.isShot = true;}}if(arg0.getKeyCode() == KeyEvent.VK_K){this.KeepExit();System.exit(0);}if(arg0.getKeyCode() == KeyEvent.VK_L){this.GetKeeper();}this.repaint();}@Overridepublic void keyReleased(KeyEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void run() {//每隔100mswhile(true){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.hintEnemyTank();this.hintMyTank();// for(int i = 0; i < et.ss.size(); i ++){// shot myshot = et.ss.get(i);// if(et.isLive == true){//// if(hero.isLive = true){// this.hintTank2(myshot, hero);// }//// }// }this.repaint();}}private void hintMyTank() {for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);for(int j = 0; j < et.ss.size(); j++ ){shot s = et.ss.get(j);if(s != null){if(hero.isLive){this.hintTank(s, hero);if(this.hintTank(s, hero)){//判断是否击中,返回true则hero数量减一Recoder.setMyLife(Recoder.getMyLife() - 1 );}}}}}}private void hintEnemyTank() {for(int i = 0; i < hero.ss.size(); i ++){shot myshot = hero.ss.get(i);if(myshot.isLive == true){for(int j = 0; j < ets.size(); j ++){EnemyTask et = ets.get(j);if(et.isLive = true){this.hintTank(myshot, et);if(this.hintTank(myshot, et)){hintEnemyTanks ++;Recoder.setEnNum(Recoder.getEnNum() - 1);}}}}}}private void KeepExit(){int [] heros = new int[]{hero.getX(),hero.getY(),hero.direct,};for(int i = 0 ; i < ets.size(); i ++){EnemyTask et = ets.get(i);TanksX[i] = et.getX();TanksY[i] = et.getY();ETdirects [i] = et.direct;for(int j = 1 ; j < et.ss.size(); j++){shot s = et.ss.get(j);ShotsX[j] = s.x;ShotsY[j] = s.y;}}for(int i = 0 ; i < hero.ss.size(); i++ ){shot s = hero.ss.get(i);HeroShotsX[i] = s.x ;HeroShotsY[i] = s.y;}BufferedWriter bw = null;try {bw = new BufferedWriter(new FileWriter("d:\\aa\\TanksX.txt")); for(int i = 0 ; i < enSize ; i ++){bw.write(TanksX[i] + "\r\n");bw.write(TanksY[i] + "\r\n");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void GetKeeper (){//继续游戏时还原数据BufferedReader br = null ;try {br = new BufferedReader(new FileReader("d:\\aa\\TanksX.txt")); for(int i = 0; i < enSize*2 ; i ++){if(i % 2 !=0){TanksY[i] = Integer.parseInt(br.readLine());System.out.println("TanksY" + TanksY[i]);}else{TanksX[i] = Integer.parseInt(br.readLine());System.out.println("TanksX" + TanksX[i]);}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}//class tank extends Tank{//// public tank(int x, int y, int direct,int type) {// super(x, y, direct,type);// // TODO Auto-generated constructor stub// }////}下面是工具类:package com.qq.TankGame;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Vector;class Recoder{/****/private static Vector<EnemyTask> ets = new Vector<EnemyTask>(); public static Vector<EnemyTask> getEts() {return ets;}public static void setEtss(Vector<EnemyTask> ets) {Recoder.ets = ets;}private static int enSize ;public static int getEnSize() {return enSize;}public static void setEnSize(int enSize) {Recoder.enSize = enSize;}private static Hero hero ;public static Hero getHero() {return hero;}public static void setHero(Hero hero) { Recoder.hero = hero;}public static void KeepExit(){//System.out.println(hero.getX());int [] TanksX = new int[20];int [] TanksY = new int[20];int [] ShotsX = new int[100];int [] ShotsY = new int[100];int [] ETdirects = new int[20];int [] HeroShotsX = new int[10];int [] HeroShotsY = new int[10];int [] heros = new int[]{hero.getX(),hero.getY(),hero.direct};for(int i = 0 ; i < ets.size(); i ++){EnemyTask et = ets.get(i);TanksX[i] = et.getX();TanksY[i] = et.getY();ETdirects [i] = et.direct;for(int j = 1 ; j < et.ss.size(); j++){shot s = et.ss.get(j);ShotsX[j] = s.x;ShotsY[j] = s.y;}}for(int i = 0 ; i < hero.ss.size(); i++ ){ shot s = hero.ss.get(i);HeroShotsX[i] = s.x ;HeroShotsY[i] = s.y;}BufferedWriter bw = null;BufferedWriter bw1 = null ;try {bw = new BufferedWriter(new FileWriter("d:\\aa\\TanksX.txt"));for(int i = 0 ; i < enSize ; i ++){bw.write(TanksX[i] + "\r\n");bw.write(TanksY[i] + "\r\n");}bw1 = new BufferedWriter(new FileWriter("d:\\aa\\KeepRecoding.txt")); bw1.write((20 - getEnNum()) + "\r\n" );} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {bw1.close();bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private static int enNum = 5;public static int getEnNum() {return enNum;}public static void setEnNum(int enNum) {Recoder.enNum = enNum;}public static int getMyLife() {return myLife;}public static void setMyLife(int myLife) {Recoder.myLife = myLife;}private static int myLife = 3;private static BufferedReader br = null;public static void getRecording(){try {br = new BufferedReader(new FileReader("d:\\aa\\KeepRecoding.txt")); String n ;while((n = br.readLine()) != null ){String a = n;enNum = 20 - Integer.parseInt(n);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private static BufferedWriter bw = null;public static void KeepRecording (){try {bw = new BufferedWriter(new FileWriter("d:\\aa\\KeepRecoding.txt")); bw.write((20 - getEnNum()) + "\r\n" );} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {bw.close();//先开后关//new FileWriter("d:\\aa\\KeepRecoding.txt").close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public class Tank {int x = 0 ;int y = 0;int direct = 0; //方向int type = 0 ;//类型int speed = 30;//速度int color;boolean isLive;public int getColor() {return color;}public void setColor(int color) {this.color = color;}public int getS() {return speed;}public void setS(int speed) {this.speed = speed;}public Tank(int x , int y , int direct , int type, int speed, boolean isLive){ this.x = x;this.y = y;this.direct = direct;this.type= type;this.speed = speed;this.isLive = isLive;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getD() {return direct;}public void setD(int direct) {this.direct = direct;}public int getT() {return type;}public void setT(int type) {this.type = type;}}class EnemyTask extends Tank implements Runnable{Vector<shot> ss = new Vector<shot>();Vector<EnemyTask> ets = new Vector<EnemyTask>();boolean isdirects = true;public EnemyTask(int x, int y, int direct, int type, int speed ,boolean isLive) {super(x, y, direct, type, speed, isLive);// TODO Auto-generated constructor stub}public boolean isTouchOhterTank (){boolean b = false;switch (this.direct) {case 0://此坦克向上for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内&& this.y>=et.y && this.y <= et.y + 30)//第一个点y在内||(this.x + 20>=et.x && this.x+ 20 <= et.x + 20//第二个点x在内&& this.y >=et.y && this.y <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内||(this.x + 20>=et.x && this.x+ 20 <= et.x + 30//第二个点x在内&& this.y >=et.y && this.y <= et.y + 20)//第二个点y在内){b = true;}}}}break;case 1://向下for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内&& this.y + 30>=et.y && this.y + 30 <= et.y + 30)//第一个点y在内||(this.x + 20>=et.x && this.x+ 20 <= et.x + 20//第二个点x在内&& this.y + 30>=et.y && this.y + 30 <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内&& this.y + 30 >=et.y && this.y + 30 <= et.y + 20)//第一个点y在内||(this.x + 20 >=et.x && this.x+ 20 <= et.x + 30//第二个点x在内&& this.y + 30 >=et.y && this.y + 30 <= et.y + 20)//第二个点y在内){b = true;}}}}break;case 2:for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内&& this.y>=et.y && this.y <= et.y + 30)//第一个点y在内||(this.x >=et.x && this.x<= et.x + 20//第二个点x在内&& this.y + 20 >=et.y && this.y + 20 <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内||(this.x >=et.x && this.x<= et.x + 30//第二个点x在内&& this.y + 20>=et.y && this.y + 20 <= et.y + 20)//第二个点y在内){b = true;}}}}break;case 3:for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x + 30>=et.x && this.x + 30 <= et.x + 20//第一个点x在内&& this.y>=et.y && this.y <= et.y + 30)//第一个点y在内||(this.x + 30 >=et.x && this.x+ 30 <= et.x + 20//第二个点x在内&& this.y + 20 >=et.y && this.y + 20 <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x + 30>=et.x && this.x + 30 <= et.x + 30//第一个点x在内&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内||(this.x + 30>=et.x && this.x+ 30 <= et.x + 30//第二个点x在内&& this.y + 20>=et.y && this.y + 20 <= et.y + 20)//第二个点y在内){b = true;}}}}break;default:break;}return b ;}@Overridepublic void run() {int a = (int) (Math.random() * 10 + 2);//连动步数int times = 0;while(true){try {Thread.sleep(300);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//if(x > 0 && x < 400 - 30 & y > 0 && y < 300 - 30){ //if(!this.isTouchOhterTank()){switch(this.direct){case 0://System.out.println(isTouchOhterTank());for(int i = 0 ;i < a ; i++){if(y - this.speed > 0 && !this.isTouchOhterTank()){y -= this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case 1:for(int i = 0 ;i < a ; i++){if(y + speed < 300 - 30 && !this.isTouchOhterTank()){ y += this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case 2:for(int i = 0 ;i < a ; i++){if(x - speed > 0 && !this.isTouchOhterTank()){x -= this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case 3:for(int i = 0 ;i < a ; i++){if(x + speed < 400 - 30 && !this.isTouchOhterTank()){ x += this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;}//}times ++;if(times % 2 == 0){if(isLive){if(ss.size() < 3){shot s = null;switch (direct) {case 0://向上s = new shot(x + 10 , y ,0);ss.add(s);break;case 1://向下s = new shot(x + 10 , y + 30 , 1);ss.add(s);break;case 2://向左s = new shot(x , y + 10 , 2);ss.add(s);break;case 3://右s = new shot(x + 30 , y + 10 , 3);ss.add(s);break;default:break;}Thread t = new Thread(s);t.start();}}}//}// //随机改变方向// public void changeDirect(){//// }if(isdirects){this.direct = (int) (Math.random() * 4); }if(this.isLive == false){break;}if(ss.size() < 3){}}}public void setEts(Vector<EnemyTask> ets) { this.ets = ets;}// @Override// public void run() {// while(true){// try {// Thread.sleep(50);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// }//// y ++ ;// System.out.println(y);// }//// }}class Hero extends Tank{//public Hero(int x , int y, int direct, int type,int speed, boolean isLive){super(x, y, direct, type,speed , isLive);}Vector<shot> ss = new Vector<shot>();shot s = null;//开火public void shotEnemy(){//System.out.println("shotEnemy");if(Recoder.getMyLife() > 0){//生命没有了,不能发子弹 switch (this.direct) {case 0://向上s = new shot(x + 10 , y ,0);ss.add(s);break;case 3://右s = new shot(x + 30 , y + 10 , 3);ss.add(s);break;case 1://向下s = new shot(x + 10 , y + 30 , 1);ss.add(s);break;case 2://向左s = new shot(x , y + 10 , 2);ss.add(s);break;default:break;}Thread t = new Thread(s);t.start();}}//向上,下,左,右public void MoveUp(){if(y - this.speed > 0){y -= speed;}}public void MoveDown(){if(y + this.speed < 300 -30){y += speed;}}public void MoveLeft(){if(x - this.speed > 0){x -= speed;}}public void MoveRight(){if(x + this.speed < 400 -30){x += speed;}}}class shot implements Runnable{int x ,y;int direct;int speed = 20; //子弹速度boolean isShot = true;boolean isLive = true;//子弹是否活着 public shot(int x,int y, int direct){this.x = x;this.y = y;this.direct = direct;}@Overridepublic void run() {while(true){try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(isShot){switch (direct) {case 0://向上y -= speed;break;case 1://下y += speed;break;case 2://右x -= speed;break;case 3://左x += speed;break;default:break;}}//System.out.println(x + " " + y);if(x < 0 || x > 400 || y < 0 || y > 300){ //System.out.println("this.islive = false");this.isLive = false;break;}}} }。
java跳跃小恐龙课程设计一、课程目标知识目标:1. 让学生掌握Java基础语法,如变量声明、数据类型、运算符和条件语句;2. 培养学生运用面向对象编程思想,学会定义类、创建对象及使用方法;3. 引导学生理解游戏开发中坐标、碰撞检测等基本概念。
技能目标:1. 培养学生运用Java编写简单游戏的能力,通过本课程学习,能自主设计并实现跳跃小恐龙游戏;2. 培养学生解决问题的能力,学会分析游戏开发过程中遇到的问题并寻找解决方案;3. 提高学生的逻辑思维能力,通过编写代码实现游戏功能,提高编程技巧。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习Java的热情,树立编程自信心;2. 培养学生团队合作精神,分组合作完成游戏设计,共同解决开发过程中遇到的问题;3. 培养学生勇于尝试、不断优化的精神,通过实践不断提高游戏品质。
课程性质:本课程为实践性较强的课程,注重培养学生的编程能力和实际操作能力。
学生特点:学生具备一定的Java基础,对游戏开发感兴趣,具有较强的动手能力和探索精神。
教学要求:教师需引导学生结合课本知识进行实际操作,注重培养学生的编程思维和解决问题的能力,将理论知识与实际应用相结合,提高学生的综合素养。
通过课程学习,使学生能够独立完成跳跃小恐龙游戏的设计与实现。
二、教学内容1. Java基础语法回顾:变量、数据类型、运算符、条件语句(教材第1-3章)2. 面向对象编程:类与对象、方法、属性(教材第4-6章)3. 游戏开发基本概念:坐标系、碰撞检测、动画效果(教材第7章)4. 跳跃小恐龙游戏设计:a. 游戏需求分析b. 游戏界面设计c. 游戏逻辑实现d. 游戏优化与调试5. 教学进度安排:a. 第1周:Java基础语法回顾,面向对象编程概念介绍b. 第2周:游戏开发基本概念,跳跃小恐龙游戏需求分析c. 第3周:跳跃小恐龙游戏界面设计,编写相关类和对象d. 第4周:跳跃小恐龙游戏逻辑实现,进行初步测试e. 第5周:游戏优化与调试,完善游戏功能6. 教学内容关联性:教学内容与教材紧密相关,通过实际案例(跳跃小恐龙游戏)使学生将所学知识应用于实际项目中,提高学生的编程能力和实践能力。
开题报告计算机科学与技术基于JAVA的俄罗斯方块游戏设计与实现一、综述本课题国内外研究动态,说明选题的依据和意义本课题国内外动态:学校现已开设的课程有C语言、VB、C++,自己本身自学了Java,就目前了解,可用Jave,VB 和C++编写俄罗斯方块程序。
(1)VB的优点VB是完全中文化的环境使用,语句生成器和快速提示帮助使用户不必记忆成千上万的属性和方法,在较短的时间内就能开发出功能强大的应用程序。
Internet应用程序的开发功能更加强大和容易,支持动态HTML技术的应用程序。
应用程序安装向导能帮助用户自动生成具有一定功能的应用程序,加快了程序的开发速度。
(2)C++的优点C++是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从SIMULA 67中吸取了类,从ALGOL 68中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了Ada的类属和Clu的模块特点,从BCPL中吸取异常处理,从BCPL中吸取了用//表示注释。
(3)Java的优点Java是定义位于网络计算的计算机语言,它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适全于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java也集中体现和充分利用了当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。
1.开台无关性如前所述,Java语言独特的运行机制使得它具有良好的二进制级的可移植性,利用Java,开发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。
2.面向对象Java是面向对象的编程语言。
面向对象技术较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。
面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。
java房间小游戏课程设计一、课程目标知识目标:1. 让学生掌握Java语言的基本语法和编程技巧,如变量声明、数据类型、运算符、控制结构等。
2. 帮助学生了解面向对象编程的基本概念,如类、对象、继承、封装和多态。
3. 引导学生掌握Java图形用户界面编程,如Swing库的使用,实现房间游戏的界面设计。
技能目标:1. 培养学生运用Java语言编写程序解决问题的能力,特别是在游戏设计中的应用。
2. 提高学生分析问题和逻辑思维能力,能够设计出有趣、有挑战性的房间游戏。
3. 培养学生团队协作和沟通能力,分组合作完成课程项目。
情感态度价值观目标:1. 培养学生对编程和游戏开发的兴趣,激发创新意识和探索精神。
2. 培养学生面对挑战时的坚持和毅力,勇于克服困难,解决问题。
3. 培养学生遵循道德规范,尊重他人知识产权,养成良好的编程习惯。
课程性质:本课程为实践性较强的学科,注重理论知识与实际操作的结合。
学生特点:学生处于高年级阶段,具备一定的编程基础,对游戏开发感兴趣,喜欢动手实践。
教学要求:结合课程性质、学生特点,将课程目标分解为具体学习成果,注重培养学生的实践能力和团队合作精神。
在教学过程中,注重启发式教学,引导学生自主探究和解决问题。
同时,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
二、教学内容1. Java基本语法与编程技巧- 变量声明与数据类型- 运算符与表达式- 控制结构(顺序、选择、循环)- 数组的使用2. 面向对象编程基础- 类与对象- 继承与多态- 封装与访问控制- 抽象类与接口3. Java图形用户界面编程- Swing库简介- 窗口与容器- 常用组件的使用- 事件处理机制4. 房间游戏设计与实现- 游戏需求分析- 游戏场景设计- 角色与物品对象设计- 游戏逻辑实现5. 课程项目与实践- 团队合作与分工- 游戏开发流程- 代码调试与优化- 项目展示与评价教学内容安排与进度:第一周:Java基本语法与编程技巧第二周:面向对象编程基础第三周:Java图形用户界面编程第四周:房间游戏设计与实现第五周:课程项目与实践教材关联:《Java编程思想与实践》第三章至第七章;《Java游戏编程》第二章、第四章、第五章。
跳一跳游戏(Android应用使用Java开发)跳一跳游戏是一款简单而又富有挑战性的休闲游戏,经常出现在我们的手机屏幕上。
本文将介绍跳一跳游戏的开发过程,使用Java语言在Android平台上实现。
1. 游戏概述跳一跳是一款基于物理引擎的游戏,玩家通过点击屏幕来控制角色跳跃,目的是在不碰到障碍物的情况下尽可能远地跳跃。
游戏界面简洁明了,操作简单直观,非常受欢迎。
2. 技术要求为了实现跳一跳游戏,我们需要使用Java语言进行Android应用开发。
除此之外,还需要掌握Android开发框架和物理引擎的使用,以及基本的游戏逻辑设计。
3. 开发环境搭建首先,我们需要安装Android Studio,这是一款专门用于Android应用开发的集成开发环境(IDE)。
然后,我们需要下载并配置Java Development Kit(JDK),确保Android Studio可以正常编译和运行我们的代码。
4. 项目创建在Android Studio中,我们可以通过创建一个新项目来开始跳一跳游戏的开发。
在创建项目的过程中,我们可以选择一些基本的配置,例如应用名称、包名、最低支持的Android版本等。
5. 游戏界面设计跳一跳游戏的界面主要由两个部分组成:游戏区域和角色。
游戏区域通常是一个类似于方块的地图,上面有随机生成的障碍物。
角色则是一个小球,玩家通过点击屏幕来控制角色的跳跃。
6. 游戏逻辑设计在跳一跳游戏中,玩家通过点击屏幕控制角色的跳跃力度。
跳跃的力度决定了角色跳跃的高度和距离。
玩家需要在不碰到障碍物的情况下跳跃到另一个平台上,每次跳跃成功都会获得一定的分数。
7. 物理引擎应用为了实现跳一跳游戏中的物理效果,我们可以使用一些开源的物理引擎库,例如Box2D。
物理引擎可以模拟真实世界中的物理效果,使得角色的跳跃和碰撞更加逼真。
8. 分数统计与排名为了增加游戏的竞争性和挑战性,我们可以在跳一跳游戏中添加分数统计和排名功能。
近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台,同时它也是是著名的跨平台的自由集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。
贪吃蛇是人们手机中是一个很常见的一个经典小游戏,人们对它并不陌生,在紧张的现实生活中给人们带来了不少的乐趣,编写这个贪吃蛇小游戏能让人们在业余时间里适当的放松,保持好的心态。
在这个程序中我采用了Java中的图形用户界面技术,同时引入了线程来编写。
本次设计主要是对我之前所学Java知识的一个巩固,不仅提高了我综合运用以前所学知识的能力,同时也锻炼了我的实际动手能力。
整个游戏代码简单易懂,用户在娱乐的同时也可以简单的看一下代码,有助于初涉Java者语言水平的提高。
贪吃蛇的核心算法是如何实现移动和吃掉食物,在当前运动方向上头指针所指的位置之前添加一个节点,然后删除尾节点,最后把链表中的所有节点依次画出来,这样就可以达到移动的效果。
对是否吃到食物,需要对蛇和食物进行碰撞检测,检测未碰撞在一起则只需要执行移动操作,碰撞在一起时表示吃到食物,则只需把食物入队即可,即在蛇的节点链表上再添加一个节点,从而达到身体增长的效果。
本次设计的重点之处在于编程思想的形成,设计图像界面,产生随机食物及其位置。
难点在于程序编写中,整个程序框架的架构。
这就要求我们不仅要对这个游戏的玩法特别熟悉,而且还要熟练掌握Java 语言。
实现贪吃蛇的四个类模块,分别为游戏界面、蛇、食物和方向。
其具体设计如下:1产生游戏界面Yard.java包括界面的位置、大小的设定,绘制游戏界面,启动键盘监听器。
1)在launch()中添加代码:this.setBounds(200,200,COLS*BLOCK_SIZE,ROWS*BLOCK _SIZE);设定界面的位置、大小。
Java程序课程设计任务书一、主要任务与目标1、了解图形用户界面的概念;2、了解AWT的基本体系结构,掌握窗口的基本原理;3、掌握几种布局管理器的使用方法;4、掌握java的事件处理机制;5、了解Swing的基本体系结构,掌握Swing组件的使用方法;6、掌握java小程序的工作原理和使用方法;7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。
8、设计一个用户注册登录界面二、主要内容与基本要求游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。
当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。
在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。
该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。
图片全部消完为游戏成功。
游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。
并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。
三、计划进度12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现1月4日~ 1月5日:系统的调试,修改,完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] 刘宝林.Java程序设计与案例习题解答与实验指导[M].[2] 王鹏何云峰.Swing图形界面开发与案例分析[M].[3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。
毕业设计(论文)任务书第1页第2页第3页基于Java的推箱子游戏设计与实现摘要社会在进步,人们生活质量也在日益提高。
高强度的压力也接踵而来。
社会中急需出现新的有效方式来缓解人们的压力。
此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。
具有操作简单,易于上手的特点。
推箱子游戏的玩法十分简单——控制人物绕过障碍物,到达目的地。
此次毕业设计基于Java语言。
将游戏地图做成通用的关卡设计,关卡用二维数组实现,在二维数组中设置值域来表示不同对象,运用二维数组的遍历算法来加载对应图片实现了游戏图片初始化状态。
同时,通过初始化多个不同二维数组实现了游戏地图关卡的设计,方法巧妙且简单易行,有效的解决了图片排布问题。
充分运用类和方法的调用来实现游戏关卡的初始化。
用读取键值的方法判断游戏人物移动、停止、到达目的地。
舒缓的音乐配合有趣的步骤,相信能引起很多人的兴趣。
作为一个具有悠久历史的游戏,也能够引起人的怀念和共鸣。
关键词Java 游戏二维数组算法读取键值栈Sokoban based on JavaAbstractSocial progress, quality of life is also increasing. High-intensity pressure also follows. The emergence of new social urgently needed an effective way to relieve people's stress. This is designed to meet the needs of the community, Java Sokoban game allows people in her spare time, experience the fun of the game. With simple operation, easy to use features.Sokoban game’s rule is very simple - control characters around obstructions, to arrive at the destination. The graduation project is based on Java language. Game map to make a generic level design, level with two-dimensional array implementation, set the domain in a two-dimensional array to represent different objects, using the two-dimensional array of times calendar calculation method is realized to load the corresponding picture game image initialized state. At the same time, through the initialization of several differenttwo-dimensional arrays realized the design of the game map level, a method is clever and simple, easy to effectively solve the problem of the picture arrangement. Make full use of calling classes and methods to implement the initialization of the game levels with reading the key value method to judge the characters move, stop, or reaching its destination. Soothing music with interesting step, which will hopefully lead to a lot of people's interest. As a game with a long history, but also can cause people to miss and resonance.Key Words: Java game; two-dimensional arrays; algorithm; key value method; stack;目录摘要 (i)Abstract (ii)引言 (1)1 系统分析 (2)1.1 技术可行性分析 (2)1.1.1 可行性目的 (2)1.1.2 可行性研究前提 (2)1.1.3 算法可行性分析 (2)1.1.4 平台选择 (5)1.2 需求分析 (6)1.2.1 引言 (6)1.2.2 游戏需求 (6)1.2.3 软硬件需求 (9)1.2.4 接口控制 (10)1.3 方案论证 (10)1.3.1 C++语言的优点 (10)1.3.2 Java语言的优点 (11)1.3.3 C语言的优点 (12)1.3.4 方案选择 (14)2 概要设计 (15)2.1 游戏设计分析 (16)2.1.1 地图文件的引用 (18)2.1.2 程序运逻辑 (19)2.1.3 绘图 (19)2.1.4 显示平台 (21)2.2 注意事项 (23)2.3 游戏流程图 (23)2.4 函数模型 (24)3 详细设计 (27)3.1 游戏总体结构与代码 (27)3.2 选关模块 (28)3.3 地图的绘制形成 (29)3.4 小人与箱子移动的算法 (31)3.5 小人上下移动模块 (33)3.6 悔棋模块 (34)3.7 音乐控制 (35)4 游戏测试 (38)4.1 软件测试 (38)4.1.1 软件测试简介 (38)4.2 测试方法 (38)4.3 测试步骤 (38)4.4 游戏系统性能分析 (40)5 项目经验与总结 (41)6 参考文献 (43)7 致谢 (44)8 外文原文及中文翻译 (45)引言策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。
基于Java 的飞机大战游戏的设计与实现摘要飞机大战是电脑游戏发展史中早期最为经典的游戏之一,经常能在掌上游戏机、手机以及电脑上见到这个游戏。
机以及电脑上见到这个游戏。
不过,不过,以往常见的飞机大战游戏是二维平面上的,以往常见的飞机大战游戏是二维平面上的,并且大并且大多以黑白的形式出现,当然在电脑上可以看到多种颜色的飞机大战。
Java 自面世后就非常流行,发展迅速,对C++C++语言形成了有力冲击。
语言形成了有力冲击。
语言形成了有力冲击。
Java Java Java 技术具技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC PC、数据中心、游、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,在全球云计算和移动互联网的产业环境下,Java Java 更具备了显著优势和广阔前景。
本游戏是一个基于java 的飞机大战游戏,利用Eclipse 平台实现经典的飞机大战游戏。
游戏主要涉及了游戏状态控制功能、游戏难度的调整、游戏界面绘画功能、玩家游戏控制功能,最终展示了游戏开发的基本开发过程和设计思路。
关键词:飞机大战;游戏;java ;Eclipse 平台Design and implementation of airplane wargame based on JavaAbstractLightning is the history of the development of computer games in the early one of the most classic game, often on a handheld game consoles, mobile phone and computer to see this this game. game. game. However, However, However, the the the previous previous previous common common common lightning lightning lightning game game game is is is two-dimensional two-dimensional two-dimensional plane, plane, plane, and and mostly in black and white, in the course of the computer can see lightning in color. Since Java is very popular after the launch, the rapid development of the C + + language to to form form form a a a strong strong strong impact. impact. impact. Java Java Java technology technology technology has has has excellent excellent excellent versatility, versatility, efficiency, platform portability portability and and and security, security, security, widely widely widely used used used in in in personal personal personal PC, PC, PC, data data data center, center, center, game game game consoles, consoles, consoles, scientific scientific supercomputers, supercomputers, cell cell cell phones phones phones and and and the the the Internet, Internet, Internet, also also also has has has the the the world's world's world's largest largest largest developer developer developer of of professional professional community . community . In In the the the world world world of of of cloud cloud cloud computing computing computing and and and mobile mobile mobile Internet Internet Internet industry industry environment, Java and more have a significant advantage and broad prospects. This game is a game based on the realization of Java lightning, lightning classic game based on Eclipse platform. The game is mainly involved in the game state control function, the the difficulty difficulty difficulty of of of the the the game, game, game, the the the game game game interface interface interface to to to adjust adjust adjust the the the drawing drawing drawing function, function, function, game game game player player control control function, function, function, finally finally finally shows shows shows the the the basic basic basic development development development process process process of of of game game game development development development and and design ideas. Keywords: lightning; game; Java; Eclipse platform 目 录录 摘 要要 .............................................................. i Abstract ............................................................ ii 1 1 引言引言引言 .............................................................. ..............................................................1 1.1 1.1 项目背景项目背景项目背景 ..................................................... .....................................................1 1.2 1.2 国内外研究现状国内外研究现状国内外研究现状 ............................................... ...............................................1 1.3 1.3 项目主要工作项目主要工作项目主要工作 ................................................. .................................................1 1.4 1.4 本文组织结构本文组织结构本文组织结构 ................................................. .................................................2 2 2 开发平台与开发技术开发平台与开发技术开发平台与开发技术 ................................................ ................................................3 2.1 Eclipse (3)2.2 Eclipse 平台平台.................................................. 3 2.3 Java (4)2.4 Java 语言的特点与优势语言的特点与优势......................................... 5 2.5 java 技术在游戏开发中的应用技术在游戏开发中的应用................................... 6 2.6 UML .......................................................... 8 3 3 飞机大战游戏模块设计飞机大战游戏模块设计飞机大战游戏模块设计 .............................................. ..............................................9 3.1 3.1 用户需求分析用户需求分析用户需求分析 ................................................. .................................................9 3.2 3.2 可行性分析可行性分析可行性分析 ................................................... ...................................................9 3.3 3.3 总体设计原则总体设计原则总体设计原则 ................................................ ................................................ 10 3.4 3.4 功能模块设计功能模块设计功能模块设计 ................................................ ................................................11 3.4.1 3.4.1 游戏状态控制功能游戏状态控制功能游戏状态控制功能 ...................................... ......................................11 3.4.2 3.4.2 游戏难度的调整游戏难度的调整游戏难度的调整 ........................................ ........................................11 3.4.3 3.4.3 游戏界面绘画功能游戏界面绘画功能游戏界面绘画功能 ...................................... ......................................11 3.4.4 3.4.4 玩家游戏控制功能玩家游戏控制功能玩家游戏控制功能 ...................................... ...................................... 11 3.5 3.5 游戏难点分析游戏难点分析游戏难点分析 ................................................ ................................................11 4 4 飞机大战功能实现飞机大战功能实现飞机大战功能实现 ................................................. .................................................12 4.1 4.1 游戏首页的实现游戏首页的实现游戏首页的实现 .............................................. ..............................................12 4.1.1 4.1.1 界面实现界面实现界面实现 .............................................. ..............................................12 4.1.2 4.1.2 流程图流程图流程图 ................................................ ................................................13 4.1.3 4.1.3 核心代码核心代码核心代码 .............................................. ..............................................14 4.2 4.2 游戏开始模块的实现游戏开始模块的实现游戏开始模块的实现 .......................................... ..........................................15 4.2.1 4.2.1 界面实现界面实现界面实现 .............................................. ..............................................15 4.2.2 4.2.2 流程图流程图流程图 ................................................ ................................................16 4.2.3 4.2.3 核心代码核心代码核心代码 .............................................. ..............................................17 4.3 4.3 发射子弹模块的实现发射子弹模块的实现发射子弹模块的实现 .......................................... ..........................................18 4.3.1 4.3.1 界面实现界面实现界面实现 .............................................. ..............................................18 4.3.2 4.3.2 流程图流程图流程图 ................................................ ................................................19 4.3.3 4.3.3 核心代码核心代码核心代码 .............................................. ..............................................20 4.4 4.4 积分模块的实现积分模块的实现积分模块的实现 .............................................. ..............................................22 4.4.1 4.4.1 界面的实现界面的实现界面的实现 ............................................ ............................................224.4.2 4.4.2 核心代码核心代码核心代码 .............................................. ..............................................23 4.5 4.5 碰撞逻辑碰撞逻辑碰撞逻辑 ..................................................26 4.5.1 4.5.1 碰撞画面的实现碰撞画面的实现碰撞画面的实现 ........................................ ........................................26 4.5.2 4.5.2 核心代码核心代码核心代码 .............................................. ..............................................27 4.6 4.6 游戏玩家与游戏玩家与BOSS 的血条的血条 .....................................28 4.6.1 4.6.1 玩家血条和玩家血条和BOSS 血条的实现血条的实现 ............................. .............................28 4.6.1 4.6.1 核心代码核心代码核心代码 .............................................. ..............................................29 4.7 4.7 游戏操作的实现游戏操作的实现游戏操作的实现 .............................................. ..............................................30 4.7.1 4.7.1 核心代码核心代码核心代码 .............................................. ..............................................30 5 5 系统测试系统测试系统测试 ......................................................... .........................................................31 5.1 5.1 测试的定义及其重要性测试的定义及其重要性测试的定义及其重要性 ........................................ ........................................31 5.1.1 5.1.1 测试的定义测试的定义测试的定义 ............................................ ............................................31 5.1.2 5.1.2 测试的重要性测试的重要性测试的重要性 .......................................... ..........................................31 5.2 5.2 测试实例的研究与选择测试实例的研究与选择测试实例的研究与选择 ........................................ ........................................31 5.3 5.3 测试结果测试结果测试结果 .................................................... ....................................................32 总结和展望总结和展望 .......................................................... ..........................................................33 参考文献参考文献 ............................................................ ............................................................ 34 致 谢谢 ............................................................35 外文原文外文原文 ............................................................ ............................................................36 中文翻译中文翻译 ............................................................ ............................................................421 1 引言引言1.1 1.1 项目背景项目背景90年代的我们,对小时候的一些经典街机游戏肯定是印象深刻,像年代的我们,对小时候的一些经典街机游戏肯定是印象深刻,像 “飞机大战”、“超级玛丽”、“坦克大战”等,这些游戏伴随了我们童年,怀旧经典,重温这些经典的游戏,我选择“飞机大战”作为设计的项目。
猜拳游戏java课程设计一、教学目标本课程的目标是让学生掌握猜拳游戏的基本Java编程技能。
通过本课程的学习,学生将能够理解并运用Java语言编写简单的猜拳游戏程序。
具体的教学目标如下:1.理解Java语言的基本语法和结构。
2.掌握Java中的条件语句和循环语句。
3.了解Java中的类和对象的概念。
4.能够使用Java编写简单的猜拳游戏程序。
5.能够运用Java中的条件语句和循环语句来实现游戏逻辑。
6.能够运用Java中的类和对象的概念来代码。
情感态度价值观目标:1.培养学生对编程的兴趣和热情。
2.培养学生解决问题的能力和创新精神。
3.培养学生团队合作和分享的意识。
二、教学内容本课程的教学内容主要包括Java语言的基本语法、条件语句、循环语句和类与对象的概念。
具体的教学内容如下:1.Java语言的基本语法:变量、数据类型、运算符、表达式等。
2.条件语句:if语句、if-else语句、switch语句等。
3.循环语句:for循环、while循环、do-while循环等。
4.类与对象的概念:类的定义、构造方法、成员变量和成员方法等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
具体的教学方法如下:1.讲授法:教师通过讲解和示例来传授Java语言的基本语法、条件语句和循环语句等知识。
2.讨论法:学生分组讨论猜拳游戏的设计和实现,促进学生之间的交流和合作。
3.案例分析法:分析实际的猜拳游戏案例,帮助学生理解类与对象的概念。
4.实验法:学生动手编写猜拳游戏程序,巩固所学的知识和技能。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选择一本适合学生水平的Java编程教材,作为学生学习的基本资源。
2.参考书:提供一些相关的Java编程参考书,供学生进一步学习和拓展。
3.多媒体资料:制作教学PPT和视频教程,帮助学生更好地理解和掌握知识。
前言Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。
就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。
于是改造了Oak,以“Java”的名称正式发布。
Java 编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心。
Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在 Java SE 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。
它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。
从而实现了“一次编译、到处执行”的跨平台特性。
不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
但在J2SE 发布后,Java 的执行速度有了大幅提升。
与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。
全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。
“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。
这与微软公司所倡导的注重精英和封闭式的模式完全不同。
Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。
户需求分析1.玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。
2.对玩家输入的数字进行判断大小,如果不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入,给出提醒以便玩家进一步选择。
3.玩家猜中时系统给出所用时间和游戏水平的判断,系统给出是否继续的提示及判断。
4.系统根据您猜数字的次数,自动计数.5.直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.2 开发环境分析MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。
它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。
在结构上,MyEclipse的特征可以被分为7类:1. JavaEE模型2. WEB开发工具3. EJB开发工具4. 应用程序服务器的连接器5. JavaEE项目部署服务6. 数据库服务7. MyEclipse整合帮助对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。
MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的JavaEE集成开发环境,支持代码编写、配置、测试以及除错。
该程序基于JDK和MyEclipse编写,选用MyEclipse是界面设计所需。
根据系统范围随机产生一个数字,可根据玩家选择给出不同的数字。
玩家输入所猜数字时给出与真实数字的大小比较。
在玩家猜中时,可给出其所用时间,并给出评价。
第一章绪论1.1 手机软件现状在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。
但是传统手机存在以下弊端:1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。
2. 传统手机访问互联网是通过W AP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。
而Java技术在无线应用方面的优势非常明显:1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。
2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI);3. Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。
基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。
1.2 游戏业务及J2ME概况虽然Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。
Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard(其结构示意图见图1-1)。
其中J2ME定位在消费性电子产品的应用上。
这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。
这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。
J2ME 在设计其规格的时候,遵循着“对各种不同的装置而造出一个单一的开发系统是没有意义的事”这个基本原则。
于是J2ME 先将所有的嵌入式装置大体上区分为两种:一种是运算功能有限、电力供应也有限的嵌入式装置(比方说PDA、手机);另外一种则是运算能力相对较佳、在电力供应上相对比较充足的嵌入式装置(比方说冷气机、电冰箱、电视机上盒(set-top box))。
21点游戏java课程设计一、课程目标知识目标:1. 掌握Java语言基础,包括变量定义、数据类型、运算符和条件语句;2. 学会使用Java面向对象编程,包括类的定义、对象的创建与使用;3. 理解21点游戏的规则,并能用Java编写出完整的游戏逻辑。
技能目标:1. 培养学生运用Java语言解决问题的能力,特别是逻辑思维和编程技巧;2. 提高学生面向对象编程的实践能力,使其能够独立设计和实现小型的应用程序;3. 培养学生通过编写代码来解决实际问题的能力,例如设计并实现21点游戏。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发其学习Java的热情;2. 培养学生的团队协作精神,使其在项目开发过程中学会沟通与协作;3. 培养学生面对困难时的耐心和毅力,使其在编程过程中保持积极的态度。
本课程针对高中年级学生,结合学科特点和教学要求,设计出具有实用性和趣味性的21点游戏Java课程。
通过本课程的学习,学生将能够掌握Java编程基础,提高编程实践能力,并在游戏中体验编程的乐趣,培养团队协作和解决问题的能力。
同时,课程目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. Java基础:- 变量定义、数据类型、常量与变量- 运算符、表达式、流程控制(if、switch、for、while)- 函数定义、调用、重载2. 面向对象编程:- 类的定义、属性、方法- 对象的创建、使用、生命周期- 封装、继承、多态3. 21点游戏规则与逻辑:- 游戏规则介绍- 游戏流程分析- 游戏逻辑实现(洗牌、发牌、计分等)4. Java编程实践:- 编写类和对象实现游戏功能- 设计用户界面与交互- 调试与优化代码教学内容根据课程目标进行科学性和系统性的组织,与教材相关章节紧密结合。
具体教学大纲如下:第1周:Java基础学习,掌握变量定义、数据类型、运算符等基本概念;第2周:学习流程控制,理解函数定义和调用;第3周:面向对象编程,了解类与对象的基本概念;第4周:深入学习封装、继承、多态等面向对象特性;第5周:介绍21点游戏规则,分析游戏流程;第6周:编写游戏逻辑,实现洗牌、发牌等基本功能;第7周:设计用户界面,实现用户与游戏的交互;第8周:课程总结,调试优化代码,展示作品。
java 课程设计猜拳游戏一、教学目标本节课的教学目标是使学生掌握Java猜拳游戏的基本原理和实现方法,通过编程实践提高学生的Java编程能力。
具体目标如下:知识目标:使学生了解Java猜拳游戏的基本概念,理解游戏的设计思路和实现原理;掌握Java编程的基本语法和常用API。
技能目标:培养学生运用Java编程解决实际问题的能力,提高学生的编程技巧和逻辑思维能力;培养学生团队协作和沟通的能力。
情感态度价值观目标:培养学生对编程的兴趣和热情,增强学生自信心,培养学生的创新精神和团队合作意识。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java猜拳游戏的基本概念和原理;2.Java猜拳游戏的界面设计和实现;3.Java猜拳游戏的逻辑设计和实现;4.Java编程的基本语法和常用API。
教学进度安排如下:1.课堂导入:介绍猜拳游戏的基本概念和原理,引导学生思考如何用Java实现猜拳游戏;2.课堂讲解:讲解Java编程的基本语法和常用API,引导学生学习并掌握相关知识;3.课堂实践:引导学生动手编写猜拳游戏,过程中给予个别辅导和指导;4.课堂总结:对学生的作品进行点评,总结猜拳游戏的实现方法和编程技巧。
三、教学方法本节课采用讲授法、讨论法和实验法相结合的教学方法:1.讲授法:用于讲解Java编程的基本语法和常用API,使学生掌握相关知识;2.讨论法:在课堂实践环节,引导学生分组讨论,共同解决问题,提高学生的团队协作和沟通能力;3.实验法:让学生动手编写猜拳游戏,培养学生的实际编程能力和创新精神。
四、教学资源本节课所需教学资源包括:1.教材:《Java编程基础》;2.参考书:《Java核心技术》;3.多媒体资料:PPT课件;4.实验设备:计算机。
以上教学资源将有助于实现本节课的教学目标,提高学生的学习效果。
五、教学评估本节课的评估方式包括以下几个方面:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,占总评的30%;2.作业:评估学生完成的猜拳游戏代码质量,包括代码规范、功能完整性等,占总评的40%;3.考试:期末进行Java编程考试,测试学生的综合编程能力,占总评的30%。
java编程小游戏课程设计一、课程目标知识目标:1. 学生能理解并掌握Java编程基础,包括数据类型、变量、运算符和简单控制流程。
2. 学生能运用面向对象编程思想,设计并实现游戏中的角色和物品类。
3. 学生能运用Java异常处理机制处理游戏中可能出现的错误。
技能目标:1. 学生能够独立设计并编写简单的Java小游戏,展示故事情节和互动性。
2. 学生通过项目实践,掌握使用集成开发环境(IDE)进行代码编写、调试和运行的能力。
3. 学生能够运用所学的Java知识解决实际编程问题,具备初步的编程调试技巧。
情感态度价值观目标:1. 学生通过游戏编程激发对计算机编程的兴趣,培养自主学习能力和创新思维。
2. 学生在团队协作中培养沟通能力和集体荣誉感,学会共同解决问题。
3. 学生通过编程实践,认识到编程对生活的影响,增强社会责任感。
课程性质:本课程为实践性强的Java编程课程,通过设计小游戏的方式,使学生在实践中掌握编程知识。
学生特点:学生具备一定的Java编程基础,对游戏有浓厚兴趣,喜欢动手实践。
教学要求:课程注重理论与实践相结合,鼓励学生主动探索,培养解决问题的能力。
教学过程中,关注学生个体差异,提供个性化指导。
通过课程学习,学生能够达到以上设定的知识、技能和情感态度价值观目标,为后续学习奠定基础。
二、教学内容本课程教学内容紧密结合课程目标,确保学生能够系统地学习和掌握Java编程小游戏的设计与开发。
1. Java基础复习:回顾课本中数据类型、变量、运算符、控制流程等内容,为游戏编程打下基础。
- 教材章节:第1章 Java语言概述,第2章 基本数据类型与表达式,第3章 流程控制。
2. 面向对象编程:学习类与对象的概念,掌握封装、继承、多态等特性,应用于游戏角色和物品的设计。
- 教材章节:第4章 类与对象,第5章 继承与多态。
3. 异常处理:学习Java异常处理机制,编写健壮的游戏代码。
- 教材章节:第6章 异常处理。
J a v a程序设计项目1.项目背景为了提高学生动手能力,增加学生实践的机会,某软件公司实习单位要求学生5-6人组成开发团队进行Java程序项目开发,参考自己团队的实力与客户的要求,使用Java语言开发某一项目,此项目可以是应用程序,也可以是游戏开发等,项目名称自拟。
2.硬件资源和软件资源(1)每组配备联网PC台,智能手机一部(带有手机数据线)HP打印机一台。
(2)eclipse-SDK-3.6.1-win32软件开发程序(含有eclipseme插件)、SUNWTK 无线开发包或Symbian_3_SDK_v0_9等手机开发包。
3.实验室功能需求(1)实现学生机和教师机器(服务器)进行通信,相互共享资源。
(2)教师机器(服务器)上安装一台打印机,实现学生机可以共享打印。
(3)实现教师机器(服务器)连接和访问Internet。
(4)实现每一台学生机器访问Internet。
(5)要求为每一项目组学生机和教师机器分配一个标识,即学生机器的机器名为ST1~ST10,教师机器名为Server。
4.项目实施要求(1)要求各项目小组拿出详细的某某Java程序设计项目报告书(具体项目规划书格式参考附表一),关键步骤要有相应的截图。
(2)要求项目组长向各小组讲解与演示自己小组的项目成果,组长小组成员要熟练的解释与分析自己负责编写的Java代码或项目分工成果。
(3)最后提交用小组命名的文件夹,其中包括开发所用的所有资料与项目成果。
附表一:雷霆战机项目报告书一、项目概述本项目为一个Java游戏,是一个基于J2ME平台的飞机射击类游戏。
二、项目开发团队三、所用Java相关知识点用了java的MIDP2.0的游戏类、GameCanvas类、游戏中的多线程应用、游戏引擎框架结构等等。
四、项目需求分析1.游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。
一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。
因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。
2.游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在MIDP2.0中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。
3.玩家飞机的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的智能性;敌人飞机的运行算法也要进行相关的设置,已免游戏过于简单。
4.对于双方发射的子弹应该赋予不同的速度,同时,程序应该设定敌人飞机的子弹不与敌人的飞机进行碰撞检测,已增加游戏的可玩性。
5.双方的飞机在前进时也需要考虑到是否碰撞到对方飞机,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。
每一次刷新页面、每前进一步都需要进行相关的碰撞检测。
6.为了增加界面的美观,在程序中添加了白云。
由于手机屏幕大小有限,所以白云的数量和出现的位置要经过相关的设置,才能实现白云不规则出现的效果。
7.游戏的地图不可能通过绘图来解决。
否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去手机上程序的原则和Java的优势。
8.Java是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。
除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。
9.游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的重要部分。
良好的用户界面更是吸引用户的硬指标,相关的美术构图和人性化设置也需要有一定的考虑。
五、类设计(包含结构图)5.1游戏进入前的选择每个MIDlet程序都必须有一个主类,该类必须继承自MIDlet。
它控制着整个程序的运行,并且可以通过相应函数从程序描述文件中获取相关的信息。
该类中拥有可以管理程序的创建、开始、暂停(手机中很可能有正在运行程序却突然来电的情况,这时应进入暂停状态。
)、结束的函数。
本程序主类为lzhhdm,并实现接口CommandLIstener。
图5-1游戏背景介绍首先显示的是游戏的背景介绍(图5-1),为此,在类lzhhdm定义Form类对象a,在startApp()函数中判断isSplash是否为真,如果为真的话,将创建Form类的实例a,并且调用append()方法在表单上放置StringItem类的实例以显示游戏背景信息。
使用语句ok=newCommand("ok",Command.OK,1);实例化Command类对象ok。
调用addCommand()命令建立ok命令与Form之间的关联,调用setCommandListener()命令使Form与CommandListener建立关联。
调用Displayable的seturrent()函数显示背景介绍窗口。
当玩家点击ok后将调用display.setCurrent(menuscreen)以显示游戏菜单menuscreen(图5-2)。
图5-2游戏的菜单类menuscreen继承自Canvas类,并实现接口Runnable和CommandListener。
在类menuscreen中定义了lowColor和highColor、highBGColor三个整型变量及布尔型变量co。
其中lowColor赋值为0x000000FF,代表兰色,higColor赋值为0x00FF0000,代表红色,highBGColor赋值为0x00CCCCCC,代表兰灰色,即背景条。
当玩家按住上或下键时,在函数keyPressed(intcode)中的整型变量menuIndex相应的减1或加1,相应的,在paint()函数中会根据menuIndex绘制选项是否被选中。
在函数run()中,如果co为真,则不停的repaint(),设置co的意义在于,当进入游戏主画面后,co赋值为false,以终止绘制选项的repaint(),提高游戏速度。
当移动选项条到某项,并点击ok时,在commandAction()方法中根据menuIndex的值判断选择了哪个选项,列如当选择“关于”时,将调用lzhhdm类中的renwuShow()方法以显示”关于”界面(图5-3),在renwuShow()方法中,Form类对象a=null,表示清空Form,并重新调用用append()方法在表单上放置StringItem类的实例以显示游戏关于信息,“帮助“界面的显示与”关于“界面相同,只不过调用的是helpShow()方法。
图5-3关于界面5.2mybullets类在介绍游戏主类gameScreen类之前,应该先简要说明一下玩家子弹类mybullets类,实际上,mybullets类是应该删除的,其要实现的功能应该放在gameScreen类中,但是由于设计游戏的过程也是一个学习的过程,而在当时,我并没有意识到这一点。
Mybullets类继承自Sprite类,以实现玩家子弹的相关功能。
首先,创建子弹状态数组privateint[][]bullets,其中,[i][0]代表子弹的X坐标,[i][1]代表子弹的Y坐标,[i][2]代表子弹Y方向速度,[i][3]代表子弹存活状态(由于此类是在早期设计的,而之后子弹存活状态使用了子弹射程作为标志位,所以其并没有起到作用)。
类中定义的方法setfirstposition()起到定义玩家子弹发射坐标的作用(此方法在设计时起到的作用是消除每按一次开火玩家子弹位置就重新定位这个BUG,但是,这个BUG完全可以用设置标志位的方法消除)。
方法newposition()实现的功能为更新玩家的子弹位置,并且检测玩家子弹与普通敌人的碰撞及记录玩家战果(更新子弹位置的功能可以由使用move()加设置标志位的方法取代;由于设计这个类的时候并没有考虑到添加BOSS等,所以在此检测碰撞,但添加BOOS等功能后,此处的检测完全可以和飞机对飞机等的碰撞检测封装在同一个方法中)。
mybullets类在gameScreen中建立了对象数组huokebullet[9],代表玩家所能发射的9发子弹。
5.3游戏逻辑及gameScreen 类是游戏的主类,决定着敌人何时出现,控制着敌人出现的方法,判断敌人及玩家是否被击中等。
它运行在独立的线程中,以恒定的频率刷新画面。
本程序设置为1/20秒。
其主逻辑如图4-4所示。
5.3.1gameScreen 类所实现的功能gameScreen 类要实现地图的滚动、敌人飞机的相关属性、玩家的相关属性等功能。
gameScreen 类包括了LayerManager ,这样所有静态和动态的图象都不需要手动刷新,只需要在LayerManager 中加入所有的需要控制的精灵,在统一由LayerManager 刷新即可,因此,在gameScreen 中创建LayerManager 的对象lm ,并在构造函数中实例子化。
其他精灵类的对象如敌人飞机、玩家飞机、玩家飞机的子弹、敌人的子弹、BOSS 及BOSS 所属的子弹都需在gameScreen()类中建立相应的对象,并在构造喊数中实例化,且由lm.appned()方法添加到LayerManager 类对象lm 中。
4.3.2地图的创建由于手机存储空间的限制,不可能将整张地图完整地存储在手机中,为了节约空间,往往提出地图中相同的图片组成一张PNG 格式的图片,然后象拼图一样拼出地图来,专业的游戏设计者往往自己写一个地图编辑器,以使拼图过程不是那么痛苦。
图5-4gameScreen 类主要关系流程图创建地图就需要使用TiledLayer。
TiledLayer指的是由一块一块类似用瓷砖拼凑起来的画面。
地图实际即为TiledLayer的一个对象。
先利用TiledLayer 的构造函数建立TiledLayer,根据构造函数的参数可以给定Cell数组的大小,并且地图图片切割成等尺寸的画面,并调用setCell()地图图片如图5-5所示。
因此,创建一个返回TtiledLayer的方法createBackGround(),以便在gameScreen()的构造函数中调用。
在方法中,定义整型数组map1[]以存储Cell 的索引值。
并使用tiledLayer.setCell(column,row,map1[i])设定TtiledLayer 的内容,以形成地图。
其中i的值由循环for(inti=0;i<map1.length;i++)取得,column由语句column=i%15取得、行由row=(i-column)/15取得。