首页 > 解决方案 > 太空侵略者:射击时列中的所有敌人都会死亡

问题描述

我正在尝试用 C++ 对太空入侵者进行编程我不是专家,因此决定将敌人存储在多维数组中。

这里每个敌人都是一个纵队。行从上到下:x、y1、y2、y3、y4、y5 和敌人的生命值。y1 是最下面的一排(或离玩家最近的一排敌人)。

当我目前向敌人射击时,整排敌人都消失了,但我希望每颗子弹只消失一个敌人。谁能告诉我哪里出错了?

if (keys.fire && bullet.health == 0)
{
    bullet.y = width - spriteSize;
    bullet.x = player.x;

    bullet.dy = 1;
    bullet.dx = 0;
    bullet.health = 1;

}

bullet.y -= bullet.dy;
bullet.x += bullet.dx;

if(bullet.health > 0)
{
    drawSprite(Bullet, bullet.x, bullet.y);
}

for(int i = 0; i < 12; i++)
{
    for(int j = 1; j < 6; j++)
    {
        if(distanceBetween(enemies[0][i], enemies[j][i], bullet.x, bullet.y) < 20)
        {
            enemies[6][i] = 0; //Enemy Health
            enemies[j][i] = -1;
            bullet.health = 0;
        }

        if(enemies[6][i]>0)
        {
            for(int sprite = 1; sprite < 6; sprite++)
            {
                drawSprite(Enemy1, aliens[0][i], aliens[sprite][i]);
            }
        }

标签: c++loopsmultidimensional-arraygame-engine

解决方案


你每行都使用共同的敌人生命值,所以一行中的所有敌人都会像你说的那样死。

为避免这种情况,您必须为每个敌人分配敌人的生命值。

可能的修复:

for(int i=0;i<12;i++)
{
    for(int j=1; j<6; j++)
    {
        if(distanceBetween(enemies[0][i], enemies[j][i], bullet.x, bullet.y)<20)

        {
            enemies[5+j][i]=0; //Enemy Health
            enemies[j][i]=-1;
            bullet.health = 0;

        }
        if(enemies[5+j][i]>0)
        {
            drawSprite(Enemy1, aliens[0][i], aliens[j][i]);
        }
    }
}

现在您必须为数组的每一行分配(至少)11 个元素而不是 7 个元素enemies


推荐阅读