坦克大战学习中
在跟老师的学习中,自己增加了一个功能,就是当自己坦克跟敌人坦克碰撞的时候,就发生爆炸的效果;想了好久,非常开心,虽然代码还要优化,但是能先展示出功能,就非常满意了,毕竟对学了两个月的java的我是巨大的鼓励,坚持住
package com.hsp.tankpracticetest;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
/**
* @author jessica~
* @version 1.0
*/
public class MyPanel extends JPanel implements KeyListener ,Runnable{
MyTank myTank;
Vector<EnemyTank> enemyTanks = new Vector<>();
int enemySize = 4;
//炸弹是属于画板的
Vector<Bomb> bombs = new Vector<>();
Image image1 = null;
Image image2 = null;
Image image3 = null;
public MyPanel() {
myTank = new MyTank(500, 200);
for (int i = 0; i < enemySize; i++) {
EnemyTank enemyTank = new EnemyTank(100 * (i + 1), 0);
//初始化的时候把这个坦克集合设置起来
enemyTank.setEnemyTanks(enemyTanks);
enemyTank.setDir(2);
enemyTanks.add(enemyTank);
new Thread(enemyTank).start();
}
image1 = Toolkit.getDefaultToolkit().getImage(MyPanel.class.getResource("/bomb_1.gif"));
image2 = Toolkit.getDefaultToolkit().getImage(MyPanel.class.getResource("/bomb_2.gif"));
image3 = Toolkit.getDefaultToolkit().getImage(MyPanel.class.getResource("/bomb_3.gif"));
}
//这个功能是实现自己坦克跟敌人坦克相碰的时候,两个坦克都爆炸的效果
//我做了两个部分
//这个部分是只要实现一辆敌人坦克和我的坦克相碰,就返回false
public Boolean isTouchETank1(EnemyTank enemyTank,MyTank myTank){
switch (myTank.getDir()){
case 0://up
//不能和自己比较,自己比较的化,就永远碰撞
//只要比较对象就可以了
//敌人的其它坦克向上/向下
//敌人坦克x的范围x,x+40
//y 的范围是y ,y+60
if(enemyTank.getDir() == 0 ||enemyTank.getDir() ==2){
//当前坦克左上角x,y
if(myTank.x >= enemyTank.x &&myTank.x <= enemyTank.x+40
&&myTank.y >=enemyTank.y && myTank.y <= enemyTank.y+60){
return true;
}
//右上角x+40,y
if(myTank.x+40 >= enemyTank.x &&myTank.x+40 <= enemyTank.x+40
&&myTank.y >=enemyTank.y && myTank.y <= enemyTank.y+60){
return true;
}
//敌人坦克左和右
//范围x,x+60;y,y+40
}
if(enemyTank.getDir() == 3 ||enemyTank.getDir() ==1){
//左上角
if(myTank.x >= enemyTank.x &&myTank.x <= enemyTank.x+60
&&myTank.y >=enemyTank.y && myTank.y <= enemyTank.y+40){
return true;
}
//右上角x+40,y
if(myTank.x+40 >= enemyTank.x &&myTank.x+40 <= enemyTank.x+60
&&myTank.y >=enemyTank.y && myTank.y <= enemyTank.y+40){
return true;
}
}
break;
case 1://right
//不能和自己比较,自己比较的化,就永远碰撞
//只要比较对象就可以了
//敌人的其它坦克向上/向下
//敌人坦克x的范围x,x+40
//y 的范围是y ,y+60
if(enemyTank.getDir() == 0 ||enemyTank.getDir() ==2){
//当前坦克右上角x+60,y
if(myTank.x+60 >= enemyTank.x &&myTank.x+60 <= enemyTank.x+40
&&myTank.y >=enemyTank.y && myTank.y <= enemyTank.y+60){
return true;
}
//右下角x+60,y+40
if(myTank.x+60 >= enemyTank.x &&myTank.x+60 <= enemyTank.x+40
&&myTank.y+40 >=enemyTank.y && myTank.y+40 <= enemyTank.y+60){
return true;
}
//敌人坦克左和右
//范围x,x+60;y,y+40
}
if(enemyTank.getDir() == 3 ||enemyTank.getDir() ==1){
//右上角
if(myTank.x+60 >= enemyTank.x &&myTank.x+60 <= enemyTank.x+60
&&myTank.y >=enemyTank.y && myTank.y <= enemyTank.y+40){
return true;
}
//右下角x+60,y+40
if(myTank.x+60 >= enemyTank.x &&myTank.x+60 <= enemyTank.x+60
&&myTank.y+40 >=enemyTank.y && myTank.y+40 <= enemyTank.y+40){
return true;
}
}
break;
case 2://down
//不能和自己比较,自己比较的化,就永远碰撞
//只要比较对象就可以了
//敌人的其它坦克向上/向下
//敌人坦克x的范围x,x+40
//y 的范围是y ,y+60
if(enemyTank.getDir() == 0 ||enemyTank.getDir() ==2){
//当前坦克左下角x,y+60
if(myTank.x >= enemyTank.x &&myTank.x <= enemyTank.x+40
&&myTank.y+60 >=enemyTank.y && myTank.y+60 <= enemyTank.y+60){
return true;
}
//右下角x+40,y+60
if(myTank.x+40 >= enemyTank.x &&myTank.x+40 <= enemyTank.x+40
&&myTank.y+60 >=enemyTank.y && myTank.y+60 <= enemyTank.y+60){
return true;
}
//敌人坦克左和右
//范围x,x+60;y,y+40
}
if(enemyTank.getDir() == 3 ||enemyTank.getDir() ==1){
//当前坦克左下角x,y+60
if(myTank.x >= enemyTank.x &&myTank.x <= enemyTank.x+60
&&myTank.y+60 >=enemyTank.y && myTank.y+60 <= enemyTank.y+40){
return true;
}
//右下角x+40,y+60
if(myTank.x+40 >= enemyTank.x &&myTank.x+40 <= enemyTank.x+60
&&myTank.y+60 >=enemyTank.y && myTank.y+60 <= enemyTank.y+40){
return true;
}
}
break;
case 3://left
//不能和自己比较,自己比较的化,就永远碰撞
//只要比较对象就可以了
//敌人的其它坦克向上/向下
//敌人坦克x的范围x,x+40
//y 的范围是y ,y+60
if(enemyTank.getDir() == 0 ||enemyTank.getDir() ==2){
//当前坦克左上角x,y
if(myTank.x >= enemyTank.x &&myTank.x <= enemyTank.x+40
&&myTank.y >=