java练习_坦克大战4.0

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

packageMyTankGame4_0;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.*;importjava.io.*;importjava.util.Vector;importjavax.imageio.ImageIO;importjavax.swing.*;publicclassMyTankGame4_0extendsJFrameimplementsActionListener{//声明一个标志intflag=0;//声明一个运行面板MyPanelmp=null;//定义一个开始的面板MyStartPanelmsp=null;//做出我需要的菜单JMenuBarjmb=null;//开始游戏JMenujm1=null;JMenuItemjmi1=null;//退出系统JMenuItemjmi2=null;JMenuItemjmi3=null;JMenuItemjmi4=null;publicstaticvoidmain(String[]args){MyTankGame4_0mytankgame1=newMyTankGame4_0();mytankgame1.setLocationRelativeTo(null);//将JFrame设置在中间//mytankgame1.setLocation(210,140);//设置JFrame的位置}publicMyTankGame4_0()//构造{//初始化菜单栏jmb=newJMenuBar();jm1=newJMenu(游戏(G));//设置快捷方式jm1.setMnemonic('G');jmi1=newJMenuItem(开始新游戏(N));jmi2=newJMenuItem(退出游戏(E));jmi3=newJMenuItem(存盘退出(C));jmi4=newJMenuItem(继续上次游戏(L));jmi1.setMnemonic('N');jmi2.setMnemonic('E');jmi3.setMnemonic('C');jmi4.setMnemonic('L');//对jmi1响应,注册监听,标记消息源jmi1.addActionListener(this);jmi1.setActionCommand(newgame);jmi2.addActionListener(this);jmi2.setActionCommand(exit);jmi3.addActionListener(this);jmi3.setActionCommand(saveandexit);jmi4.addActionListener(this);jmi4.setActionCommand(continuegame);jm1.add(jmi1);jm1.add(jmi2);jm1.add(jmi3);jm1.add(jmi4);jmb.add(jm1);//声明初始化面板msp=newMyStartPanel();Threadt=newThread(msp);t.start();//初始化窗口,构造函数的重点this.setJMenuBar(jmb);//千万注意啊!!!!this.add(msp);this.setSize(400,300);this.setVisible(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){//对用户不同的点击做出不同的处理//首先得到command字符串,判断消息源if(e.getActionCommand().equals(newgame)){this.setSize(600,500);mp=newMyPanel(flag);//启动mp线程Threadt1=newThread(mp);t1.start();//先删除旧的面板this.remove(msp);this.add(mp);//注册监听this.addKeyListener(mp);//显示this.setVisible(true);}elseif(e.getActionCommand().equals(exit)){//用户退出//保存击毁敌人数量Recorder.keepRecording();System.exit(0);}elseif(e.getActionCommand().equals(saveandexit)){Recorder.keepRecAndEnemyTank(mp.ets);if(this.mp.hero.isLive==true){Recorder.keepRecAndMyTank(this.mp.hero);}System.exit(0);}elseif(e.getActionCommand().equals(continuegame)){this.setSize(600,500);flag=1;mp=newMyPanel(flag);//启动mp线程Threadt1=newThread(mp);t1.start();//先删除旧的面板this.remove(msp);this.add(mp);//注册监听this.addKeyListener(mp);//显示this.setVisible(true);}}}//开始面板起一个提示的作用classMyStartPanelextendsJPanelimplementsRunnable{inttimes=0;publicvoidpaint(Graphicsg){super.paint(g);g.fillRect(0,0,400,300);//提示信息if(times%2==0){g.setColor(Color.yellow);//开关信息的字体try{FontmyFont=newFont(华文新魏,Font.BOLD,30);g.setFont(myFont);}catch(Exceptione){e.printStackTrace();}g.drawString(stage:1,150,150);}}publicvoidrun(){while(true){try{Thread.sleep(500);}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}this.repaint();times++;if(times==1000)times=0;}}}classMyPanelextendsJPanelimplementsKeyListener,Runnable{//定义我的坦克,成员变量Herohero=null;//判断是续上局还是新的游戏Stringflag=newGame;//定义敌人的坦克组VectorEnemyTankets=newVectorEnemyTank();//全局变量,声明,敌人坦克数量staticintenSize=5;publicstaticintgetEnSize(){returnenSize;}//定义炸弹集合VectorBombbombs=newVectorBomb();//paint方法被面板适时自动调用publicvoidpaint(Graphicsg){super.paint(g);g.fillRect(0,0,400,300);//画出提示信息this.showInfo(g);//画出自己的坦克if(hero.isLive==true){this.drawTank(hero.getX(),hero.getY(),g,this.hero.direct,1);}//从Vectorss中取出每一颗子弹,并画出,如果有子弹for(inti=0;ithis.hero.ss.size();i++){ShotmyShot=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(inti=0;ibombs.size();i++){//取出炸弹Bombb=bombs.get(i);if(b.life6){g.drawOval(b.x,b.y,30,30);//g.drawImage(image1,b.x,b.y,30,30,this);}elseif(b.life3){g.drawOval(b.x,b.y,20,20);//g.drawImage(image2,b.x,b.y,30,30,this);}else{g.drawOval(b.x,b.y,10,10);//g.drawImage(image3,b.x,b.y,30,30,this);}//让b的生命值减小b.lifeDown();//如果炸弹的生命值为0,我们就剔除if(b.life==0)bombs.remove(b);}//画出敌人的坦克for(inti=0;iets.size();i++){EnemyTanket=ets.get(i);if(et.isLive){this.drawTank(ets.get(i).getX(),ets.get(i).getY(),g,ets.get(i).getDirect(),0);//画出敌人的子弹for(intj=0;jet.ss.size();j++){//取出子弹ShotenemyShot=et.ss.get(j);if(enemyShot.isLive){g.draw3DRect(enemyShot.x,enemyShot.y,1,1,false);}else{//如果敌人的坦克死亡就从Vector去掉et.ss.remove(enemyShot);}}}}}//判断我是否被击中了publicvoidhitMe(){//取出敌人的每一颗子弹for(inti=0;ithis.ets.size();i++){//取出坦克EnemyTanket=ets.get(i);//取出每一颗子弹for(intj=0;jet.ss.size();j++){//取出子弹ShotenemyShot=et.ss.get(j);if(hero.isLive)//&&Recorder.getMyLife()=1{this.hitTank(enemyShot,hero);//Recorder.setMyLife(Recorder.getMyLife()-1);}}}}//判断我的子弹是否击中敌人的坦克publicvoidhitEnemyTank(){for(inti=0;ihero.ss.size();i++){ShotmyShot=hero.ss.get(i);//判断子弹是否有效if(myShot.isLive){//取出每个坦克,与它判断for(intj=0;jets.size();j++){//取出坦克EnemyTanket=ets.get(j);if(et.i

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功