当前位置: 首页 > news >正文

做最精彩的绳艺网站微信管理平台

做最精彩的绳艺网站,微信管理平台,换网站公司,智慧门店管理服务平台增加功能 我方坦克在发射的子弹消亡后#xff0c;才能发射新的子弹。同时实现发多颗子弹 1#xff0c;在按下J键#xff0c;我们判断当前hero对象的子弹#xff0c;是否已经销毁2#xff0c;如果没有销毁#xff0c;就不去触发shotEnemyTank3#xff0c;如果已经销毁才能发射新的子弹。同时实现发多颗子弹 1在按下J键我们判断当前hero对象的子弹是否已经销毁2如果没有销毁就不去触发shotEnemyTank3如果已经销毁才去触发shotEnemyTank4如果要发射多颗子弹就使用Vector保存hero类5在绘制我方子弹时需要遍历Vector在按键J时再次调用shotEnemyTank6如果需要控制在我们的面板上最多只有5颗子弹用if语句进行判断即可hero类 Hero类 import java.util.Vector;//自己的坦克继承坦克父类 public class Hero extends Tank {//定义一个Shot对象表示一个射击线程Shot shot null;//可以发射多颗子弹VectorShot shots new Vector();public Hero(int x, int y) {super(x, y);}public void shotEnemyTank(){//发多颗子弹怎么办 控制在我们的面板上最多只有5颗子弹if (shots.size()5){return;}//创建Shot对象根据当前Hero对象的位置和方向来创建Shotswitch (getDirect()){//得到Hero对象方向case 0://上shot new Shot(getX()20,getY(),0);break;case 1://右shot new Shot(getX()60,getY()20,1);break;case 2://下shot new Shot(getX()20,getY()60,2);break;case 3://左shot new Shot(getX(),getY()20,3);break;}//把新创建的shot放入到shots中shots.add(shot);//启动我们的shot线程new Thread(shot).start();} } 画板类 改变keyPressed方法 //当某个键按下该方法会触发Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() KeyEvent.VK_W) {//上//改变坦克方向hero.setDirect(0);//让坦克动起来if (hero.getY()0){hero.moveUp();}} else if (e.getKeyCode() KeyEvent.VK_S) {//下hero.setDirect(2);if (hero.getY()60750){hero.moveDown();}} else if (e.getKeyCode() KeyEvent.VK_A) {//左hero.setDirect(3);if (hero.getX()0){hero.moveLeft();}} else if (e.getKeyCode() KeyEvent.VK_D) {//右hero.setDirect(1);if (hero.getX()601000)hero.moveRight();}//如果用户按下的是J就发射if (e.getKeyCode() KeyEvent.VK_J) {//判断hero的子弹是否销毁---发射一颗子弹if (hero.shotnull|| !hero.shot.isLive) {//线程销毁后不代表shot对象为空,所以还需要判断shot的声明周期才可以继续发子弹hero.shotEnemyTank();}//发射多颗子弹hero.shotEnemyTank();}//重绘repaint();}在paint方法中遍历Vector集合 Overridepublic void paint(Graphics g) {super.paint(g);//3通过画笔填充一个矩形区域 g.fillRect();g.fillRect(0, 0, 1000, 750);//填充矩形默认为黑色//画出自己的坦克drawTank(hero.getX(), hero.getY(), g, hero.getDirect(), 1); // drawTank(hero.getX() 100,hero.getY(),g,hero.getDirect(),0); // drawTank(hero.getX() 200,hero.getY(),g,hero.getDirect(),0); // drawTank(hero.getX() 300,hero.getY(),g,hero.getDirect(),1);//判断何时画子弹 // if (hero.shot ! null hero.shot.isLive true) { // g.setColor(Color.white); // g.draw3DRect(hero.shot.x, hero.shot.y, 1, 1, false); // // }//将hero的子弹集合shots遍历取出绘制for (int i 0; i hero.shots.size(); i) {Shot shot hero.shots.get(i);if (shot ! null shot.isLive true) {g.setColor(Color.white);g.draw3DRect(shot.x, shot.y, 1, 1, false);}else {//如果该shot对象已经无效就从shots集合中拿掉hero.shots.remove(shot);}}//如果bombs 集合中有对象就画出for (int i 0; i bombs.size(); i) {//取出来炸弹Bomb bomb bombs.get(i);//根据当前这个bomb对象的life值去画出对应的图片if (bomb.life 6) {g.drawImage(image1, bomb.x, bomb.y, 60, 60, this);} else if (bomb.life 3) {g.drawImage(image2, bomb.x, bomb.y, 60, 60, this);} else {g.drawImage(image3, bomb.x, bomb.y, 60, 60, this);}//让这个炸弹的生命值减少bomb.lifeDown();//如果 bomb life 为0 就从bombs的集合中删除if (bomb.life 0) {bombs.remove(bomb);}}//画出敌人的坦克for (int i 0; i enemyTanks.size(); i) {//从Vector取出坦克EnemyTank enemyTank enemyTanks.get(i);//判断当前坦克是否还存活if (enemyTank.isLive) {//当敌人坦克时存活的才画出该坦克drawTank(enemyTank.getX(), enemyTank.getY(), g, enemyTank.getDirect(), 0);//画出 enemyTank 所有子弹for (int j 0; j enemyTank.shots.size(); j) {//取出子弹Shot shot enemyTank.shots.get(j);//绘制if (shot.isLive) {//isLivetrueg.setColor(Color.white);g.draw3DRect(shot.x, shot.y, 1, 1, false);} else {//从Vector 移除enemyTank.shots.remove(shot);}}}}}让敌人坦克发射的子弹消亡后可以再发射子弹 1在敌人坦克类中的run方法中判断 Vector集合的数量2如果仍然存活且数量小于1则执行相关业务代码 //敌人坦克 public class EnemyTank extends Tank implements Runnable {//给敌人坦克类使用Vector 保存多个ShotVectorShot shots new Vector();//定义敌人坦克的存货属性boolean isLive true;public EnemyTank(int x, int y) {super(x, y);}Overridepublic void run() {while (true) {//这里我们判断如果shots size 0; 创建一颗子弹放入到shots集合并启动if (isLiveshots.size()1){Shot s null;//判断坦克的方向创建对应的子弹switch (getDirect()){case 0:snew Shot(getX()20,getY(),0);case 1:snew Shot(getX()60,getY()20,0);case 2:snew Shot(getX()20,getY()60,0);case 3:snew Shot(getX(),getY()20,0);}shots.add(s);new Thread(s).start();}switch (getDirect()) {//根据坦克的方向来进行移动case 0://向上//让坦克保持一个方向走30步for (int i 0; i 30; i) {if (getY()0){moveUp();}//休眠50好眠try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}}break;case 1://向右//让坦克保持一个方向走30步for (int i 0; i 30; i) {if (getX()601000){moveRight();}//休眠50好眠try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}}break;case 2://向下//让坦克保持一个方向走30步for (int i 0; i 30; i) {if (getY()60750){moveDown();}//休眠50好眠try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}}break;case 3://向左//让坦克保持一个方向走30步for (int i 0; i 10; i) {if (getX()0){moveLeft();}//休眠50好眠try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}}break;}//休眠50好眠try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}// 然后随机的改变坦克方向0-3setDirect((int) (Math.random() * 4)); //0-3//一旦写并发程序一定要考虑清楚该线程什么时候结束if (!isLive) {break;}}} } 当敌人的坦克击中我方坦克时我方坦克消失并出现爆炸效果 1编写方法判断敌人坦克是否击中我方坦克2在run方法中调用该方法 //画板类 public class MyPanel extends JPanel implements KeyListener, Runnable {//定义我的坦克Hero hero null;//定义敌人坦克放入到Vector线程安全可以有多个VectorEnemyTank enemyTanks new Vector();int enemyTankSize 3;//定义一个Vector用于存放炸弹炸弹既不属于我方坦克也不属于地方坦克 所以坦克放在画板类//当我们的子弹击中坦克时就加入一个Bomb对象到bombsVectorBomb bombs new Vector();//定义三张炸弹图片用于显示爆炸效果Image image1 null;Image image2 null;Image image3 null;public MyPanel() {//初始化自己的坦克hero new Hero(100, 100);hero.setSpeed(5);//初始化敌人的坦克for (int i 0; i enemyTankSize; i) {//创建一个敌人的坦克EnemyTank enemyTank new EnemyTank(100 * (i 1), 0);//启动敌人坦克线程让他动起来new Thread(enemyTank).start();//设置方向enemyTank.setDirect(2);//给该enemyTank 加入一颗子弹Shot shot new Shot(enemyTank.getX() 20, enemyTank.getY() 60, enemyTank.getDirect());enemyTank.shots.add(shot);//启动shot对象new Thread(shot).start();//把敌人的坦克加入的总的坦克对象中enemyTanks.add(enemyTank);} // image1 Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(/1.gif)); // image2 Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(/2.gif)); // image3 Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(/3.gif));//初始化照片对象image1 new ImageIcon(image/1.gif).getImage();image2 new ImageIcon(image/2.gif).getImage();image3 new ImageIcon(image/3.gif).getImage();}Overridepublic void paint(Graphics g) {super.paint(g);//3通过画笔填充一个矩形区域 g.fillRect();g.fillRect(0, 0, 1000, 750);//填充矩形默认为黑色if (hero ! null hero.isLive){//画出自己的坦克drawTank(hero.getX(), hero.getY(), g, hero.getDirect(), 1);} // drawTank(hero.getX() 100,hero.getY(),g,hero.getDirect(),0); // drawTank(hero.getX() 200,hero.getY(),g,hero.getDirect(),0); // drawTank(hero.getX() 300,hero.getY(),g,hero.getDirect(),1);//判断何时画子弹 // if (hero.shot ! null hero.shot.isLive true) { // g.setColor(Color.white); // g.draw3DRect(hero.shot.x, hero.shot.y, 1, 1, false); // // }//将hero的子弹集合shots遍历取出绘制for (int i 0; i hero.shots.size(); i) {Shot shot hero.shots.get(i);if (shot ! null shot.isLive true) {g.setColor(Color.white);g.draw3DRect(shot.x, shot.y, 1, 1, false);}else {//如果该shot对象已经无效就从shots集合中拿掉hero.shots.remove(shot);}}//如果bombs 集合中有对象就画出for (int i 0; i bombs.size(); i) {//取出来炸弹Bomb bomb bombs.get(i);//根据当前这个bomb对象的life值去画出对应的图片if (bomb.life 6) {g.drawImage(image1, bomb.x, bomb.y, 60, 60, this);} else if (bomb.life 3) {g.drawImage(image2, bomb.x, bomb.y, 60, 60, this);} else {g.drawImage(image3, bomb.x, bomb.y, 60, 60, this);}//让这个炸弹的生命值减少bomb.lifeDown();//如果 bomb life 为0 就从bombs的集合中删除if (bomb.life 0) {bombs.remove(bomb);}}//画出敌人的坦克for (int i 0; i enemyTanks.size(); i) {//从Vector取出坦克EnemyTank enemyTank enemyTanks.get(i);//判断当前坦克是否还存活if (enemyTank.isLive) {//当敌人坦克时存活的才画出该坦克drawTank(enemyTank.getX(), enemyTank.getY(), g, enemyTank.getDirect(), 0);//画出 enemyTank 所有子弹for (int j 0; j enemyTank.shots.size(); j) {//取出子弹Shot shot enemyTank.shots.get(j);//绘制if (shot.isLive) {//isLivetrueg.setColor(Color.white);g.draw3DRect(shot.x, shot.y, 1, 1, false);} else {//从Vector 移除enemyTank.shots.remove(shot);}}}}}/*int x 坦克的横坐标int y 坦克的纵坐标Graphics g 画笔int direct 坦克的方向int type 坦克的类型*/public void drawTank(int x, int y, Graphics g, int direct, int type) {switch (type) {case 0://敌人的坦克g.setColor(Color.cyan);break;case 1://我的坦克g.setColor(Color.yellow);break;}//根据坦克的方向来绘制坦克//direct表示方法 0向上 1向右 2向下 3向左switch (direct) {case 0://表示向上g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子g.fill3DRect(x 30, y, 10, 60, false);//画出坦克右边轮子g.fill3DRect(x 10, y 10, 20, 40, false);//画出坦克盖子g.fillOval(x 10, y 20, 20, 20);//画出圆形盖子g.drawLine(x 20, y 30, x 20, y);//画出炮筒break;case 1://表示向右g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子g.fill3DRect(x, y 30, 60, 10, false);//画出坦克下边轮子g.fill3DRect(x 10, y 10, 40, 20, false);//画出坦克盖子g.fillOval(x 20, y 10, 20, 20);//画出圆形盖子g.drawLine(x 30, y 20, x 60, y 20);//画出炮筒break;case 2://表示向下g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子g.fill3DRect(x 30, y, 10, 60, false);//画出坦克右边轮子g.fill3DRect(x 10, y 10, 20, 40, false);//画出坦克盖子g.fillOval(x 10, y 20, 20, 20);//画出圆形盖子g.drawLine(x 20, y 30, x 20, y 60);//画出炮筒break;case 3://表示向左g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子g.fill3DRect(x, y 30, 60, 10, false);//画出坦克下边轮子g.fill3DRect(x 10, y 10, 40, 20, false);//画出坦克盖子g.fillOval(x 20, y 10, 20, 20);//画出圆形盖子g.drawLine(x 30, y 20, x, y 20);//画出炮筒break;default:System.out.println(暂时没有处理);}}//编写方法判断敌人坦克是否击中我方坦克public void hitHero(){//遍历所有的敌人坦克for (int i 0; i enemyTanks.size(); i) {//取出敌人坦克EnemyTank enemyTank enemyTanks.get(i);//遍历enemyTank 对象的所有子弹for (int j 0; j enemyTank.shots.size(); j) {//取出子弹Shot shot enemyTank.shots.get(j);//判断shot 是否击中我的坦克if (hero.isLiveshot.isLive){hitTank( shot,hero);}}}}public void hitEnemy(){//判断我们的子弹是否击中了敌人坦克if (hero.shot ! null hero.shot.isLive) {//当我方的子弹还存活//遍历敌人所有的坦克for (int i 0; i enemyTanks.size(); i) {EnemyTank enemyTank enemyTanks.get(i);hitTank(hero.shot, enemyTank);}}}//编写方法判断我方子弹是否击敌人坦克//什么时候判断我方坦克是否击中敌人坦克 run方法public void hitTank(Shot s, Tank tank) {//判断s 击中坦克switch (tank.getDirect()) {case 0://敌人坦克向上case 2://敌人坦克向下if (s.x tank.getX() s.y tank.getY() 40 s.y tank.getY() s.y tank.getY() 60) {s.isLive false;tank.isLive false;//当我的子弹击中敌人坦克后将enenmyTank 从Vector 拿掉enemyTanks.remove(tank);//这里敌人坦克被击中//创建Bomb对象加入到bombs集合Bomb bomb new Bomb(tank.getX(), tank.getY());bombs.add(bomb);}break;case 1://敌人坦克向右case 3://敌人坦克向下if (s.x tank.getX() s.y tank.getY() 60 s.y tank.getY() s.y tank.getY() 40) {s.isLive false;tank.isLive false;Bomb bomb new Bomb(tank.getX(), tank.getY());bombs.add(bomb);}break;}}//有字符输出时该方法就会触发Overridepublic void keyTyped(KeyEvent e) {}//当某个键按下该方法会触发Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() KeyEvent.VK_W) {//上//改变坦克方向hero.setDirect(0);//让坦克动起来if (hero.getY()0){hero.moveUp();}} else if (e.getKeyCode() KeyEvent.VK_S) {//下hero.setDirect(2);if (hero.getY()60750){hero.moveDown();}} else if (e.getKeyCode() KeyEvent.VK_A) {//左hero.setDirect(3);if (hero.getX()0){hero.moveLeft();}} else if (e.getKeyCode() KeyEvent.VK_D) {//右hero.setDirect(1);if (hero.getX()601000)hero.moveRight();}//如果用户按下的是J就发射if (e.getKeyCode() KeyEvent.VK_J) {//判断hero的子弹是否销毁---发射一颗子弹if (hero.shotnull|| !hero.shot.isLive) {//线程销毁后不代表shot对象为空,所以还需要判断shot的声明周期才可以继续发子弹hero.shotEnemyTank();}//发射多颗子弹hero.shotEnemyTank();}//重绘repaint();}//当某个键释放(松开)该方法会触发Overridepublic void keyReleased(KeyEvent e) {}//添加线程的方法确保子弹可以重绘Overridepublic void run() {//每隔 100毫秒重绘区域刷新绘图区域子弹就移动while (true) {try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}//判断我们坦克是否击中别人hitEnemy();//判断敌人坦克是否击中我们hitHero();this.repaint();}} }
http://www.w-s-a.com/news/913525/

相关文章:

  • 品牌网站建设的关键事项设计网有哪些
  • 网站没收录徐州建设工程审图中心网站
  • 网站建设记账做什么科目erp系统有哪些软件
  • 泰拳图片做网站用哪里有做空包网站的
  • 查外链网站重庆做网站微信的公司
  • 有没有外包活的网站如何做网站快捷键的元素
  • 公司网站赏析网站制作2019趋势
  • 企业进行网站建设的方式有( )推广引流违法吗
  • 按营销型网站要求重做网站 费用点金网站建设
  • 深圳做网站互联网服务
  • 网站sem托管wordpress安装无法连接数据库
  • 深圳网站建设开发公司哪家好微信小程序商家入口
  • 江门站排名优化建立什么网站赚钱
  • 科普文章在那个网站做招聘网站代做
  • 监控设备东莞网站建设游戏网站域名
  • 对商家而言网站建设的好处网址导航怎么彻底删除
  • app设计网站模板企业展厅策划设计公司有哪些
  • wordpress销售主题手机网站关键词优化
  • 怎么查一个网站是什么程序做的三亚城乡建设局网站
  • 深圳分销网站设计公司做网站一般需要多久
  • 企业网站设计代码丹东seo排名公司
  • 企业网站建设定制开发服务网站建设说课ppt
  • 大连市城乡建设局网站网站免费网站入口
  • 做暧网站网站备案ps
  • 知名网站建设公司电话长子网站建设
  • 网站建设的意义与目的建立什么船籍港
  • 广州注册公司营业执照网站建设代码优化
  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计