Space Invaders: Все враги в колонне d ie при выстреле - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь программировать космические захватчики на C ++. Я не эксперт и решил хранить врагов в многомерном массиве.

Здесь каждый враг - это столбец. Строки сверху вниз: x, y1, y2, y3, y4, y5 и здоровье противника. у1 - самый нижний ряд (или ряд врагов, ближайших к игроку).

Когда я в данный момент стреляю в своих врагов, весь ряд врагов исчезает, но я хочу, чтобы на одну пулю исчез только один враг. Может кто-нибудь сказать мне, где я ошибся, пожалуйста?

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]);
            }
        }

1 Ответ

1 голос
/ 04 мая 2020

Вы используете общее вражеское здоровье на каждый ряд, поэтому все враги подряд будут, как вы говорите, d ie.

Чтобы избежать этого, вы должны распределять вражеское исцеление для каждого врага.

возможное исправление:

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.

...