前期相关文章
【Java_项目篇<1>】–JAVA实现坦克大战游戏–画出坦克(一)
【Java_项目篇<1>】–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二)
【Java_项目篇<1>】–JAVA实现坦克大战游戏–坦克发射子弹(三)
一、任务需求
实现子弹连发(屏幕中子弹数量可控)+击中目标+爆炸效果。
二、思路
-子弹连发,并且子弹数量可控
1.在Hero类中新建Vector,每颗子弹存到Vector中。
Vector ss = new Vector();
2.在KeyPressed中加入按键J控制发射子弹,并且加入if语句,限制子弹数量。
if (e.getKeyCode() == KeyEvent.VK_J) {
// 开火
if (hero.ss.size() <= 4) {
hero.shotEnemy();
}
}
3.在paintComponet中画出子弹,如果子弹存在画出,子弹死亡,将子弹从vector中删除remove.
for (int i = 0; i < hero.ss.size(); i++) {
Shot myShot = hero.ss.get(i);
// 画出子弹
if (myShot.isLive == true) {
// System.out.format("%d %d ", hero.s.x,hero.s.y);
g.setColor(Color.red);
g.draw3DRect(myShot.x, myShot.y, 1, 1, false);
}
if (myShot.isLive == false) {
hero.ss.remove(myShot);// 记住是myShot 不是i
}
}
-判断击中目标
1.写一个函数专门判断: 子弹是否击中敌人坦克
hitTank(参数:子弹s,地方坦克et)当子弹进入到敌方坦克的区域内,将子弹和坦克都设置为islive=false表示死亡,在画图时进行存活判断,死亡后将不再画出该坦克和子弹。
public void hitTank(Shot s, EnemyTank et) {
// 判断该坦克的方向
switch (et.Direct) {
// 方向上或者下,是相同的
case 0:
case 1:
if (s.x > et.x && s.x < et.x + 20 && s.y > et.y && s.y < et.y + 30) {
// 击中,子弹死亡
s.isLive = false;
// 坦克死亡
et.isLive = false;
}
break;
// 方向左右,相同
case 2:
case 3:
if (s.x > et.x && s.x < et.x + 30 && s.y > et.y && s.y <= et.y + 20) {
s.isLive = false;
et.isLive = false;
}
break;
default:
break;
}
}
2.
三、代码如下
MyTankGame.java
members.java
四、程序演示