2017-06-30 2 views
0

Ich baue einen Kommandozeilen-Kampfsimulator. Ich habe zwei Teams: redteam und blueteam.Algorithmus für ein Turn-by-Turn-Spiel?

Sie haben 4 Eigenschaften:

health 
attack 
defense 
rep 

Die ersten drei sind selbsterklärend, denke ich. rep ist Ruf oder Angstfaktor. Der Benutzer wird die Funktionen für beide Teams eingeben. Die Mannschaft mit der höchsten Repräsentation startet den Angriff zuerst. damage = attack - defense. Dies wird wiederum von der health subtrahiert. Dann greift das andere Team an, und der Prozess geht weiter bis einer der health <=0 des Teams oder wenn der attack <= defense weil in diesem Fall kein Schaden angerichtet wird.

In dieser Form ist das Spiel ziemlich einfach nur die Gesundheit ändert und nichts anderes.

Die Frage, die ich habe, ist, verwende ich derzeit Arrays und eine While-Schleife, in denen die gesamte Logik in einer Reihe von verschachtelten if-else Blöcke platziert ist. Der Code ist wirklich chaotisch. Gibt es einen Algorithmus (und datastructres) für diese Art von Problem?

A

+0

Was meinen Sie mit "spezifische Art von Problem"? Sie haben bereits einen Algorithmus für Ihren speziellen Fall erstellt. –

+0

Mit spezifisch, ich meine spezifisch für Turn-by-Turn-Spiele. – user2559578

+1

Ich denke, dass jedes rundenbasierte Spiel etwas Einzigartiges im Vergleich zu anderen hat. Der Algorithmus, der für die meisten von ihnen funktioniert, ist wahrscheinlich: 'while (true) {für (p: players) {p.take_turn(); if (p.won()) zurückgeben; }} ' –

Antwort

0

ich nicht, warum Sie eine Reihe von verschachtelten if-else-Blöcke. Lassen Sie mich wissen, ob ich das Problem falsch verstanden, sonst auf diesem einen Blick (^ bedeutet die XOR-Operation):

// 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); 

Beachten Sie, dass Sie auch 1 - p statt p^1 nutzen, um die gleiche Funktionalität haben.