转弯游戏的算法?

时间:2017-06-30 10:27:35

标签: algorithm data-structures

我正在建立一个命令行战斗模拟器。我有两个小组:redteamblueteam

他们有4个功能:

health
attack
defense
rep

我认为前三个是不言自明的。 rep是声誉或恐惧因素。用户将输入两个团队的功能。拥有最高代表的团队将首先开始攻击。 damage = attack - defense。这再次从health中减去。然后其他团队发起攻击,此过程一直持续到团队成员之一health <=0attack <= defense,因为在这种情况下,不会造成任何损害。

在这种形式下,游戏非常简单,只有健康状况发生变化,而不是其他任何东西。

我的问题是我目前正在使用数组和一个while循环,其中所有逻辑都放在一堆嵌套的if-else块中。代码非常混乱。是否存在针对此类问题的算法(和数据结构)?

A

1 个答案:

答案 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来使用相同的功能。