Risk board game

I made the following code to simulate a battle in the risk board game, but it's not working. Can someone tell me what is wrong or what I have to change.

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))
}

I think you're less likely to get help without describing what you've tried and how the output is wrong. It's also better to just post a very short snippet of code (not a giant code chunk), where you've isolated the problem, and then generate a reproducible example (a reprex()) to allow others to see the problem.

On the other hand, here's a link describing my approach to a RISK simulator that I've been meaning to share. It does Monte Carlo simulation and plots the outcome distribution, along with some summary statistics, for both single territory attacks as well as one attacker going through multiple defender territories.

I noticed that you're simulating individual die rolls -- I tried that first too, but it was annoyingly slow.

5 Likes

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.