我正在制作一个基本的太空侵略者风格的游戏,玩家可以在其中移动飞船并射击敌人。敌人没有枪,但玩家在船的两侧各有一把枪。如果船被摧毁,如果前一艘船在 N 移动前被同一把枪摧毁,那么摧毁它的枪会得到 (1 + (7-N)) 分。作为参考,这是我用来实现这个积分系统的代码:

public void destroy()
   {
       if (moveNum != 0)
       {
           if (moveNum <= 8)
           {
               points += 1 + (8 - moveNum);
               moveNum = 0;
           }
           else
           {
               ++points;
               moveNum = 0;
           }
       }
       else
       {
           ++points;
       }
       moveNum++;
   }

当玩家开火时,我有 if 语句来检查是否有敌人被击中以及他们是否被摧毁。if 语句是嵌套的,因此程序会检查 1 号枪或 2 号枪是否击中了三个敌人中的任何一个。同样,作为参考,这是 if 语句的基本格式:

if (playerPos + 1 == enemy2.position())
    {
        power = player.power(2);
        enemy2.gotHit(power);

        if (enemy2.health() <= 0)
        {
            player.destroy(2);
        }
    }

在这种情况下,程序检查 gun2 是否与 enemy2 具有相同的位置,在这种情况下敌人被击中并且受到的伤害等于枪的威力。如果敌人被摧毁(生命 == 0),则如上所述,该枪将获得积分。

现在 if 语句是嵌套的,这样(例如)它会检查枪 1 是否击中了敌人 1,然后在该 if 语句中,它会检查枪 2 是否击中了敌人 2 或敌人 3。

在不同的系列中重复检查:(gun1-enemy1,gun2-enemy2/3),(gun2-enemy1,gun1-enemy2/3)等。

问题是,即使敌人被摧毁,下一个 if 语句会再次检查它,因为生命仍然为零,它会增加更多点数。

所以我的问题是,如果敌人被摧毁,我如何在下一组 if 语句中忽略敌人?我读到我可以分配一个null值,但是如果不知道哪个敌人将被摧毁(我当然不知道)我就不能这样做。

PS 对不起,如果这太长了,我已经尽量缩短了 :P


二次检查的时候不能再检查一次健康吗?

@Carcigenicate 我确实检查了健康状况,但这就是问题所在,这艘船已经被摧毁但是因为健康状况仍然为零或更少,所以每次运行检查时它都会加分

然后你可以创建一个destroyedbool 变量,将它设置为true船被摧毁的时间,然后检查它。如果这艘船destroyed在第一次射击中,则不要在第二次检查中应用分数奖励。声明destroyed变量的位置取决于更大的上下文。

@Carcigenicate 这是作业,恐怕我不能添加任何额外的字段

I don't think I could write an answer for this without more context. It would be more of a shot in the dark than anything, and I try not to half-ass answers.