【发布时间】:2020-08-18 22:14:41
【问题描述】:
我正在尝试用 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]);
}
}
【问题讨论】:
-
我认为你会从为每一行创建一个结构中受益:
struct EnemyRow { int row_position; int[NUM_ENEMY_COLUMNS] enemy_health; }因为看起来你正在使用数组中的第一个元素作为行的 y 位置,以及后面的元素阵列为每个敌人的健康。难怪你会转身。让自己轻松一点,制作一个结构体。
标签: c++ loops multidimensional-array game-engine