坦克大战-敌我坦克碰撞

坦克大战学习中

在跟老师的学习中,自己增加了一个功能,就是当自己坦克跟敌人坦克碰撞的时候,就发生爆炸的效果;想了好久,非常开心,虽然代码还要优化,但是能先展示出功能,就非常满意了,毕竟对学了两个月的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 >=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值