Risiko Brettspiel

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
saraseefried
Beiträge: 1
Registriert: Mi Jun 05, 2019 12:25 pm

Risiko Brettspiel

Beitrag von saraseefried »

Ich habe mit dem folgenden Code versucht, einen Kampf beim Brettspiel Risiko zu simulieren. Er funktioniert allerdings nicht. Was muss ich ändern?

Code: Alles auswählen

Kampf <- function(angreifer, verteidiger) #Angreifer entspricht der Anzahl der Truppen mit denen angegriffen wird 

#Bedingung beim Kampf 
while(angreifer>=3 && verteidiger >=2) #Fall mit mindestens 3 Angreifern und 2 Verteidigern 
{angriff <- sort(sample(1:6, min(3, angreifer), replace = TRUE), decreasing = TRUE)
verteidigung <- sort(sample(1:6, min(2,verteidiger), replace = TRUE), decreasing = TRUE
if (angriff[1] > verteidigung[1] && angriff[2] > verteidgung[2]) {verteidiger <- verteidiger - min(2, verteidiger)}
else if (angriff[1] <= verteidigung[1] && angriff[2] <= verteidigung[2])
         
while (angreifer >=3 & verteidiger ==1) { #Fall mit mindestens 3 Angreifern und 1 Verteidiger
angriff <- sort(sample(1:6, min(3, angreifer), replace = TRUE), decreasing = TRUE)
verteidigung <- sample(1:6) 
if(angriff[1] > verteidigung) {verteidiger <- verteidiger -1}
else {angreifer <- angreifer -1}

while (angreifer ==2 & verteidiger >=2) { #Fall mit 2 Angreifern und mindestens 2 Verteidigern
angriff <- sort(sample(1:6, min(2, angreifer), replace = TRUE), decreasing = TRUE)
verteidigung <- sort(sample(1:6, min(2,verteidiger), replace = TRUE), decreasing = TRUE
if (angriff[1] > verteidigung[1] && angriff[2] > verteidgung[2]) {verteidiger <- verteidiger - min(2, verteidiger)}

while (angreifer ==2 & verteidiger ==1) { #Fall mit 2 Angreifern und einem Verteidiger
angriff <- sort(sample(1:6, min(2, angreifer), replace = TRUE), decreasing = TRUE)
verteidigung <- sample(1:6) 
if (angriff[1] > verteidigung) {verteidiger <- verteidiger -1}
else {angreifer <- angreifer -1}
         
while (angreifer ==1 & verteidiger >=2) { #Fall mit 1 Angreifer und mindestens 2 Verteidigern
angriff <- sample(1:6)
verteidigung <- sort(sample(1:6, min(2, verteidiger), replace = TRUE), decreasing = TRUE) 
if (angriff > verteidigung[1]) {verteidiger <- verteidiger -1}
else {angreifer <- angreifer -1}
            
while (angreifer ==1 & verteidiger ==1) { #Fall mit 1 Angreifer und 1 Verteidiger
angriff <- sample(1:6)
verteidigung <- sample(1:6) 
if (angriff > verteidigung) {verteidiger <- verteidiger -1}
else {angreifer <- angreifer -1}}
return(c(angreifer, verteidiger))
}
Edit: Ein Moderator hat als erste Änderung code-Tags eingefügt. bigben
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Risiko Brettspiel

Beitrag von bigben »

Bei mir führt der Code zu folgender Fehlermeldung:

Code: Alles auswählen

Error: unexpected 'if' in:
"  verteidigung <- sort(sample(1:6, min(2,verteidiger), replace = TRUE), decreasing = TRUE
                       if"
Dieser Fehler bedeutet, dass Du die Klammer, die Du hinter sort auf machst, irgendwann auch wieder zu machen musst. Der Fehler wiederholt sich dann weiter unten nochmal.

Ansonsten ist es in aller Regel empfehlenswert, für jede geöffnete geschweifte Klammer auch wieder eine zu schließen. Da fehlen mehrere geschweifte Klammer zu. Ach ja, und dann gibt es noch einen Unterschied zwischen & und &&. Du scheinst Dich eher zufällig für das eine oder andere zu entscheiden - lies mal nach, welcher was bedeutet.
Er funktioniert allerdings nicht.
Was würdest Du denn von einem funktionierenden Code erwarten und was genau funktioniert nicht?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten