2017-06-30 71 views
0

我正在构建一个命令行战斗模拟器。我有两支球队:redteamblueteam轮到游戏的算法?

他们有4个特点:

health 
attack 
defense 
rep 

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

在这种形式下,游戏的相当简单,只有健康的变化,而不是其他任何东西。

我的问题是我目前正在使用数组和一个while循环,其中所有的逻辑被放置在一堆嵌套的if-else块。代码非常混乱。有这种问题的算法(和datastructres)吗?

一个

+0

“特定类型的问题”是什么意思?你已经为你的特定情况创建了一个算法。 –

+0

具体而言,我的意思是特定于逐转游戏。 – user2559578

+1

我认为每个回合制游戏都有独特之处。对其中大多数算法的算法可能是:while(true){for(p:players){p.take_turn(); if(p.won())return; }}' –

回答

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有相同的功能。