坦克大战预期目标

完成功能二和功能三,即
(二)增加关卡,不同关卡的地图难度、敌方坦克数量及玩家生命值都有改变
(三)增加玩家坦克的生命值,如被击中三次才会失败,退出游戏

改进思路:

不同关卡即地图(障碍物分布),种类、数量、敌人坦克数量都有不同,目前想到的方法是不同关卡调用不同的JAVA程序,每个程序中障碍物数量,敌人坦克数量均不同,主程序调用不同程序的信息实现不同关卡的功能
目前设计了三关。

第一关程序设计stage.java

import java.util.Vector;
public class Stage1 {public static Vector<Wood>woods=new Vector<>();
public static Vector<Metal>metals=new Vector<>();
public static Vector<EnemyTank>enemyTanks=new Vector<>();
public Hero hero =new Hero(500,600);public Hero getHero() {return hero;
}public void setHero(Hero hero) {this.hero = hero;
}public Vector<Wood> getWoods() {return woods;
}public Vector<Metal> getMetals() {return metals;
}public Vector<EnemyTank> getEnemyTanks() {return enemyTanks;
}
public void setWoods(Vector<Wood> woods) {Stage1.woods = woods;
}public  void setMetals(Vector<Metal> metals) {Stage1.metals = metals;
}public  void setEnemyTanks(Vector<EnemyTank> enemyTanks) {Stage1.enemyTanks = enemyTanks;
}//初始化地图,敌人坦克数量及速度
public  void initialzingMapOne() {for(int j=0;j<3;j++) { for(int i =0;i<6;i++) {woods.add(new Wood(80+j*120,80+40*i));}
}
for(int j=0;j<3;j++) { for(int i =0;i<6;i++) {woods.add(new Wood(640+j*120,80+40*i));}
}
for(int j=0;j<3;j++) { for(int i =0;i<5;i++) {woods.add(new Wood(80+j*120,530+40*i));}
}
for(int j=0;j<3;j++) { for(int i =0;i<5;i++) {woods.add(new Wood(640+j*120,530+40*i));}
}
for(int i =0;i<4;i++) {metals.add(new Metal(420+40*i,300));
}
for(int i =0;i<2;i++) {metals.add(new Metal(80+40*i,420));
}
for(int i =0;i<2;i++) {metals.add(new Metal(840+40*i,420));
}
metals.add(new Metal(480,160));
metals.add(new Metal(480,480));
metals.add(new Metal(320,380));
metals.add(new Metal(640,380));
for(int i =0;i<2;i++) {woods.add(new Wood(80+40*i,380));
}
for(int i =0;i<2;i++) {woods.add(new Wood(840+40*i,380));
}
//初始化敌人坦克数量
enemyTanks.add(new EnemyTank(10,10));
enemyTanks.add(new EnemyTank(480,240));
enemyTanks.add(new EnemyTank(810,20));
this.setEnemyTanks(enemyTanks);
this.setMetals(metals);
this.setWoods(woods);
hero.setX(500);hero.setSpeed(3);hero.setY(600);
hero.setLife(3);
this.setHero(hero);
}
}

MyPanel中调用

在MyPanel中创建stage1的实例对象,调用其障碍物,敌人坦克数量位置,玩家坦克信息。

第一关最终效果


同理设计出第二关和第三关,增加了草地类,不影响坦克行动,最终效果如下

第二关

第三关

玩家生命值增加

只需在Hero类中添加生命值属性,再加入对应的set,get方法,被子弹击中一次生命值减1。在绘图界面MyPanel上,加判断过程,玩家坦克生命值>0才画出,等于0时消除坦克
这里注意初始life一定不能不设置值,不设置就会默认为0。面板上不会画出坦克

public int life =3;public void reduceLife() {life--;}
public int getLife() {return life;}public void setLife(int life) {life = life;}

在MyPanel中碰撞坦克方法修改一下,如果敌人坦克被击中则消失,玩家坦克被击中,则生命值减1

public  void hitTank(Shot s,Tank tank) {switch(tank.getDirect()) {case 0://̹坦克向上case 2://̹坦克向下if(s.x>tank.getX()&&s.x<tank.getX()+40&&s.y>tank.getY()&&s.y<tank.getY()+60) {s.isLive=false;if(tank instanceof EnemyTank) {tank.isLive=false;//坦克被击中后就拿掉enemyTanks.remove(tank);}if(tank instanceof Hero) {hero.reduceLife();}//当我方击毁一个敌人坦克时,就对数据allEnemyTankNum++//因为此处坦克可以是hero坦克,也可以是enemyTank,if(tank instanceof EnemyTank) {Recorder.addAllEnemyTankNum();}//创建Bomb对象,加入到bombs集合Bomb bomb = new Bomb(tank.getX(),tank.getY());bombs.add(bomb);}case 1://向右case 3://向左if(s.x>tank.getX()&&s.x<tank.getX()+60&&s.y>tank.getY()&&s.y<tank.getY()+40) {s.isLive=false;if(tank instanceof EnemyTank) {tank.isLive=false;enemyTanks.remove(tank);}if(tank instanceof Hero) {hero.reduceLife();}if(tank instanceof EnemyTank) {Recorder.addAllEnemyTankNum();}Bomb bomb = new Bomb(tank.getX(),tank.getY());bombs.add(bomb);}}}

最后画坦克(paint方法)时增加一个判断,坦克生命值大于0才画

if(hero.getLife()>0) {//画出坦克drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),0);}

总结

目前已经实现了坦克游戏的基本功能,仍然有很多需要优化的地方。

JAVA坦克大战改进(二)相关推荐

  1. java坦克大战总体功能设计_Java坦克大战设计报告.doc

    Java坦克大战设计报告.doc <语言设计> 设计报告 信息工程学院专业班级:::指导老师:2011年7月22日 目录 目录2 题目一 坦克大战4 1.1题目简介4 1.2设计的内容.要 ...

  2. java 坦克大战_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  3. Unity3d之坦克大战(二)

    Unity3d之坦克大战(二) 这只是一个非常非常初级的教程.在 Unity3d之真机测试(上)我们创建了一个初级的坦克,今天继续坦克大战的游戏.下面开始吧: 1. 首先我们要创建一个炮弹.打开3DS ...

  4. java坦克大战课设报告_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  5. Java坦克大战游戏源码(java坦克大战)

    Java坦克大战游戏源码(java坦克大战) public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null ...

  6. Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计

    Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计 有图有真相 操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹, 开发思路是标准的游戏开发思路,单线程 ...

  7. JAVA坦克大战程序改进(一)

    坦克大战的改进(一) 预期目标 (一)增加障碍物(铁墙:子弹打不穿:木墙:被玩家或敌人坦克子弹打中后会消失),丰富游戏内容. 我的思路 (1)创建障碍物类 障碍物(父类)的成员属性包括障碍物坐标点x, ...

  8. 【java项目】全程无水分,Java老师带你实践,教你一小时做出java坦克大战游戏

    游戏介绍: 保留了射击类游戏的操作性,也改进了射击类游戏太过于复杂难玩的高门槛特点,集休闲与竞技于一身.经典再度袭来,流畅的画面,疯狂的战斗,让玩家再次进入疯狂坦克的世界.玩家的目标是控制坦克躲避危险 ...

  9. linux社区的java坦克大战,Java编程:坦克大战游戏的设计

    三.总结分析 其实坦克大战游戏设计的目的并不是想要单纯的做一个小游戏,二是为了加强对多线程的掌握,这一点我想应该可以通过游戏时一共运行二十二个线程来证实吧.尽管初衷比较单纯,但是设计过程之中却感觉自己 ...

最新文章

  1. python项目-马哥教育官网-专业Linux培训班,Python培训机构
  2. ASP.NET MVC过滤器(一)
  3. 浅谈Session与Cookie的关系
  4. 动态加载vs静态加载
  5. C++学习之路 | PTA乙级—— 1071 小赌怡情 (15 分)(精简)
  6. python 读取地震道头数据_【Python】OGR库(1):读取矢量数据
  7. 迅游科技拟作价27亿元收购移动应用开发商狮之吼
  8. c#打开数据库连接池的工作机制_它是谁?一个比 c3p0 快 200 倍的数据库连接池!...
  9. pytorch torch.rand
  10. JavaScript——语法
  11. python webbrowser_Python中webbrowser的用法
  12. 微软sql服务器双机热备,office2014-SQL Server2014 R2 双机热备,保护你的数据
  13. 半导体物理与器件_2017级光信息专业本科生选修课程:半导体物理与器件
  14. Android WiFi功能实现,知其然必知其所以然!(一)
  15. MongoDB可视化客户端管理工具之NoSQLbooster4mongo
  16. 扁平化风格pike admin后台模板
  17. windows-phone-power-tools [wp 安装部署xap]
  18. Qt之TableView使用
  19. 超级生产力的背后是强大的技术实力 央媒点赞小米“黑灯工厂”
  20. ATT推出云5G网络开源工具Airship

热门文章

  1. 解决kali安装搜狗输入法,apt-get install -f之后图形界面丢失问题
  2. Java将数组元素升序并输出
  3. 搭建本地服务器,并免费内网穿透实现外网访问
  4. 菜鸟也会Windows八大保密技巧
  5. HDU A simple stone game [K倍动态减法游戏]
  6. 基于深度学习LSTM分类进行故障检测(Matlab代码实现)
  7. VMware中如何更改虚拟机的内存大小?
  8. manjaro安装python_manjaro安装以及配置
  9. springboot连接sqlserver 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接解决方法
  10. HTTP流量拷贝测试神器GoReplay