当玩家的子弹击中敌人的AI时,我如何让敌人死掉? 这就是我所拥有的,我知道它不是Java,但我的编程语言基于Java。 我希望你们建议我的代码不是java命令代码。 我想要简单的代码。 例如通过移动阵列移除敌人的AI并检测敌人和子弹位置的碰撞。
在我目前的代码中,我不知道当敌人与敌人发生碰撞时如何使子弹自身和敌人陷入困境。我知道如何检测碰撞,如下所示:
if(bulletPosX[i] > enemyPosX[x] || bulletPosY[i] > enemyPosY[y]) {}
但我不知道如何删除它们。我知道我必须改变阵列。但我不知道如何在代码中执行它。
import graphics;
int firedBullets = 0;
int maxBullets = 15;
int[] bulletPosX = new int [maxBullets];
int[] bulletPosY = new int [maxBullets];
int[] bulletDirX = new int [maxBullets];
int[] bulletDirY = new int [maxBullets];
int width = 10;
int height = 3;
int maxEnemy = 30;
int[] enemyPosX new int[maxEnemy];
int[] enemyPosY new int[maxEnemy];
int[] enemyDirX new int[maxEnemy];
int[] enemyDirY new int[maxEnemy];
void main() {
// Information for Enemy
for(int x = 0; x < width; x = x + 1) {
for(int y = 0; y < height; y = y + 1) {
enemyPosX[] = x * width * 6;
enemyPosY[] = y * height * 15;
enemyDirX[] = 10;
enemyDirY[] = 20;
}
}
}
void paintWindow() {
// Information for Bullet
for(int i = 0; i < firedBullets; i = i + 1) {
setColor(255, 255, 255);
fillRect(bulletPosX[i], bulletPosY[i], 6, 30);
bulletPosY[i] = bulletPosY[i] - 5;
if(bulletPosY[i] < -50) {
for(int j = i + 1; j < firedBullets; j = j + 1) {
bulletPosX[j - 1] = bulletPosX[j];
bulletPosY[j - 1] = bulletPosY[j];
bulletDirX[j - 1] = bulletDirX[j];
bulletDirY[j - 1] = bulletDirY[j];
}
firedBullets = firedBullets - 1;
}
}
for(int x = 0; x < width; x = x + 1) {
for(int y = 0; y < height; y = y + 1) {
for(int i = 0; i < firedBullets; i = i + 1) {
if(bulletPosX[i] > enemyPosX[x] || bulletPosY[i] > enemyPosY[y]) {
// How can i delete the enemyAI ?
}
}
}
}
}
void onKeyPressed(int code) {
if(code == 37) {
playerPosX = playerPosX - 15;
}
if(code == 39) {
playerPosX = playerPosX + 15;
}
if(code == 32) {
if(firedBullets < maxBullets) {
bulletPosX[firedBullets] = playerPosX + 46;
bulletPosY[firedBullets] = playerPosY - 30;
bulletDirX[firedBullets] = 5;
bulletDirY[firedBullets] = 5;
firedBullets = firedBullets + 1;
}
}
}
答案 0 :(得分:1)
首先,您用于碰撞检测的代码将检测子弹是否在屏幕的某个象限中,因为您正在测试子弹的位置是否在敌人的一侧,但是没有限制一方的有效程度。
其次从数组中删除元素并将所有元素移到一个元素上。
public void removeElement(int[] input, int index) {
for (int i = index + 1; i < input.length; i++) {
input[i - 1] = input[i];
}
input[input.length - 1] = -1;
}
这样做是将索引后的每个元素复制到上一个位置,覆盖旧值。然后它将最后一个元素设置为-1,您可以将其更改为任何其他所需的值以标记null。这可能不适用于您的语言,因为.length只返回数组的长度。
最后,请不要将类似于java的语言标记为java。将其标记为实际的语言。