坦克大战源码.doc

上传人:文库蛋蛋多 文档编号:2861062 上传时间:2023-02-27 格式:DOC 页数:46 大小:111KB
返回 下载 相关 举报
坦克大战源码.doc_第1页
第1页 / 共46页
坦克大战源码.doc_第2页
第2页 / 共46页
坦克大战源码.doc_第3页
第3页 / 共46页
坦克大战源码.doc_第4页
第4页 / 共46页
坦克大战源码.doc_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《坦克大战源码.doc》由会员分享,可在线阅读,更多相关《坦克大战源码.doc(46页珍藏版)》请在三一办公上搜索。

1、坦克大战源码 根据韩顺平老师视频所作/*坦克大战4.0 * 防重叠*/package com.TankGame5;import java.awt.*;import javax.imageio.ImageIO;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.File;import java.io.IOEx

2、ception;import java.util.Vector;public class MyTankGame5 extends JFrame implements ActionListener/提示面板MyStartPanel msp=null;/游戏面板MyPanel mp=null;/游戏菜单/开始游戏JMenuBar jmb=null;JMenu jm1=null;/开始游戏JMenuItem jmi1=null;/退出游戏JMenuItem jmi2=null;/存盘退出JMenuItem jmi3=null;/继续上一局JMenuItem jmi4=null;public stat

3、ic void main(String args) / TODO Auto-generated method stubMyTankGame5 bn=new MyTankGame5();/构造函数public MyTankGame5()/创建菜单栏选项jmb=new JMenuBar();jm1=new JMenu(游戏(G);/创建快捷方式jm1.setMnemonic(G);jmi1=new JMenuItem(开始新游戏(N);jmi1.setMnemonic(N);/注册监听jmi1jmi1.addActionListener(this);jmi1.setActionCommand(ne

4、wgame);jmi2=new JMenuItem(退出该局游戏(Q);jmi2.setMnemonic(Q);/注册监听jmi2jmi2.addActionListener(this);jmi2.setActionCommand(exit);jmi3=new JMenuItem(存盘退出游戏(C);jmi3.setMnemonic(C);/注册监听jmi3jmi3.addActionListener(this);jmi3.setActionCommand(saveExit);jmi4=new JMenuItem(继续上一局(R);jmi4.setMnemonic(R);/注册监听jmi4jm

5、i4.addActionListener(this);jmi4.setActionCommand(continue);jm1.add(jmi1);jm1.add(jmi4);/添加的顺序就是菜单的顺序jm1.add(jmi3);jm1.add(jmi2);jmb.add(jm1);this.setJMenuBar(jmb);/先启动提示框msp=new MyStartPanel();this.add(msp);Thread t1=new Thread(msp);t1.start();/mp=new MyPanel(); /this.add(mp);/注册监听/this.addKeyListen

6、er(mp);/启动mp线程/Thread t2=new Thread(mp);/t2.start();/窗口大小this.setSize(MyPanel.bx1+230,MyPanel.by1+150);this.setTitle(坦克横行);ImageIcon icon = new ImageIcon(Images/yan.png);this.setIconImage(icon.getImage();this.setLocation(250,150);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(tr

7、ue);Overridepublic void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubif(arg0.getActionCommand().equals(newgame)/System.out.println(英雄的到来);/创建战场mp=new MyPanel(newgame); this.add(mp);/注册监听this.addKeyListener(mp);/启动mp线程Thread t2=new Thread(mp);t2.start();this.remove(msp);this.set

8、Visible(true);/简单退出else if(arg0.getActionCommand().equals(exit)/用户点击退出/保存击毁的敌人Recorder.keepRecording();System.exit(0);/存盘退出处理else if(arg0.getActionCommand().equals(saveExit)/System.out.print(111);/获取当前值Recorder.setEts(mp.ets);/保存击毁的敌人和敌人的坐标Recorder.keepRecAndEnemyTank();/退出System.exit(0);/继续上一局else

9、if(arg0.getActionCommand().equals(continue)/创建战场mp=new MyPanel(continue); this.add(mp);/注册监听this.addKeyListener(mp);/启动mp线程Thread t2=new Thread(mp);t2.start();this.remove(msp);this.setVisible(true);/开始提示面板class MyStartPanel extends JPanel implements Runnableint times=0;public void paint(Graphics g)s

10、uper.paint(g);g.fillRect(0, 0, MyPanel.bx1, MyPanel.by1);if(times%2=0×=30)/提示信息Font myFont=new Font(华文新魏,Font.BOLD,30);g.setFont(myFont);g.setColor(Color.YELLOW);g.drawString(READY? GO!, 100, 120);Overridepublic void run() / TODO Auto-generated method stubwhile(true)try Thread.sleep(500); catch

11、 (Exception e) / TODO Auto-generated catch blocke.printStackTrace();times+;/重画 闪烁效果this.repaint();/我的面板class MyPanel extends JPanel implements KeyListener,Runnablestatic int h=300;/坦克初始位置static int z=200;/暂停开始开关static int power=2;/背景区域大小static int bx1=400;static int by1=300;/声音控制static int audio=0;/

12、定义一个我的坦克Hero hero=null;/定义地方的坦克组Vector ets=new Vector();static int ensize=10;/敌人个数/定义炸弹集合Vector bombs=new Vector();/信息集合Vector nodes=new Vector();/定义2个图片,一起组成爆炸效果Image image1=null;Image image2=null;Image image3=null;/构造函数public MyPanel(String flag)/恢复记录Recorder.getRecording();/播放声音AePlayWave ap=new

13、AePlayWave(D:CHENks.wav);ap.start();/构造我的坦克hero=new Hero(h,z);/构造初始敌人this.startEnemyTank(flag);/初始化图片/下面的方法第一个爆炸效果不明显image1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(/beng.png);image2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(/beng2.png);image3=Toolkit.getDefaul

14、tToolkit().getImage(Panel.class.getResource(/beng3.png);/try /image1=ImageIO.read(new File(shanshui.jpg);/image2=ImageIO.read(new File(beng2.png);/image3=ImageIO.read(new File(beng3.png);/ catch (Exception e) / TODO Auto-generated catch block/e.printStackTrace();/public void startEnemyTank(String fl

15、ag)if(flag.equals(newgame)/构造敌方坦克for(int i=0;iensize;i+)/创建敌方坦克 敌人的初始位置EnemyTank et=new EnemyTank(i+1)*35,0);et.setColor(0); /?et.setDirect(2);/将MyPanel创建的坦克交给该敌人et.setEts(ets);/加入向量组ets.add(et);/给敌人添加子弹Shot s=new Shot(et.x+10,et.y+30,2);et.ss1.add(s);Thread t2=new Thread(s);t2.start();/启动敌人坦克Thread

16、 t=new Thread(et);t.start();elsenodes=new Recorder().getNodesAndEnemy();/构造敌方坦克for(int i=0;inodes.size();i+)/取出NodeNode node=nodes.get(i);/创建敌方坦克 敌人的初始位置EnemyTank et=new EnemyTank(node.x,node.y);et.setColor(0); /?et.setDirect(node.direct);/将MyPanel创建的坦克交给该敌人et.setEts(ets);/加入向量组ets.add(et);/给敌人添加子弹S

17、hot s=new Shot(et.x+10,et.y+30,2);et.ss1.add(s);Thread t2=new Thread(s);t2.start();/启动敌人坦克Thread t=new Thread(et);t.start();/函数的重载,用于重复产生敌人(int)(Math.random()*270),(int)(Math.random()*360)public void startEnemyTank()/构造敌方坦克/创建敌方坦克 敌人的初始位置 位置随机EnemyTank et=new EnemyTank(int)(Math.random()*370),(int)(

18、Math.random()*270);et.setColor(0); /?et.setDirect(2);/将MyPanel创建的坦克交给该敌人et.setEts(ets);/加入向量组ets.add(et);/给敌人添加子弹Shot s=new Shot(et.x+10,et.y+30,2);et.ss1.add(s);Thread t2=new Thread(s);t2.start();/启动敌人坦克Thread t=new Thread(et);t.start();/画提示信息的坦克public void showInfo(Graphics g)/提示信息this.drawTank(80

19、, 330, g,0, 1);g.setColor(Color.black);g.drawString(Recorder.getEnlife()+, 115, 350);this.drawTank(180, 330, g,0, 0);g.setColor(Color.black);g.drawString(Recorder.getMylife()+, 220, 350);Font f=new Font(宋体,Font.BOLD,25);g.setFont(f);g.drawString(您的总成绩, 415, 40);this.drawTank(440, 90, g,0, 1);g.drawS

20、tring(*, 470, 112);g.drawString(Recorder.getDeadenemy()+, 500, 110);/判断结束 提示消息/Hero输了if(Hero.counter=Hero.newlife)Font f1=new Font(宋体,Font.BOLD,40);g.setFont(f1);g.setColor(Color.RED);g.drawString(GAME OVER, 110, 150);for(int i=0;ithis.ets.size();i+)/取出各个坦克速度int esp0=ets.get(i).getSpeed();/设其速度为0ets

21、.get(i).setSpeed(0);/取出各个坦克EnemyTank et=ets.get(i);/再取出每一颗子弹for(int j=0;jet.ss1.size();j+)/取出各个子弹速度int ess0=et.ss1.get(j).getSpeed();/设其速度为0et.ss1.get(j).setSpeed(0);/HERO 胜利!/没有敌人了就赢了else if(Recorder.getEnlife()=MyPanel.ensize-EnemyTank.newlife)Font f1=new Font(宋体,Font.BOLD,40);g.setFont(f1);g.setC

22、olor(Color.RED);g.drawString(WINNER, 120, 150);for(int i=0;ithis.ets.size();i+)/取出各个坦克速度int esp0=ets.get(i).getSpeed();/设其速度为0ets.get(i).setSpeed(0);/取出各个坦克EnemyTank et=ets.get(i);/再取出每一颗子弹for(int j=0;jet.ss1.size();j+)/取出各个子弹速度int ess0=et.ss1.get(j).getSpeed();/设其速度为0et.ss1.get(j).setSpeed(0);/重写pa

23、intpublic void paint(Graphics g)super.paint(g);g.fillRect(0, 0, bx1, by1); /填充背景颜色this.showInfo(g);if(hero.isLive&Hero.counter!=Hero.newlife)/画我的坦克this.drawTank(hero.getX(), hero.getY(), g, this.hero.direct, 0);else if(!hero.isLive&Hero.counterHero.newlife)hero.isLive=true;Hero.counter+;/画我的坦克this.d

24、rawTank(hero.getX(), hero.getY(), g, this.hero.direct, 0);/遍历Vector画出子弹&Hero.counter!=Hero.newlifefor(int i=0;ihero.ss.size();i+)Shot myshot=hero.ss.get(i);/画一颗子弹if(myshot!=null&myshot.isLive)g.setColor(Color.yellow);g.fill3DRect(myshot.x, myshot.y, 3, 3, false);/g.fillOval(myshot.x-1, myshot.y, 5,

25、5);if(myshot.isLive=false)/删除死亡的子弹hero.ss.remove(myshot);/画出炸弹for(int i=0;i2)g.drawImage(image3, b.x, b.y, 30, 30, this);else if(b.life1)g.drawImage(image1, b.x, b.y, 30, 30, this);else g.drawImage(image2, b.x, b.y, 30, 30, this);/播放爆炸声音AePlayWave ap1=new AePlayWave(D:CHENbz.wav);ap1.start();/Hero输了

26、if (Hero.counter = Hero.newlife )/提示声音AePlayWave ap = new AePlayWave(D:CHENgameover.wav);ap.start();audio+;/HERO 胜利!/没有敌人了就赢了else if (Recorder.getEnlife() = MyPanel.ensize - EnemyTank.newlife& audio = 0) /提示声音AePlayWave ap = new AePlayWave(D:CHENwinner.wav);ap.start();audio+;/让b的生命值减小b.lifeDown();/减

27、小到0就去掉if(b.life=0)bombs.remove(b);/画敌方坦克for(int i=0;iets.size();i+)EnemyTank et=ets.get(i);if(et.isLive)this.drawTank(et.getX(), et.getY(), g, et.getDirect(), 1);/画出敌人子弹for(int j=0;jet.ss1.size();j+)/取出子弹Shot enemyshot=et.ss1.get(j);if(enemyshot.isLive)g.setColor(Color.RED);g.fill3DRect(enemyshot.x-

28、1, enemyshot.y, 3, 3, false);else/如果敌人子弹死亡就把他从Vector中去掉et.ss1.remove(enemyshot);/有敌人被消灭就在画一个,而且不能超过10个if(!et.isLive&EnemyTank.counteret.x&s.xet.y&s.yet.x&s.xet.y&s.yet.y+20)/创建炸弹Bomb b=new Bomb(et.x, et.y);/放入Vectorbombs.add(b);/击中/子弹死亡s.isLive=false;/敌人死亡et.isLive=false;if(et!=hero)/敌人数目减少Recorder.

29、reduceEnlife();/记录我的战绩Recorder.deadenemy();else if(et=hero)Recorder.reduceMylife();break;/判断敌人是否击中我public void hitMe()/取出敌人的坦克for(int i=0;ithis.ets.size();i+)/取出坦克EnemyTank et=ets.get(i);/取出每一颗子弹for(int j=0;jet.ss1.size();j+)/取出子弹Shot enemyshot=et.ss1.get(j);if(hero.isLive)this.hitTank(enemyshot, he

30、ro);/判断是否击中了敌人public void hitenemytank()/判断是否击中for(int i=0;ihero.ss.size();i+)/取出子弹Shot myshot=hero.ss.get(i);/判断是否有效if(myshot.isLive)/取出每个坦克与他判断for(int j=0;jets.size();j+)/取出坦克EnemyTank et=ets.get(j);if(et.isLive)this.hitTank(myshot, et);/播放爆炸声音/AePlayWave ap1=new AePlayWave(D:CHENfs.wav);/ap1.star

31、t();/画坦克的函数public void drawTank(int x,int y,Graphics g, int direct, int type)/direct方向,type类型switch(type)case 1:g.setColor(Color.CYAN);break;case 0:g.setColor(Color.yellow);break;/判断方向switch(direct)/向上case 0:/画上方向的坦克 有五个部件构成/1.左边的矩形g.fill3DRect(x, y, 5, 30,false);/2.y右边的矩形g.fill3DRect(x+15, y, 5, 30

32、,false);/中间矩形g.fill3DRect(x+5, y+6, 10, 19,false);/g.fillRect(x+5, y+6, 10, 19);/中间圆g.setColor(Color.GRAY);g.fillOval(x+5, y+9, 10, 10);/炮筒g.setColor(Color.DARK_GRAY);g.fill3DRect(x+10, y-4, 2, 21,false);g.setColor(Color.blue);g.fill3DRect(x+8, y-8, 5, 3,false);break;case 1:/画向右的坦克g.fill3DRect(x, y,

33、 30, 5,false);/上轮g.fill3DRect(x, y+15, 30, 5,false);/下轮g.fill3DRect(x+5, y+6, 19, 10,false);/中间g.setColor(Color.GRAY);g.fillOval(x+9, y+5, 10, 10);/中间圆g.setColor(Color.DARK_GRAY);g.fill3DRect(x+12, y+9, 21, 2,false);/炮筒g.setColor(Color.blue);g.fill3DRect(x+33, y+8, 3, 5,false);break;case 2:/向下/1.左边的矩形g.fill3DRect(x, y, 5, 30,false);/hero.

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号