问题描述
importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;publicclassTank1extendsJFrame{myPanelmp=null;publicstaticvoidmain(String[]args){Tank1t1=newTank1();}publicTank1(){mp=newmyPanel();this.add(mp);this.addKeyListener(mp);this.setSize(400,300);this.setLocation(200,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}classmyPanelextendsJPanelimplementsKeyListener,Runnable{myTankmt=null;foeTankft=null;//myTankmt1=null;intdfsl=3;Vector<foeTank>ftq=newVector<foeTank>();publicmyPanel(){mt=newmyTank(130,200);//mt1=newmyTank(210,200);for(inti=0;i<dfsl;i++){foeTankft=newfoeTank(i*181,10);ftq.add(ft);}}publicvoidpaint(Graphicsg){//绘图super.paint(g);g.fillRect(0,0,400,300);this.drawPaint(mt.getX(),mt.getY(),g,mt.fangxiang,0);//this.drawPaint(mt1.getX(),mt1.getY(),g,0,0);for(inti=0;i<ftq.size();i++){foeTankft=ftq.get(i);if(ft.shengming){this.drawPaint(ft.getX(),ft.getY(),g,2,1);}}for(inti=0;i<mt.aa.size();i++){zidanzd=mt.aa.get(i);if(zd!=null&&zd.shengming){g.setColor(Color.red);g.fill3DRect(zd.x,zd.y,3,3,false);}if(zd.shengming==false){mt.aa.remove(zd);}}}publicvoiddrawPaint(intx,inty,Graphicsg,intfangxiang,intleixing){switch(leixing){//0代表我方坦克,1代表敌方坦克case0:g.setColor(Color.YELLOW);break;case1:g.setColor(Color.green);break;}switch(fangxiang){//0代表方向上,1代表方向左,2代表方面下,3代表方向右case0:g.draw3DRect(x,y,5,30,false);g.draw3DRect(x+15,y,5,30,false);g.draw3DRect(x+5,y+5,10,20,false);g.fillOval(x+5,y+10,10,10);g.drawLine(x+10,y+15,x+10,y-3);break;case1: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-3,y+10);break;case2: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+33);break;case3: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+33,y+10);break;}this.repaint();}publicvoidkeyTyped(KeyEvente){}publicvoidkeyReleased(KeyEvente){}publicvoidkeyPressed(KeyEvente){//监听if(e.getKeyCode()==KeyEvent.VK_W){this.mt.setFangxiang(0);this.mt.xiangshang();}elseif(e.getKeyCode()==KeyEvent.VK_A){this.mt.setFangxiang(1);this.mt.xiangzuo();}elseif(e.getKeyCode()==KeyEvent.VK_S){this.mt.setFangxiang(2);this.mt.xiangxia();}elseif(e.getKeyCode()==KeyEvent.VK_D){this.mt.setFangxiang(3);this.mt.xiangyou();}if(e.getKeyCode()==KeyEvent.VK_J){if(mt.aa.size()<3){this.mt.fszd();}}}publicvoidrun(){while(true){try{Thread.sleep(100);}catch(Exceptione){}for(inti=0;i<mt.aa.size();i++){zidanzd=mt.aa.get(i);if(zd.shengming){for(intj=0;j<ftq.size();j++){foeTankft=ftq.get(j);if(ft.shengming){this.jzdf(zd,ft);}}}this.repaint();}}}publicvoidjzdf(zidanzd,foeTankft){switch(zd.fangxiang){case0:case2:if(zd.x>ft.x&&zd.x<ft.x+20&&zd.y>ft.y&&zd.y<ft.y+30){zd.shengming=false;ft.shengming=false;}break;case1:case3:if(zd.x>ft.x&&zd.x<ft.x+30&&zd.y>ft.y&&zd.y<ft.y+20){zd.shengming=false;ft.shengming=false;}}this.repaint();}}classtank{intx=0;inty=0;intsudu=5;intfangxiang=0;booleanshengming=true;publicintgetX(){returnx;}publicintgetY(){returny;}publicvoidsetX(intx){this.x=x;}publicvoidsetY(inty){this.y=y;}publicintgetSudu(){returnsudu;}publicintgetFangxiang(){returnfangxiang;}publicvoidsetSudu(intsudu){this.sudu=sudu;}publicvoidsetFangxiang(intfangxiang){this.fangxiang=fangxiang;}publictank(intx,inty){this.x=x;this.y=y;}}classzidanimplementsRunnable{intx,y;intfangxiang;intsudu=5;booleanshengming=true;publiczidan(intx,inty,intfangxiang){this.x=x;this.y=y;this.fangxiang=fangxiang;}publicvoidrun(){while(true){try{Thread.sleep(30);}catch(Exceptione){}switch(fangxiang){case0:y-=sudu;break;case1:x-=sudu;break;case2:y+=sudu;break;case3:x+=sudu;break;}if(x<0||y<0||x>400||y>300){this.shengming=false;}}}}classmyTankextendstank{Vector<zidan>aa=newVector<zidan>();zidanzd=null;publicmyTank(intx,inty){super(x,y);}publicvoidxiangshang(){y-=sudu;}publicvoidxiangxia(){y+=sudu;}publicvoidxiangzuo(){x-=sudu;}publicvoidxiangyou(){x+=sudu;}publicvoidfszd(){switch(fangxiang){case0:zd=newzidan(x+10,y+15,0);aa.add(zd);break;case2:zd=newzidan(x+10,y+15,2);aa.add(zd);break;case1:zd=newzidan(x+15,y+10,1);aa.add(zd);break;case3:zd=newzidan(x+15,y+10,3);aa.add(zd);break;}Threadt=newThread(zd);t.start();}}classfoeTankextendstank{publicfoeTank(intx,inty){super(x,y);}}我这个程序,为什么子弹打中敌方坦克后不消失啊!代码我找不到原因,菜鸟求助!
解决方案
解决方案二:
调试,多调试吧