2017-06-30 95 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有相同的功能。