java坦克大战实训步骤与过程
- 格式:doc
- 大小:12.58 KB
- 文档页数:1
JAVA程序开发课程设计课程大作业专业:软件工程班级:14软工2学号: ***********名:***项目名称:坦克大战一、需求分析:1.基本功能:(1)我方坦克能上下移动(2)敌方坦克能自由移动(3)我方坦克能开火(4)敌方坦克能自由开火(5)子弹打中我方,会减血,我方打中敌方,敌死。
敌打敌不会受伤(6)有血条,主界面2.扩展功能(1)用图形来表示坦克和炮弹(2)用图形来表示中子弹后的爆炸效果(3)地图上存在金属墙,我方坦克和子弹不能穿过(4)地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5)地图上会随机出现加血包(6)我方坦克遇到加血包,会增加生命(7)游戏开始时,会启动背景音乐(8)我方坦克死亡时,提示游戏结束二、系统设计:1. BgMusic(1)主要功能:添加背景音乐TankMap类通过调用该类,并读取BgMusic包下面的背景音乐文件(2)成员属性:1)filename,用于记录读取到的文件名,并处理2)nBytesRead,这是缓存,用于读取音乐文件,缓存下来(3)成员方法:1)run,播放背景音乐2)构造方法BgMusic,将读取到的文件名,存储到成员属性filename中2. Blood(1)主要功能:地图中添加血包(2)成员属性:1)x,y,width,height,血包的位置以及宽高2)rpos_x,rpos_y,用于记录血包移动后的位置3)tm,调用TankMap类,并在地图中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于记录血包的存活6)step,血包的步长7)stepMove,血包走过总的步长(3)成员方法:1)Blood,构造方法,将血包放到地图中2)draw,画血包3)move,血包的移动4)getRect,获取血包的位置3. Tank(1)主要功能:地图中添加我方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)isLive,我方坦克是否存活5) isgood,坦克属于哪一方6)life,我方坦克的初始生命值7)step,使用Blood类,血包随机出现8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)checkDirection,确定用户单击的方向键,修正坦克即将移动方向4)fire,发射子弹5)getRec,返回坦克当前位置,便于判断是否与敌方坦克或子弹重叠6)stay,坦克撞墙的处理7)eat,我方坦克吃血包4.EnemyTank(1)主要功能:地图中添加敌方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)fire,发射子弹4.Explor(1)主要功能:子弹打中坦克,发生爆炸效果(2)成员属性:1)x,y,坦克出现的位置2)tm,调用TankMap类,并在地图中放爆炸3)islive,我方坦克是否存活(3)成员方法:1)draw,绘制爆炸2)Explor,爆炸的构造方法5.Help(1)主要功能:给用户游戏帮助(2)成员属性:1)help,将帮助的文字存放在字符串中(3)成员方法:1)getHelpDialog,调用帮助6.Shell(1)主要功能:设计子弹(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,子弹的宽高和x,y上的移动速度2)x,y,direction,子弹出现的位置和方向3)tm,调用TankMap类,并在地图中放子弹4)isLive,子弹是否打中坦克5)isgood,是否是我方6)Image,加载子弹图片(3)成员方法:1)draw,绘制子弹2)move,根据移动方向,移动坦克,得到子弹的移动3)getRec,获取坦克的位置4)hitTanks,子弹打坦克5)hitWalls,子弹打墙7.Wall(1)主要功能:给地图添加墙(2)成员属性:1)x,y,w,h,墙的位置和宽度高度2)tc,地图(3)成员方法:1)draw,画墙2)getRect,获取墙的位置8.TankMap(1)主要功能:地图(2)成员属性:1)MAPWIDTH,MAPHEIGHT,地图的宽高2)t,我方坦克3)bufferImage,缓冲,用于解决闪屏4)forestimage,草丛5)shells,EnemyTank,Blood,Explors泛型6)enemyCount,敌方坦克数量7)w1,w2,不可穿过的墙(3)成员方法:1)init,初始化地图2)paint,画血包,地图,坦克等3)addBloods,加血4)update,解决闪屏三、功能实现:1.功能1:我方,敌方坦克上下移动并开火(1)操作说明游戏启动时,按上下左右键可以是我方坦克移动,按F键可以开火(2)关键代码//绘制坦克public void draw(Graphics g){//根据不同方向加载不同图片,读取的时候需要处理异常try{switch(direction){case STOP:case UP:upimage=ImageIO.read(new File("src/images/up.gif"));oldimage=upimage;g.drawImage(upimage, x, y, null);break;case RIGHT:rightimage=ImageIO.read(new File("src/images/right.gif"));oldimage=rightimage;g.drawImage(rightimage, x, y, null);break;case DOWN:downimage=ImageIO.read(new File("src/images/down.gif"));oldimage=downimage;g.drawImage(downimage, x, y, null);break;case LEFT:leftimage=ImageIO.read(new File("src/images/left.gif"));oldimage=leftimage;g.drawImage(leftimage, x, y, null);break;}}catch (IOException e) {};g.drawImage(oldimage, x, y, null);move(direction);}//根据移动方向,移动坦克,不允许坦克移出地图public void move(Direction d){/*** 记录坦克原来的位置,撞墙可以回到原位置*/oldX=x;//记录坦克原来的位置,撞墙可以回到原位置oldY=y;if(d == Direction.STOP){}else if(d == Direction.UP){y-=yspeed;if(y<=HEIGHT)y=HEIGHT;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){x-=xspeed;}2.功能2:我方开火,敌方会爆炸,然后死亡。
辽宁工业大学《Java语言程序设计》课程设计(论文)题目:坦克游戏院(系):软件学院专业班级:软件工程133班学号:学生姓名:指导教师:翟宝峰参考网址 : 教师职称:副教授起止时间:2014.6.9——2014.6.20课程设计(论文)任务及评语院(系):软件学院教研室:软件教研室目录第1章课程设计目的与要求 (1)1.1设计目的 (1)1.2实验环境 (1)1.3预备知识 (1)1.4设计要求 (1)第2章课程设计内容 (2)2.1 课题描述 (2)2.2 系统设计 (3)2.2.1功能分析 (3)2.2.2面向对象设计 (4)2.2.2类成员描述 (5)2.3程序实现 (6)2.3.1源码分析 (6)2.3.2运行结果 (13)第3章总结 (15)参考文献 (16)第1章课程设计目的与要求1.1设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握JAVA语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1.2实验环境硬件要求能运行Windows 操作系统的微机系统。
JAVA语言应用程序开发软件使用:VJAVA 系统,或其他JAVA语言应用程序开发软件。
毕业设计开题报告计算机科学与技术基于Java的坦克大战游戏的设计与实现一、综述本课题国内外研究动态,说明选题的依据和意义本课题国内外动态:最早的电脑游戏可以追溯到1972年,WillCrowther用当时最流行的DEC的PDP-10主机编写了一段简单的FORTRAN程序。
在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。
这个程序在后来被认为是最早的电脑游戏程序。
而如今,游戏产业已经发展成为一个拥有巨大利润的成熟产业。
从上世纪60年代初的街机,到六七十年代之间的家用游戏机,再到八九十年代的掌上游戏机,日本经过30多年的发展,终于把电子游戏培育成第一时尚娱乐产业,垄断全球业界长达10余年。
对于日本来说,电玩业已是国家经济的重要支柱之一,在GNP中占有1/5的举足轻重地位。
日本游戏业在最辉煌的1998年,曾经占领全球电子游戏市场硬件90%以上,软件50%以上。
根据美国市场调查公司NPD Group调查统计,美国2004年游戏总销售金额(包括家用、掌上型主机及软件)为99亿美元,占了全球游戏市场的45%。
其中游戏软件销售的具体数字是:视频游戏软件的销售额达52亿美元(1.6亿套),PC游戏软件销售额达11亿美元(4500万套),掌机游戏销售额达10亿美元(4230万套)。
2004年一共大约有2.48亿套游戏售出。
据估计,美国每个家庭平均购买过2部游戏。
目前中国游戏市场已经成为国际公认最具发展潜力的市场,产业产值每年都以近50%的增长率高速增长。
游戏行业虽然在我国起步晚,但发展的势头迅猛。
国家信息产业部已将游戏产品的技术开发列为“863计划”重点项目之一。
游戏编程涉及图形图像、实时输入获取、逻辑控制、音乐音效编程、人工智能等方面。
不同于一般的图形应用程序,游戏图像对硬件有着严格甚至于苛刻的要求。
游戏开发人员总是想着如何发挥现有的硬件的极限性能以实现更华丽更逼真的游戏图形效果。
JAVA实现经典游戏坦克⼤战的⽰例代码⽬录前⾔主要设计功能截图代码实现总结前⾔⼩时候⼤家都玩过坦克⼤战吧,熟悉的旋律和丰富的关卡陪伴了我们⼀整个寒暑假,还记得传说中的经典坦克⼤战吗?那些怀旧的记忆,伴随着我们⼀起⾛过来的经典坦克⼤战,刚开始那战战兢兢,屡屡被敌⼈坦克击毁的情景历历在⽬。
现在好了,再也不⽤担⼼敌⼈坦克了,可以横冲直撞,横扫敌⼈坦克了。
快哉《坦克⼤战》游戏以坦克战⽃为主题,⽤java语⾔实现,采⽤了swing技术进⾏了界⾯化处理,设计思路⽤了⾯向对象思想。
主要需求可以⽣成不同的地图,消灭地图上的所有坦克为胜利;可以设置关卡地图,不断增加难度。
主要设计1、要有难度关卡:第⼀关,第⼆关,第三关,第四关,第五关;第⼀关地图最简单,第五关地图最难;2、坦克要有⾎条,打多次才会死3、地图要我有我⽅坦克四辆(相当于4条命)和多辆敌⽅坦克4、我⽅坦克的炮弹数量是固定的,设置为5005、地图右边显⽰基本信息6、地图上要在砖块,铁块,河流功能截图游戏开始页⾯代码实现窗⼝布局public class GameFrame extends JFrame {/*** serialVersionUID*/private static final long serialVersionUID = -1176914786963603304L;public GameFrame() {super();this.setSize(800, 700);this.setTitle("坦克⼤战");this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setResizable(false);// 显⽰器屏幕⼤⼩Dimension screenSizeInfo = Toolkit.getDefaultToolkit().getScreenSize();int leftTopX = ((int) screenSizeInfo.getWidth() - this.getWidth()) / 2;int leftTopY = ((int) screenSizeInfo.getHeight() - this.getHeight()) / 2;// 设置显⽰的位置在屏幕中间this.setLocation(leftTopX, leftTopY);}}地图渲染核⼼算法@Servicepublic class PaintService {@Autowiredprivate GameContext context;private Brick rightBrick = new Brick(700, 50);private Iron rightIron = new Iron(700, 50);private Water rightWater = new Water(700, 50);/*** 画出东西(包括坦克、障碍物。
MyTankGame2.javapackage test;import javax.swing.*;import java.awt.*;import java.awt.event.*;//import java.io.*;import java.util.*;class MyTankGame2 extends JFrame implements ActionListener {MyPanel mp=null;//定义一个开始的面板MyStartPanel msp=null;//做出我需要的菜单JMenuBar jmb=null;//开始游戏JMenu jm1=null;JMenuItem jmi1=null;//退出系统JMenuItem jmi2=null;//存盘退出JMenuItem jmi3=null;JMenuItem jmi4=null;public static void main(String[] args){//System.out.println("Hello World!");MyTankGame2 mtg=new MyTankGame2();}//构造方法public MyTankGame2(){//创建菜单及菜单选项jmb=new JMenuBar();jm1=new JMenu("游戏(G)");//设置助记符jm1.setMnemonic('G');jmi1=new JMenuItem("开始新游戏(N)");jmi2=new JMenuItem("退出游戏(E)");jmi3=new JMenuItem("存盘退出游戏");jmi4=new JMenuItem("继续上局游戏");jmi4.addActionListener(this);jmi4.setActionCommand("continueGame");jmi3.addActionListener(this);jmi3.setActionCommand("saveExit");jmi2.setMnemonic('E');//对jmi1进行响应jmi1.addActionListener(this);jmi1.setActionCommand("newGame");jmi2.addActionListener(this);jmi2.setActionCommand("exit");jm1.add(jmi1);jm1.add(jmi2);jm1.add(jmi3);jm1.add(jmi4);jmb.add(jm1);msp=new MyStartPanel();Thread t=new Thread(msp);t.start();this.setJMenuBar(jmb);this.add(msp);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(600,450);this.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {//对用户不同的点击进行不同的处理if(e.getActionCommand().equals("newGame")){mp=new MyPanel("newGame");Thread t=new Thread(mp);t.start();//先删除旧的面板this.remove(msp);this.add(mp);//注册监听this.addKeyListener(mp);//显示this.setVisible(true);}else if(e.getActionCommand().equals("exit")){//保存击毁敌人的数量Recorder.keepRecording();System.exit(0);}//对存盘退出做处理else if(e.getActionCommand().equals("saveExit")){//工作Recorder re=new Recorder();re.setEts(mp.ets);//保存击毁敌人的数量和敌人的坐标re.keepRecAndEnemyTank();//退出System.exit(0);}else if(e.getActionCommand().equals("continueGame")){ //mp=new MyPanel("con");//mp.flag=;Thread t=new Thread(mp);t.start();//先删除旧的面板this.remove(msp);this.add(mp);//注册监听this.addKeyListener(mp);//显示this.setVisible(true);}}}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.yellow);//开关信息的字体Font myFont=new Font("华文新魏",Font.BOLD,30);g.setFont(myFont);g.drawString("stage:1", 150, 140);}}@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){//休眠try {Thread.sleep(100);} catch (Exception e) {// TODO: handle exception}times++;//重画this.repaint();}}}//我的面板class MyPanel extends JPanel implements KeyListener,Runnable {//定义我的坦克Hero hero=null;//判断继续上局还是新游戏//定义敌人的坦克组Vector<EnemyTank> ets=new Vector<EnemyTank>();Vector<Node> nodes=new Vector<Node>();//定义炸弹集合Vector<Bomb> bombs=new Vector<Bomb>();int enSize=5;//定义三张图片Image image1=null;Image image2=null;Image image3=null;//构造方法public MyPanel(String flag){//恢复记录Recorder.getRecording();hero=new Hero(30,231);if(flag.equals("newGame")){//初始化敌人的坦克for(int i=0;i<enSize;i++){//创建一辆敌人的坦克对象EnemyTank et=new EnemyTank((i+1)*50,0);et.setColor(0);et.setDirect(2);//将MyPanel的敌人坦克向量交给该敌人坦克et.setEts(ets);//启动敌人的坦克Thread t=new Thread(et);t.start();//给敌人的坦克添加一颗子弹Shot s=new Shot(et.x+10, et.y+30, 2,1);et.ss.add(s);new Thread(s).start();ets.add(et);//加入}}else{nodes=new Recorder().getNodesAndEnNums();//初始化敌人的坦克for(int i=0;i<nodes.size();i++){Node node=nodes.get(i);//创建一辆敌人的坦克对象EnemyTank et=new EnemyTank(node.x,node.y);et.setColor(0);et.setDirect(node.direct);//将MyPanel的敌人坦克向量交给该敌人坦克et.setEts(ets);//启动敌人的坦克Thread t=new Thread(et);t.start();//给敌人的坦克添加一颗子弹Shot s=new Shot(et.x+10, et.y+30, 2,1);et.ss.add(s);new Thread(s).start();ets.add(et);//加入}}/*try {image1=ImageIO.read(new File("/bomb_1.gif"));image2=ImageIO.read(new File("/bomb_2.gif"));image3=ImageIO.read(new File("/bomb_3.gif"));} catch (Exception e) {e.printStackTrace();// TODO: handle exception}*///播放开战声音AePlayWave apw=new AePlayWave("F:\\myjava\\day9\\坦克大战\\TankGamae13\\src\\111.wav");apw.start();//初始化图片image1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource( "/bomb_1.gif"));image2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource( "/bomb_2.gif"));image3=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource( "/bomb_3.gif"));}//画出提示信息public void showInfo(Graphics g){//画出提示信息坦克(该坦克不参与战斗)this.drawTank(100, 320, g, 0, 0);g.setColor(Color.black);g.drawString(Recorder.getEnNum()+"", 128, 343);this.drawTank(165, 320, g, 0, 1);g.setColor(Color.black);g.drawString(Recorder.getMyLife()+"", 195, 343);//画出玩家的总成绩g.setColor(Color.black);Font f=new Font("宋体",Font.BOLD,20);g.setFont(f);g.drawString("您的总成绩", 410, 25);this.drawTank(420, 60, g, 0, 0);g.setColor(Color.black);g.drawString(Recorder.getAllEnNum()+"", 455, 80);}//重写paint函数public void paint(Graphics g){super.paint(g);g.fillRect(0,0,400,300);//画出提示信息this.showInfo(g);//画出自己的坦克if(hero.isLive){this.drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),1);}//从ss中取出每一颗子弹并绘制for(int i=0;i<hero.ss.size();i++){Shot myShot =hero.ss.get(i);//画出子弹if(myShot!=null&&myShot.isLive==true){g.draw3DRect(myShot.x, myShot.y, 1, 1, false);}if(myShot.isLive==false){//从ss中删除掉该子弹hero.ss.remove(myShot);}}//画出炸弹for(int i=0;i<bombs.size();i++){Bomb b=bombs.get(i);if(b.life>6){g.drawImage(image1, b.x, b.y, 30, 30,this);}else if(b.life>3){g.drawImage(image2, b.x, b.y, 30, 30,this);}else{g.drawImage(image3, b.x, b.y, 30, 30,this);}//让b的生命值减小b.lifeDown();if(b.life==0){//把炸弹从向量中去掉bombs.remove(b);}}//画出敌人的坦克for(int i=0;i<ets.size();i++){ EnemyTank et=ets.get(i);if(et.isLive){this.drawTank(et.getX(),et.getY(), g, et.getDirect(), 0);//顺便画出敌人的子弹for(int j=0;j<et.ss.size();j++){//取出子弹Shot enemyShot=et.ss.get(j);if(enemyShot.isLive){g.draw3DRect(enemyShot.x, enemyShot.y, 1, 1, false);}else{//如果死亡了,就从Vextor中删除掉et.ss.remove(enemyShot);}}}}}//判断我的子弹是否会击中敌人的坦克public void hitEnemyTank(){//判断是否会击中for(int i=0;i<hero.ss.size();i++){//取出子弹Shot myShot=hero.ss.get(i);//判断子弹是否有效if(myShot.isLive){//取出每一个敌人坦克与之匹配for(int j=0;j<ets.size();j++){//取出坦克EnemyTank et=ets.get(j);if(et.isLive){if(this.hitTank(myShot, et)){ //减少敌人数量Recorder.reduceEnNum();//增加我的记录Recorder.addEnEnum();}}}}}}//我是否被击中public void hitMe(){//取出每一个敌人的坦克for(int i=0;i<this.ets.size();i++){//取出坦克EnemyTank et=ets.get(i);//取出每颗子弹for(int j=0;j<et.ss.size();j++){//取出子弹Shot enemyShot=et.ss.get(j);if(hero.isLive){if(this.hitTank(enemyShot, hero)){//待写}}}}}//画出一个专门判断子弹是否击中敌人坦克的函数public boolean hitTank(Shot s ,Tank et){boolean b2=false;//判断该坦克的方向switch(et.direct){//敌人坦克的方向是向上或者向下case 0:case 2:if(s.x>et.x&&s.x<et.x+20&&s.y>et.y&&s.y<et.y+30){//击中//子弹死亡s.isLive=false;//敌人坦克死亡et.isLive=false;b2=true;//System.out.println("hytfyfrujyg");//创建一颗炸弹放入VectorBomb b=new Bomb(et.x, et.y);bombs.add(b);}break;case 1:case 3:if(s.x>et.x&&s.x<et.x+30&&s.y>et.y&&s.y<et.y+20){//击中//子弹死亡s.isLive=false;//敌人坦克死亡et.isLive=false;b2=true;Bomb b=new Bomb(et.x, et.y);bombs.add(b);}break;}return b2;}//画出坦克的函数(扩展)public void drawTank(int x,int y,Graphics g,int direction,int type) {//判断类型switch(type){case 0:g.setColor(Color.CYAN);break;case 1:g.setColor(Color.yellow);break;}//判断方向switch(direction){//向上走case 0://g.setColor(Color.CYAN);//画出我的坦克(到时再封装成一个函数)//1.画出左边的矩形g.fill3DRect(x,y,5,30,false);//2.画出右边边的矩形g.fill3DRect(x+15,y,5,30,false);//3画出中间的矩形g.fill3DRect(x+5,y+5,10,20,false);//4画圆形g.fillOval(x+5,y+10,10,10);//5.画出线g.drawLine(x+10,y+15,x+10,y);break;case 1://向右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;case 2://向下g.fill3DRect(x,y,5,30,false);//2.画出右边边的矩形g.fill3DRect(x+15,y,5,30,false);//3画出中间的矩形g.fill3DRect(x+5,y+5,10,20,false);//4画圆形g.fillOval(x+5,y+10,10,10);//5.画出线g.drawLine(x+10,y+15,x+10,y+30);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, y+10);break;}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Override//w上,s下,a左,右边public void keyPressed(KeyEvent e) {// TODO Auto-generated method stubif(e.getKeyCode()==KeyEvent.VK_W){//设置我的坦克的方向上this.hero.setDirect(0);if(this.hero.y>0){this.hero.moveUp();}}else if(e.getKeyCode()==KeyEvent.VK_D){//设置我的坦克的方向右边this.hero.setDirect(1);if(this.hero.x<370){this.hero.moveRight();}}else if(e.getKeyCode()==KeyEvent.VK_S){//设置我的坦克的方向 xia边this.hero.setDirect(2);if(this.hero.y<=271){this.hero.moveDown();}}else if(e.getKeyCode()==KeyEvent.VK_A){//设置我的坦克的方向左边this.hero.setDirect(3);if(this.hero.x>0){this.hero.moveLeft();}}if(e.getKeyCode()==KeyEvent.VK_K){//玩家按了一个k键,开火if(this.hero.ss.size()<=5){this.hero.shotEnemy();}}//必须用repaintPanelthis.repaint();}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub }@Overridepublic void run() {// TODO Auto-generated method stub//每隔100毫秒去重画while(true){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.hitEnemyTank();this.hitMe();//重绘this.repaint();}}}Members.javapackage test;import java.io.*;import java.util.Vector;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;class AePlayWave extends Thread {private String filename;public AePlayWave(String wavfile) {filename = wavfile;}public void run() {File soundFile = new File(filename);AudioInputStream audioInputStream = null;try {audioInputStream = AudioSystem.getAudioInputStream(soundFile);} catch (Exception e1) {e1.printStackTrace();return;}AudioFormat format = audioInputStream.getFormat();SourceDataLine auline = null; info = new (SourceDataLine.class, format);try {auline = (SourceDataLine) AudioSystem.getLine(info);auline.open(format);} catch (Exception e) {e.printStackTrace();return;}auline.start();int nBytesRead = 0;byte[] abData = new byte[512];try {while (nBytesRead != -1) {nBytesRead = audioInputStream.read(abData, 0, abData.length);if (nBytesRead >= 0)auline.write(abData, 0, nBytesRead);}} catch (IOException e) {e.printStackTrace();return;} finally {auline.drain();auline.close();}}}class Node//恢复点{int x,y,direct;public Node(int x,int y,int direct){this.x=x;this.y=y;this.direct=direct;}}//记录类,同时也可以保存一些设置class Recorder{//记录每关有多少敌人private static int enNum=5;//设置我有多少可用的人private static int myLife=3;//记录总共消灭了多少敌人private static int allEnNum=0;//从文件中恢复记录点static Vector<Node> nodes=new Vector<Node>();private static FileWriter fw=null;private static BufferedWriter bw=null;private static FileReader fr=null;private static BufferedReader br=null;private Vector <EnemyTank> ets=new Vector<EnemyTank>();public Vector<EnemyTank> getEts() {return ets;}public void setEts(Vector<EnemyTank> ets) {this.ets = ets;}//完成读取任务public Vector<Node> getNodesAndEnNums(){try {fr=new FileReader("F:\\myRecording.txt");br=new BufferedReader(fr);String n="";//先读取第一行n=br.readLine();allEnNum=Integer.parseInt(n);while((n=br.readLine())!=null){String []xyz=n.split(" ");Node node=new Node(Integer.parseInt(xyz[0]),Integer.parseInt(xyz[1]),Integer.parseInt(xyz[2]));nodes.add(node);}} catch (Exception e) {e.printStackTrace();// TODO: handle exception}finally{try {br.close();fr.close();} catch (Exception e2) {// TODO: handle exception}}return nodes;}//保存击毁敌人坦克的数量和敌人坦克的坐标,方向public void keepRecAndEnemyTank(){try {//创建fw=new FileWriter("F:\\myRecording.txt");bw=new BufferedWriter(fw);bw.write(allEnNum+"\r\n");//保存当前还活着的坐标和方向for(int i=0;i<ets.size();i++){//取出第一个坦克EnemyTank et=ets.get(i);if(et.isLive){String record=et.x+" "+et.y+" "+et.direct;//写入到文件bw.write(record+"\r\n");}}} catch (Exception e) {// TODO: handle exception}finally{//关闭流try {bw.close();fw.close();} catch (Exception e2) {// TODO: handle exception}}}//从文件中读取记录public static void getRecording(){try {fr=new FileReader("F:\\myRecording.txt");br=new BufferedReader(fr);String n=br.readLine();allEnNum=Integer.parseInt(n);} catch (Exception e) {e.printStackTrace();// TODO: handle exception}finally{try {br.close();fr.close();} catch (Exception e2) {// TODO: handle exception}}}//把玩家击毁敌人的坦克数量保存到文件中public static void keepRecording(){try {//创建fw=new FileWriter("F:\\myRecording.txt");bw=new BufferedWriter(fw);bw.write(allEnNum+"\r\n");} catch (Exception e) {// TODO: handle exception}finally{//关闭流try {bw.close();fw.close();} catch (Exception e2) {// TODO: handle exception}}}public static int getAllEnNum() {return allEnNum;}public static void setAllEnNum(int allEnNum) { Recorder.allEnNum = allEnNum;}public static int getEnNum() {return enNum;}public static void setEnNum(int enNum) {Recorder.enNum = enNum;}public static int getMyLife() {return myLife;}public static void setMyLife(int myLife) { Recorder.myLife = myLife;}//减少敌人数public static void reduceEnNum(){enNum--;}//消灭敌人public static void addEnEnum(){allEnNum++;}}//炸弹类class Bomb{int x,y;//炸弹的生命int life=9;boolean isLive=true;public Bomb(int x,int y){this.x=x;this.y=y;}//减少生命值public void lifeDown(){if(life>0){life--;}else{this.isLive=false;}}}//子弹类class Shot implements Runnable{int x,y;int direct;int speed=1;//是否还活着boolean isLive=true;public Shot(int x,int y,int direct,int speed) {this.x=x;this.y=y;this.direct=direct;this.speed=speed;}@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}switch(direct){case 0://向上y-=speed;break;case 1://向右x+=speed;break;case 2://下y+=speed;break;case 3:x-=speed;break;}//子弹何时死亡??????if(x<0||x>400||y<0||y>300){this.isLive=false;break;}//System.out.println(x+""+y);}}}//坦克类class Tank{int x=0;int y=0;//定义方向的值0上,右2,下3,左int direct=0;//坦克的速度int speed=1;int color=0;boolean isLive=true;public int getColor() {return color;}public void setColor(int color) {this.color = color;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public int getDirect() {return direct;}public void setDirect(int direct) {this.direct = direct;}public Tank(int x,int y){this.x=x;this.y=y;}public int getX(){return x;}public int getY(){return y;}public void setX(int x){this.x=x;}public void setY(int y){this.y=y;}}//敌人的坦克 ,做成线程class EnemyTank extends Tank implements Runnable {//boolean isLive=true;int times=0;//定义一个向量,可以访问到MyPanel上所有敌人的坦克Vector<EnemyTank> ets=new Vector<EnemyTank>();//定义一个向量,可以存放敌人的子弹Vector <Shot> ss=new Vector<Shot>();//敌人添加子弹应当在刚刚创建坦克和敌人的坦克子弹死亡之后public EnemyTank(int x, int y){super(x, y);}//得到MyPanel的敌人坦克向量public void setEts(Vector<EnemyTank>vv){this.ets=vv;}//判断是否碰到了别人的敌人的坦克public boolean isTouchOtherEnemy(){boolean b=false;//..。
湖北大学J A V A课程设计论文题目坦克大战游戏姓名张诚学号 ****************姓名柳谦学号 ****************专业年级计算机科学与技术1401 指导教师王雷春职称副教授2016年 5月目录绪论 (4)1背景 (4)2课程设计目标及目的 (5)2.1课程设计的目标 (5)2.2课程设计的目的 (5)2.3可行性分析 (5)2.3.1技术可行性 (5)2.3.2经济可行性分析 (6)3概要设计 (6)4详细设计 (7)4.1项目与类的结构图 (7)4.2 各类实现的功能概要 (7)4.2.1 barrier包 (7)4.2.2 lightButton包 (7)4.2.3 Tankwar包 (7)4.2.4 mapediter包 (8)4.3 主要类的的UML图及主要成员变量和函数说明 (8)4.3.1 Barrier类 (8)4.3.2 LightButton类 (11)4.3.3 Mapediter类 (13)4.3.4 Main类 (15)4.3.5 Boom类 (18)4.3.6 Item类 (18)4.3.7 Missle类 (21)4.3.8 PanelShow类 (25)4.3.9 Tank类 (26)4.3.10 TankWar 类 (33)5运行结果 (40)6总结 (47)7参考文献 (47)8附录 (48)坦克大战摘要坦克大战是一款最初由日本南梦宫Namco游戏公司1985年在任天堂FC平台上,推出的一款多方位平面射击游戏。
一经推出,人气十分高涨,然后又陆续推出了GB,PC等版本,玩法也大大扩充,由最初的单人2D过关演变到如今的多人3D联网对战游戏,我们小时候应该都体验过,之前C#课程中已经了解过有关信息,如今就想同样以Java为载体编写一款坦克大战。
本课题展示了如何使用Java编写出能够实际运行的单人版坦克大战游戏。
课题介绍了项目的功能、类的设计和逻辑难点等重要点。
JAVA实现坦克⼤战1.0版本 1package tankGame;2import java.awt.*;3import javax.swing.*;4import java.awt.event.*;5import java.util.*;6/**7 * 功能:我⽅坦克可以发⼦弹8 *9 * */10public class MyTankGame1 extends JFrame {1112public static void main(String[] args) {13// TODO Auto-generated method stub14 MyTankGame1 mtg =new MyTankGame1();15 }16//构造函数17public MyTankGame1(){18 MyPanel mp=new MyPanel();1920//线程启动21 Thread t=new Thread(mp);22 t.start();2324this.add(mp);25this.addKeyListener(mp);//注册监听26this.setSize(400,300);27this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);28this.setVisible(true);29 }3031 }3233//我的⾯板34class MyPanel extends JPanel implements KeyListener,Runnable{35 Hero hero=null;//定义我的坦克36 Vector<Enermy> enermy=new Vector<Enermy>() ;//定义敌⼈的坦克组37int enSize=3;38//构造函数39public MyPanel(){40 hero=new Hero(100,100);4142for(int i=0;i<enSize;i++){43//创建⼀辆敌⼈的坦克对象44 Enermy en=new Enermy((i+1)*50, 0);45 en.setColor(0);46 en.setDerect(3);47//加⼊48 enermy.add(en);49 }5051 }52public void paint(Graphics g){//重新paint53super.paint(g);54 g.fillRect(0, 0, 400, 300);55//画出我的坦克56this.drawTank(hero.getX(), hero.getY(), g,this.hero.derect, 1);57//画出⼦弹58if(hero.s!=null&&hero.s.isLive==true){59 g.fillOval(hero.s.x ,hero.s.y, 2, 2);60 }6162//画出敌⼈的坦克63for(int i=0;i<enermy.size();i++){64this.drawTank(enermy.get(i).getX(), enermy.get(i).getY(), g, enermy.get(i).derect, 0);65//System.out.println(enermy.get(i).derect);//默认值为066 }67 }68public void drawTank(int x,int y,Graphics g,int direct,int type){69//判断是什么类型的坦克,敌⼈的还是我⽅的70switch(type){71case 0:72 g.setColor(Color.CYAN);73break;74case 1:75 g.setColor(Color.yellow);76break;77 }78//判断⽅向79switch(direct){80//坦克头向上81case 0:82//画出我的坦克,到时再封装为⼀个函数 83//画出左边的矩形84 g.fill3DRect(x, y, 5, 30,false);85//画出有右边的矩形86 g.fill3DRect(x+15, y, 5, 30,false);87//画出中间的矩形88 g.fill3DRect(x+5, y+5, 10, 20,false);89//画出圆形90 g.fillOval(x+5, y+10, 10, 10);91//画炮头92 g.drawLine(x+10, y-5, x+10, y+15);93break;9495//坦克头向右96case 1:9798//画出上边的矩形99 g.fill3DRect(x, y, 30, 5,false);100//画出下边的矩形101 g.fill3DRect(x, y+15, 30, 5,false);102//画出中间的矩形103 g.fill3DRect(x+5, y+5, 20, 10,false);104//画出圆形105 g.fillOval(x+10, y+5, 10, 10);106//画炮头107 g.drawLine(x+15, y+10, x+35, y+10); 108break;109110//坦克头向下111case 2:112113 g.fill3DRect(x, y, 5, 30,false);114//画出有右边的矩形115 g.fill3DRect(x+15, y, 5, 30,false);116//画出中间的矩形117 g.fill3DRect(x+5, y+5, 10, 20,false);118//画出圆形119 g.fillOval(x+5, y+10, 10, 10);120//画炮头121 g.drawLine(x+10, y+15,x+10, y+35); 122break;123124//坦克头向左125case 3:126127//画出上边的矩形128 g.fill3DRect(x, y, 30, 5,false);129//画出下边的矩形130 g.fill3DRect(x, y+15, 30, 5,false);131//画出中间的矩形132 g.fill3DRect(x+5, y+5, 20, 10,false);133//画出圆形134 g.fillOval(x+10, y+5, 10, 10);135//画炮头136 g.drawLine( x-5, y+10,x+15, y+10);137break;138 }139140141 }142 @Override143public void keyPressed(KeyEvent e) {144// TODO Auto-generated method stub145if(e.getKeyCode()==KeyEvent.VK_W){146//设置我的坦克⽅向147this.hero.setDerect(0);148this.hero.moveUp();149 }else if (e.getKeyCode()==KeyEvent.VK_D){ 150this.hero.setDerect(1);151this.hero.moveRight();152 }else if (e.getKeyCode()==KeyEvent.VK_S){ 153this.hero.setDerect(2);154this.hero.moveDown();155 }else if (e.getKeyCode()==KeyEvent.VK_A){ 156this.hero.setDerect(3);157this.hero.moveLeft();158 }159this.repaint();160//判断玩家是否按下j161if(e.getKeyCode()==KeyEvent.VK_J){162//开⽕,调⽤shotEnermy163this.hero.shotEnermy();164 }165166 }167 @Override168public void keyReleased(KeyEvent e) { 169// TODO Auto-generated method stub 170171 }172 @Override173public void keyTyped(KeyEvent e) {174// TODO Auto-generated method stub 175176 }177 @Override178public void run() {//实现每隔100ms去重绘179// TODO Auto-generated method stub 180while(true){181try {182 Thread.sleep(100);183 } catch (InterruptedException e) {184// TODO Auto-generated catch block 185 e.printStackTrace();186 }187this.repaint();188 }189 }190 }成员类1package tankGame;2//⼦弹类3class Shot implements Runnable{4int x,y,direct;5int speed=1;6boolean isLive=true;7public Shot(int x,int y,int direct){8this.x=x;9this.y=y;10this.direct=direct;11 }12 @Override13public void run() {14// TODO Auto-generated method stub15while(true){16try {17 Thread.sleep(50);18 } catch (InterruptedException e) {19// TODO Auto-generated catch block20 e.printStackTrace();21 }22switch(direct){23case 0:24 y-=speed;25break;26case 1:27 x+=speed;28break;29case 2:30 y+=speed;31break;32case 3:33 x-=speed;34break;35 }36 System.out.println("X"+x+"Y"+y);37if (x<0||x>400||y<0||y>300){38this.isLive=false;39break;40 }41 }42 }43 }44//坦克类45class Tank46 {47int x=0;//坦克的横坐标48int y=0;//坦克的纵坐标49int derect;//0上 1右 2下 3左50int speed=1;//设置坦克的速度51int color;//设置坦克颜⾊52public int getColor() {53return color;54 }55public void setColor(int color) {56this.color = color;57 }58public int getDerect() {59return derect;60 }61public void setDerect(int derect) {62this.derect = derect;63 }64public int getX() {65return x;66 }67public void setX(int x) {68this.x = x;69 }70public int getY() {71return y;72 }73public void setY(int y) {74this.y = y;75 }7677public Tank(int x,int y){78this.x=x;79this.y=y;80 }81 }82class Hero extends Tank{83 Shot s=null;//⼦弹是和坦克关联的84public Hero (int x,int y){85super(x,y);86 }87public void shotEnermy(){//⼦弹和坦克⽅向相关 8889switch(this.derect){90case 0:91 s=new Shot(x+10,y-9,0);92break;93case 1:94 s=new Shot(x+38,y+9,1);95break;96case 2:97 s=new Shot(x+10,y+37,2);98break;99100case 3:101 s=new Shot(x-9,y+9,3);102break;103 }104 Thread t=new Thread(s);105 t.start();106 }107//坦克向上移动108public void moveUp(){109 y-=speed;110 }111//坦克向右移动112public void moveRight(){113 x+=speed;114 }//坦克向下移动115public void moveDown(){116 y+=speed;117 }118//坦克向左移动119public void moveLeft(){120 x-=speed;121 }122123124 }125class Enermy extends Tank{126public Enermy (int x,int y){127super(x,y);128 }129 }效果如下:。
坦克⼤战第⼀节——画出⾃⼰的坦克(新⼿篇)刚刚开始学习Java,对Java不是很熟悉,但是⾃⼰的兴趣挺喜欢Java。
现在⾃⼰在⾃学Java做⼀个⼩游戏,坦克⼤战。
⾃⼰现在完成了画出⾃⼰的坦克和坦克的移动⽅向。
希望各位⼤神指导⼀下我这个刚刚学Java的新⼿⼩⽩。
我会每完成⼀个阶段,就更新⼀下博客,跟进⼀下⾃⼰的学习进度。
在做这个坦克⼤战的时候,不知道从哪⾥开始做起,再来⾃⼰就觉得先画出⾃⼰的坦克吧。
下⾯是创建坦克类(⽅便以后能创建更加多的坦克),再创建⾃⼰的坦克继承坦克类。
package tankgames;import java.awt.*;//创建坦克类public class Tank {int x,y,w,h;int speed;int direct;Color c1,c2,c3;public Tank(){x=230;y=300;w=5;h=60;speed=10;direct=0;}public Tank(int x, int y, int w, int h, int speed, int direct) {super();this.x = x;this.y = y;this.w = w;this.h = h;this.speed = speed;this.direct = direct;}}//创建我的坦克⼦类class MyTank extends Tank{//创建颜⾊对象,并设置颜⾊public MyTank(){this.c1 = new Color(128,128,128);this.c2 = new Color(0,255,0);this.c3 = new Color(0,0,255);}public MyTank(int x, int y, int w, int h, int speed, int direct) {super(x, y, w, h, speed, direct);this.c1 = new Color(128,128,128);this.c2 = new Color(0,255,0);this.c3 = new Color(0,0,255);}}创建完⾃⼰的坦克,要写个主函数来画出⾃⼰的坦克,以下是画出⾃⼰的坦克:package tankgames;import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;public class TankGame extends JFrame{private static final long serialVersionUID = 1L;MyPanel mp;public static void main(String[] args) {new TankGame().setVisible(true);}public TankGame(){this.setTitle("坦克⼤战");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setBounds(100, 100, 600, 500);//创建我的⾯板对象,并添加到我的窗体⾥⾯mp = new MyPanel();this.getContentPane().add(mp);//注册键盘事件监听this.addKeyListener(mp);}}//创建我的⾯板⼦类class MyPanel extends JPanel implements KeyListener{MyTank myTank;private static final long serialVersionUID = 1L;public MyPanel(){this.setLayout(null);myTank = new MyTank();}//⾯板容器的设置和组件在⾯板容器⾥显⽰public void paint(Graphics g){super.paint(g);g.setColor(new Color(255,255,221));g.fill3DRect(0, 0, 500, 400, false);drawTank(myTank,g);}//画坦克public void drawTank(Tank t,Graphics g){int x = t.x, y = t.y, w = t.w, h = t.h;//画出向上的坦克if(t.direct == 0){Graphics2D g2d = (Graphics2D)g;g.setColor(t.c1);g.fill3DRect(x, y, w, h, false);g.fill3DRect(x+7*w, y, w, h, false);g.setColor(t.c2);g.fill3DRect(x+w, y+2*w, 6*w, 8*w, false);g.fillOval(x+2*w, y+4*w, 4*w, 4*w);g2d.setColor(t.c3);g2d.setStroke(new BasicStroke(5.0f));g2d.drawLine(x+4*w, y, x+4*w, y+6*w);}//画出向下的坦克else if(t.direct == 2){Graphics2D g2d = (Graphics2D)g;g.setColor(t.c1);g.fill3DRect(x, y, w, h, false);g.fill3DRect(x+7*w, y, w, h, false);g.setColor(t.c2);g.fill3DRect(x+w, y+2*w, 6*w, 8*w, false);g.fillOval(x+2*w, y+4*w, 4*w, 4*w);g2d.setColor(t.c3);g2d.setStroke(new BasicStroke(5.0f));g2d.drawLine(x+4*w, y+6*w, x+4*w, y+12*w);}//画出向左的坦克else if(t.direct == 3){Graphics2D g2d = (Graphics2D)g;g.setColor(t.c1);g.fill3DRect(x, y, h, w, false);g.fill3DRect(x, y+7*w, h, w, false);g.setColor(t.c2);g.fill3DRect(x+2*w, y+w, 8*w, 6*w, false);g.fillOval(x+4*w, y+2*w, 4*w, 4*w);g2d.setColor(t.c3);g2d.setStroke(new BasicStroke(5.0f));g2d.drawLine(x, y+4*w, x+6*w, y+4*w);}//画出向右的坦克else if(t.direct ==1){Graphics2D g2d = (Graphics2D)g;g.setColor(t.c1);g.fill3DRect(x, y, h, w, false);g.fill3DRect(x, y+7*w, h, w, false);g.setColor(t.c2);g.fill3DRect(x+2*w, y+w, 8*w, 6*w, false);g.fillOval(x+4*w, y+2*w, 4*w, 4*w);g2d.setColor(t.c3);g2d.setStroke(new BasicStroke(5.0f));g2d.drawLine(x+6*w, y+4*w, x+12*w, y+4*w);}}@Overridepublic void keyTyped(KeyEvent e) {}//我的坦克移动@Overridepublic void keyPressed(KeyEvent e) {//向左移动if(e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_A){myTank.x -= myTank.speed;myTank.direct = 3;}//向右移动else if(e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_D){myTank.x += myTank.speed;myTank.direct = 1;}//向上移动else if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_W){myTank.y -= myTank.speed;myTank.direct =0;}//向下移动else if(e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_S){myTank.y += myTank.speed;myTank.direct = 2;}//关闭游戏else if(e.getKeyCode() == KeyEvent.VK_ESCAPE){System.exit(0);}//刷新图形this.repaint();}@Overridepublic void keyReleased(KeyEvent e) {}}我画⾃⼰的坦克只是计算好位置,画出图形。
毕业设计(论文)题目:JAVA版坦克大战2014 年 11 月 20 日JAVA版坦克大战摘要J2SE(Java 2 Standard Edition)/(java 2 标准版)是近年来随着各种不同技术的发展,尤其是编程语言飞速发展而诞生的一项新的开发语言。
随着信息技术的飞速发展,计算机的使用也日渐普及。
本文从实际应用出发,研究并开发实现了一个坦克大战的游戏程序。
在Eclipse平台下开发调试。
玩家坦克的运行是通过键盘响应事件控制,敌方坦克则是自动运行并具有了一定的智能性。
程序进行了精简和优化,游戏运行流畅,具有一定的吸引力。
本游戏就是一款基于J2SE的游戏。
本游戏主要是运用JAVA GUI的知识实现的。
Java图形用户界面(GUI)是指采用图形方式显示的计算机操作用户界面。
讲到这里必须得提一下Applet,Applet是镶嵌在网页上运行的小应用程序,Applet的paint()方法用于绘制显示区域,本游戏的坦克就是用这个方法绘制出来的。
早期的java提供的GUI类库(java.awt)称之为Abstract Window Toolkit,即AWT,AWT功能不是很好,不能很好的访问操作系统中高级的GUI特性,生成的程序外观很一般。
Swing是JDK1.2以后提供的GUI类库,即:javax.swing,使用方便,界面更加美观。
Eclipse提供的Standard Widget Toolkit用户界面开发包,SWT能够充分利用本机系统的GUI。
关键词:游戏,Java,坦克,智能Java Tank War Game DevelopmentAbstractJ2SE is a kind of fast developing technology implemented on various devices especially equipments.With the rapid development of information technology, computer use has become more popular, the practical application of this paper to introduce the design and implementation of the game Battle City .It transports the classical product to computer, offering corresponding software for such more popular hardware platform. Eclipse platform simulator. The player’s tank is controlled by keyboard response events, while the enemy’s tank i s operated automatically and is of intelligence. Having been streamlined and optimized, the game system can run fluently and attract the players. This paper describes the history of Battle City, java related technologies and the procedures of structural analysis and the realization of specific functions. Game programming environment in Eclipse3.5.1. Its main features are:to move around. capable of firing bullets against enemy. the enemy can move. to simulate the explosion. to create an obstacle. to increase the lifeKey words:game ,Java ,tank ,Smart目录摘要 .......................................... 错误!未定义书签。
java坦克大战实训步骤与过程
1.环境准备:
(1)准备好必要的工具:jdk、MyEclipse、图片素材;
(2)安装和配置好工具:安装jdk,MyEclipse,并把需要的图片素材放到指定文件夹;
2.实践步骤:
(1)创建项目:使用MyEclipse新建一个Java工程,设置好包结构;
(2)编写程序:使用MyEclipse开发实现坦克大战的所有功能;
(3)编译程序:根据Java程序的实际需求,使用MyEclipse编译我们的代码;(4)运行程序:使用MyEclipse运行坦克大战程序,以查看程序的正确性。
3.检查和修改:
(1)检查Bug:使用MyEclipse进行Debug调试程序,查看是否有Bug;(2)修改代码:如果有Bug,使用MyEclipse改正程序,以达到预期的效果。