当前位置: 首页 > 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.dnsts.com.cn/news/230122.html

相关文章:

  • 如何创建个人的网站24视频网站建设
  • 网站做系统叫什么名字吗佛山网站建设有哪些
  • 建设银行杭州纪念币预约网站想要学做网站
  • 荷兰网站域名擦边球网站做国内还是国外好
  • 河南企业网站建设公司高清图片素材网站推荐
  • 国外做的比较好的购物网站网站公司怎么做的好处
  • 珠海网站建设解决方案苏州工业园区两学一做教育网站
  • 做跨国婚恋网站赚钱吗网站收录时有时没有
  • 有网站前台如何做后台湖北省建设信息网站
  • 免费的做微博的网站模板wordpress 广告格子
  • 武义建设局网站建筑施工图纸培训班
  • 网站宣传的劣势郑州做网站茂睿科技
  • 广州网站搭建多少钱seo博客
  • 稻壳企业网站模板推广商
  • 企业网站意思页面设计的特点是什么
  • 网站关键词百度自然排名优化厦门网络推广专员
  • 让别人做网站的步骤网站统计开放平台
  • 美团初期是怎么建网站小程序登录入口网页版
  • 山西省建设厅入晋备案网站湘潭做网站出色磐石网络
  • 网站建设运行情况济南响应式网站开发
  • 网站开发属于哪个税收分类事件营销的经典案例
  • 石家庄公司建站wordpress多张页面左右滑动
  • 房屋中介做网站的登陆页面模板
  • 网套加工机器设备关键字优化策略
  • 温州市企业网站制作做自媒体必备的8个网站
  • 福州做网站设计上海网络维护服务公司
  • 全国网站建设公司有多少家全国企业系统网站建设
  • 深圳做网站的网络网站平台做推广方案
  • 安阳网站建设兼职域名注册 万网
  • 网站建设案例基本流程图做兼职的网站有哪些工作