Space 入侵者:纵队中的所有敌人在被击中时死亡
Space Invaders: All enemies in column die when shot
我正在尝试用 C++ 编写 space 入侵者程序
我不是专家,所以决定将敌人存储在一个多维数组中。
这里每个敌人都是一列。这些行从上到下依次为: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]);
}
}
你每一行都在使用共同的敌人生命值,所以一行中的所有敌人都会像你说的那样死去。
为避免这种情况,您必须为每个敌人分配敌人生命值。
可能的修复:
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
。
我正在尝试用 C++ 编写 space 入侵者程序 我不是专家,所以决定将敌人存储在一个多维数组中。
这里每个敌人都是一列。这些行从上到下依次为: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]);
}
}
你每一行都在使用共同的敌人生命值,所以一行中的所有敌人都会像你说的那样死去。
为避免这种情况,您必须为每个敌人分配敌人生命值。
可能的修复:
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
。