JAVA坦克大战改进(二)
坦克大战预期目标
完成功能二和功能三,即
(二)增加关卡,不同关卡的地图难度、敌方坦克数量及玩家生命值都有改变
(三)增加玩家坦克的生命值,如被击中三次才会失败,退出游戏
改进思路:
不同关卡即地图(障碍物分布),种类、数量、敌人坦克数量都有不同,目前想到的方法是不同关卡调用不同的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坦克大战改进(二)相关推荐
- java坦克大战总体功能设计_Java坦克大战设计报告.doc
Java坦克大战设计报告.doc <语言设计> 设计报告 信息工程学院专业班级:::指导老师:2011年7月22日 目录 目录2 题目一 坦克大战4 1.1题目简介4 1.2设计的内容.要 ...
- java 坦克大战_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
- Unity3d之坦克大战(二)
Unity3d之坦克大战(二) 这只是一个非常非常初级的教程.在 Unity3d之真机测试(上)我们创建了一个初级的坦克,今天继续坦克大战的游戏.下面开始吧: 1. 首先我们要创建一个炮弹.打开3DS ...
- java坦克大战课设报告_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
- Java坦克大战游戏源码(java坦克大战)
Java坦克大战游戏源码(java坦克大战) public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null ...
- Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计
Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计 有图有真相 操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹, 开发思路是标准的游戏开发思路,单线程 ...
- JAVA坦克大战程序改进(一)
坦克大战的改进(一) 预期目标 (一)增加障碍物(铁墙:子弹打不穿:木墙:被玩家或敌人坦克子弹打中后会消失),丰富游戏内容. 我的思路 (1)创建障碍物类 障碍物(父类)的成员属性包括障碍物坐标点x, ...
- 【java项目】全程无水分,Java老师带你实践,教你一小时做出java坦克大战游戏
游戏介绍: 保留了射击类游戏的操作性,也改进了射击类游戏太过于复杂难玩的高门槛特点,集休闲与竞技于一身.经典再度袭来,流畅的画面,疯狂的战斗,让玩家再次进入疯狂坦克的世界.玩家的目标是控制坦克躲避危险 ...
- linux社区的java坦克大战,Java编程:坦克大战游戏的设计
三.总结分析 其实坦克大战游戏设计的目的并不是想要单纯的做一个小游戏,二是为了加强对多线程的掌握,这一点我想应该可以通过游戏时一共运行二十二个线程来证实吧.尽管初衷比较单纯,但是设计过程之中却感觉自己 ...
最新文章
- python项目-马哥教育官网-专业Linux培训班,Python培训机构
- ASP.NET MVC过滤器(一)
- 浅谈Session与Cookie的关系
- 动态加载vs静态加载
- C++学习之路 | PTA乙级—— 1071 小赌怡情 (15 分)(精简)
- python 读取地震道头数据_【Python】OGR库(1):读取矢量数据
- 迅游科技拟作价27亿元收购移动应用开发商狮之吼
- c#打开数据库连接池的工作机制_它是谁?一个比 c3p0 快 200 倍的数据库连接池!...
- pytorch torch.rand
- JavaScript——语法
- python webbrowser_Python中webbrowser的用法
- 微软sql服务器双机热备,office2014-SQL Server2014 R2 双机热备,保护你的数据
- 半导体物理与器件_2017级光信息专业本科生选修课程:半导体物理与器件
- Android WiFi功能实现,知其然必知其所以然!(一)
- MongoDB可视化客户端管理工具之NoSQLbooster4mongo
- 扁平化风格pike admin后台模板
- windows-phone-power-tools [wp 安装部署xap]
- Qt之TableView使用
- 超级生产力的背后是强大的技术实力 央媒点赞小米“黑灯工厂”
- ATT推出云5G网络开源工具Airship
热门文章
- 解决kali安装搜狗输入法,apt-get install -f之后图形界面丢失问题
- Java将数组元素升序并输出
- 搭建本地服务器,并免费内网穿透实现外网访问
- 菜鸟也会Windows八大保密技巧
- HDU A simple stone game [K倍动态减法游戏]
- 基于深度学习LSTM分类进行故障检测(Matlab代码实现)
- VMware中如何更改虚拟机的内存大小?
- manjaro安装python_manjaro安装以及配置
- springboot连接sqlserver 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接解决方法
- HTTP流量拷贝测试神器GoReplay