我正在建立一个命令行战斗模拟器。我有两个小组:redteam
和blueteam
。
他们有4个功能:
health
attack
defense
rep
我认为前三个是不言自明的。 rep
是声誉或恐惧因素。用户将输入两个团队的功能。拥有最高代表的团队将首先开始攻击。 damage
= attack - defense
。这再次从health
中减去。然后其他团队发起攻击,此过程一直持续到团队成员之一health <=0
或attack <= defense
,因为在这种情况下,不会造成任何损害。
在这种形式下,游戏非常简单,只有健康状况发生变化,而不是其他任何东西。
我的问题是我目前正在使用数组和一个while循环,其中所有逻辑都放在一堆嵌套的if-else
块中。代码非常混乱。是否存在针对此类问题的算法(和数据结构)?
A
答案 0 :(得分:0)
我不明白为什么你有一堆嵌套的if-else块。如果我误解了这个问题,请告诉我,否则看看这个(^表示XOR操作):
// Let the players be x[0] and x[1].
// Get the starting player.
int p = x[0].rep >= x[1].rep ? 0 : 1;
// Loop until the current player loses all its health.
while(x[p].health > 0 && x[p].attack > x[p^1].defense)
{
// Player p makes an attack, and the
// other player (p xor 1) takes damage.
x[p^1].health -= x[p].attack - x[p^1].defense;
// Switch to the other player.
p ^= 1;
}
Print(Player p^1 wins);
请注意,您也可以使用1 - p
代替p ^ 1
来使用相同的功能。