




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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.左边的
34、矩形g.fill3drect(x, y, 5, 30,false);/hero.getx(),hero.gety()用x y换了/2.y右边的矩形g.fill3drect(x+15, y, 5, 30,false);/中间矩形g.fill3drect(x+5, y+4, 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+14, 2, 20,fa
35、lse);g.setcolor(color.blue);g.fill3drect(x+8, y+33, 5, 3,false);break;case 3:/向左g.fill3drect(x, y, 30, 5,false);/上轮g.fill3drect(x, y+15, 30, 5,false);/下轮g.fill3drect(x+7, 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-6, y+9,
36、21, 2,false);/炮筒g.setcolor(color.blue);g.fill3drect(x-7, y+8, 3, 5,false);break;/键按下处理/a表示向左,s向下,d向右,w向上;或者用方向键也行public void keypressed(keyevent arg0) / todo auto-generated method stubif(arg0.getkeycode()=keyevent.vk_w|arg0.getkeycode()=keyevent.vk_up)/system.out.println(ok);/设置我的坦克方向 向上if(hero.isli
37、ve)this.hero.setdirect(0);this.hero.moveup();else if (arg0.getkeycode()=keyevent.vk_d|arg0.getkeycode()=keyevent.vk_right)/向右if(hero.islive)this.hero.setdirect(1);this.hero.moveright();else if (arg0.getkeycode()=keyevent.vk_s|arg0.getkeycode()=keyevent.vk_down)/向下if(hero.islive)this.hero.setdirect(2
38、);this.hero.movedown();else if (arg0.getkeycode()=keyevent.vk_a|arg0.getkeycode()=keyevent.vk_left)/向左if(hero.islive)this.hero.setdirect(3);this.hero.moveleft();/判断开火 空格键发射if(arg0.getkeycode()=keyevent.vk_space)/只能连发5发子弹if(hero.ss.size()=4&hero.islive)/开火this.hero.shotenemy();/暂停/继续 游戏/if(arg0.getke
39、ycode()=keyevent.vk_p)/for(int i=0;ithis.ets.size();i+)/if(power%2=0)/取出各个坦克速度/int esp0=ets.get(i).getspeed();/记住该速度/tempspeed=esp0;/设其速度为0/ets.get(i).setspeed(0);/取出各个坦克/enemytank et=ets.get(i);/再取出每一颗子弹/for(int j=0;jet.ss1.size();j+)/取出各个子弹速度/int ess0=et.ss1.get(j).getspeed();/记住该速度/int ess1=ess0;/设其速度为0/et.ss1.get(j).setspeed(0);/else /ets.get(i).setspeed(esp1);/et.ss1.get(j).setspeed(0);/power+;/调用repaint重画this.repaint();overridepublic void keyreleased(keyevent
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中职语文复述能力训练大纲
- 课件有趣的文案简短
- 幼儿手工插花课件
- 课件智能翻译
- 乐理考试题及答案bbf
- 矿工培训考试题及答案
- 押题宝典教师招聘之《小学教师招聘》考试题库带答案详解(能力提升)
- 口腔器械考试题及答案
- 考古专业考试题及答案
- 康复辅助技术咨询师岗位操作规程考核试卷及答案
- LNG安全教育培训课件
- 河北省琢名小渔名校联考2025-2026学年高三上学期开学调研检测英语试题(含答案)
- 人保新人考试题及答案
- 软件项目质量、进度、安全保障措施
- 老年专科考试题及答案
- 护理学基础:晨晚间护理
- 数字化知识培训内容课件
- 2025年河南省周口市辅警协警笔试笔试真题(含答案)
- 2025年吉林省机关事业单位工人技术等级考试(理论知识)历年参考题库含答案详解(5卷)
- 2025-2026学年人教精通版四年级英语上册(全册)教学设计(附目录)
- 电厂安全检查表清单
评论
0/150
提交评论