太空侵略者使用子弹杀死敌人

时间:2014-10-06 03:36:56

标签: java arrays multidimensional-array 2d shift

当玩家的子弹击中敌人的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;
        }
    }
}

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。将其标记为实际的语言。