当前位置:网站首页>Prevent enemy tanks from overlapping
Prevent enemy tanks from overlapping
2022-06-11 18:37:00 【C_ x_ three hundred and thirty】
️*️ Prevent enemy tanks from overlapping
| 4 Categories: | 8 In this case | |||
|---|---|---|---|---|
| On my own | Up and down the enemy | Around the enemy | top left corner | Upper right corner |
| You are right | Up and down the enemy | Around the enemy | Upper right corner | The lower right corner |
| I've done it | Up and down the enemy | Around the enemy | The lower left corner | The lower right corner |
| Self left | Up and down the enemy | Around the enemy | top left corner | The lower left corner |
Optimize enemy tanks
package com.Cx_330.TankGame4;
import java.util.Vector;
public class EnemyTank extends Tank implements Runnable{
// To determine whether or not to survive
boolean leap=true;
Shot shot=null;
// The number of bullets in the tank
Vector<Shot> shots=new Vector<>();
int loc;
// Get enemy tank collection
Vector<EnemyTank> enemyTanks=new Vector<>();
public void setEnemyTanks(Vector<EnemyTank> enemyTanks) {
this.enemyTanks = enemyTanks;
}
public EnemyTank(int x, int y) {
super(x, y);
}
public boolean isRunTank(){
/* 4 Categories: 8 In this case On my own Up and down the enemy Around the enemy top left corner Upper right corner You are right Up and down the enemy Around the enemy Upper right corner The lower right corner I've done it Up and down the enemy Around the enemy The lower left corner The lower right corner Self left Up and down the enemy Around the enemy top left corner The lower left corner */
// First get the direction of the tank to be judged
switch (this.getDirect()){
case 0:// On
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank!=this){
// Other tanks : When up or down x Range [x,x+40] y Range [y,y+60]
if(enemyTank.getDirect()==0||enemyTank.getDirect()==2){
// top left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+40
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+60){
return false;
}
// Upper right corner
if(getX()+40>=enemyTank.getX()&&getX()+40<=enemyTank.getX()+40
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+60){
return false;
}
}
// Other tanks : When left or right x Range [x,x+60] y Range [y,y+40]
if(enemyTank.getDirect()==1||enemyTank.getDirect()==3){
// top left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+60
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+40){
return false;
}
// Upper right corner
if(getX()+40>=enemyTank.getX()&&getX()+40<=enemyTank.getX()+60
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+40){
return false;
}
}
}
}
break;
case 1:// Right
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank!=this){
// Other tanks : When up or down x Range [x,x+40] y Range [y,y+60]
if(enemyTank.getDirect()==0||enemyTank.getDirect()==2){
// Upper right corner
if(getX()+60>=enemyTank.getX()&&getX()+60<=enemyTank.getX()+40
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+60){
return false;
}
// The lower right corner
if(getX()+60>=enemyTank.getX()&&getX()+60<=enemyTank.getX()+40
&&getY()+40>=enemyTank.getY()&&getY()+40<=enemyTank.getY()+60){
return false;
}
}
// Other tanks : When left or right x Range [x,x+60] y Range [y,y+40]
if(enemyTank.getDirect()==1||enemyTank.getDirect()==3){
// Upper right corner
if(getX()+60>=enemyTank.getX()&&getX()+60<=enemyTank.getX()+60
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+40){
return false;
}
// The lower right corner
if(getX()+60>=enemyTank.getX()&&getX()+60<=enemyTank.getX()+60
&&getY()+40>=enemyTank.getY()&&getY()+40<=enemyTank.getY()+40){
return false;
}
}
}
}
break;
case 2:// Next
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank!=this){
// Other tanks : When up or down x Range [x,x+40] y Range [y,y+60]
if(enemyTank.getDirect()==0||enemyTank.getDirect()==2){
// The lower left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+40
&&getY()+60>=enemyTank.getY()&&getY()+60<=enemyTank.getY()+60){
return false;
}
// The lower right corner
if(getX()+40>=enemyTank.getX()&&getX()+40<=enemyTank.getX()+40
&&getY()+60>=enemyTank.getY()&&getY()+60<=enemyTank.getY()+60){
return false;
}
}
// Other tanks : When left or right x Range [x,x+60] y Range [y,y+40]
if(enemyTank.getDirect()==1||enemyTank.getDirect()==3){
// top left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+60
&&getY()+60>=enemyTank.getY()&&getY()+60<=enemyTank.getY()+40){
return false;
}
// Upper right corner
if(getX()+40>=enemyTank.getX()&&getX()+40<=enemyTank.getX()+60
&&getY()+60>=enemyTank.getY()&&getY()+60<=enemyTank.getY()+40){
return false;
}
}
}
}
break;
case 3:// Left
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank!=this){
// Other tanks : When up or down x Range [x,x+40] y Range [y,y+60]
if(enemyTank.getDirect()==0||enemyTank.getDirect()==2){
// top left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+40
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+60){
return false;
}
// The lower left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+40
&&getY()+40>=enemyTank.getY()&&getY()+40<=enemyTank.getY()+60){
return false;
}
}
// Other tanks : When left or right x Range [x,x+60] y Range [y,y+40]
if(enemyTank.getDirect()==1||enemyTank.getDirect()==3){
// top left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+60
&&getY()>=enemyTank.getY()&&getY()<=enemyTank.getY()+40){
return false;
}
// The lower left corner
if(getX()>=enemyTank.getX()&&getX()<=enemyTank.getX()+60
&&getY()+40>=enemyTank.getY()&&getY()+40<=enemyTank.getY()+40){
return false;
}
}
}
}
break;
}
return true;
}
@Override
public void run() {
while (true) {
// Set the maximum number of bullets fired by the enemy
if(leap&&shots.size()<3){
switch (getDirect()){
case 0:
shot=new Shot(getX()+20,getY(),0);
break;
case 1:
shot=new Shot(getX()+60,getY()+20,1);
break;
case 2:
shot=new Shot(getX()+20,getY()+60,2);
break;
case 3:
shot=new Shot(getX(),getY()+20,3);
break;
}
shots.add(shot);
new Thread(shot).start();
}
boolean tag=true;
// Enemy tanks move
switch (getDirect()) {
case 0:
for (int i = 0; i < 30; i++) {
if(getY()>0&&isRunTank()){
moveUp();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
break;
case 1:
for (int i = 0; i < 30; i++) {
if (getX()+60<1000&&isRunTank()){
moveRight();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
break;
case 2:
for (int i = 0; i < 30; i++) {
if (getY()+60<750&&isRunTank()){
moveDown();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
break;
case 3:
for (int i = 0; i < 30; i++) {
if (getX()>0&&isRunTank()){
moveLeft();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
break;
}
setDirect((int) (Math.random() * 4));
if (leap==false){
break;
}
}
}
}
边栏推荐
- On the problem that the while loop condition in keil does not hold but cannot jump out
- Mysql从0到1的完全深入学习--阶段二---基础篇
- Some problems of DC-DC bootstrap capacitor
- [golang] leetcode - 349 Intersection of two arrays (hash table)
- *Jetpack notes understanding of lifecycle ViewModel and livedata
- 为何TI的GPMC并口,更常被用于连接FPGA、ADC?我给出3个理由
- 己方坦克发射子弹
- 软件测试技术复习
- 5分钟了解攻防演练中的红蓝紫
- 「案例分享」基于 AM57x+ Artix-7 FPGA开发板——PRU开发手册详解
猜你喜欢

力扣刷题——二叉树的层序遍历Ⅱ

Why is ti's GPMC parallel port more often used to connect FPGA and ADC? I give three reasons
![[c language] shift elements after sorting elements of an array](/img/5b/3e74fc40787d94f6d0ab93332140ba.png)
[c language] shift elements after sorting elements of an array

2022-2023年西安交通大学管理学院MEM提前批面试网报通知

*Use of jetpack notes room

Niu Ke's question -- finding the least common multiple

The nearest common ancestor of binary tree

Balanced search binary tree -- AVL tree

v-for循环遍历

使用mysql判断日期是星期几
随机推荐
力扣刷题——二叉树的最近公共祖先
用户组的操作
如何在 SAP BTP 上 手动执行 workflow
2023年西安交通大学管理学院MPAcc提前批面试网报通知
排序的循环链表
[c language] compress strings and add markup characters
Niu Ke's question -- finding the least common multiple
论工作流选型
Easycwmp source code analysis
互联网_业务分析概述
H.264概念
HashSet collection
Force deduction questions -- create a string based on a binary tree
北京邮电大学2023级工商管理硕士MBA(非全日制)已开启
JS实现全屏展示的具体方法
Feign shares login information for request
[Golang]力扣Leetcode - 292. Nim 游戏(数学)
力扣33题,搜索旋转排序数组
Non recursive traversal of binary tree
牛客刷题——part6