Acontinuación se realiza una función para simular el juego de la escalera, la cual contiene basicamente 3 partes:
En la cual se define una matriz vacia para almacenar el avance de los jugadores y se inicia con una semilla la cual es cero indicando que los jugadores estan fuera del tablero.
La segunda parte consiste en generar un lanzamiento del dado con la función sample sobre un dado con valores del 1 al 6.
Se crea el juego con las condicionales de acuerdo con la referencia indicada en la siguiente figura:
Juego de la Escalera
##Game Function
sim_game=function(n_players){
##Empty Data Frame to Store the results
game=matrix(NA,nrow = 1,ncol = n_players)
game=data.frame(game)
names(game)=c("player1","player2")
##Game seed
pos_player1=0
pos_player2=0
game$player1=pos_player1
game$player2=pos_player2
##Game loop
while (max(game$player1,game$player2)<20) {
##Player 1
dice=1:6
launching1=sample(dice,1)
#Condition do not advance more than 20
if(pos_player1+launching1<=20){
pos_player1=pos_player1+launching1
}
#Conditions - stairs
if(pos_player1==3){
pos_player1=11
}
if(pos_player1==15){
pos_player1=19
}
#Conditions - slider
if(pos_player1==13){
pos_player1=5
}
if(pos_player1==17){
pos_player1=10
}
##Player 2
dice=1:6
launching2=sample(dice,1)
#Condition do not advance more than 20
if(pos_player2+launching2<=20){
pos_player2=pos_player2+launching2
}
#Conditions - stairs
if(pos_player2==3){
pos_player2=11
}
if(pos_player2==15){
pos_player2=19
}
#Conditions - slider
if(pos_player2==13){
pos_player2=5
}
if(pos_player2==17){
pos_player2=10
}
game$player1=pos_player1
game$player2=pos_player2
}
winner=which.max(game)
return(winner)
}
La función retorna el ganador del juego.
#Just one Game
sim_game(2)
## player2
## 2
Se generan 1000 juegos y se retorna los ganadores y luego se cuentan el total y porcentaje de ganadores del juego.
##Multiple Games
results=sapply(X = rep(2,1000), FUN = sim_game)
prop.table(table(results))
## results
## 1 2
## 0.527 0.473
Como se observa en la simulación se logra evidenciar que el jugador 1 que es el primer lanzador tiene mayor tendencia a ganar por una diferencia porcentual baja de al rededor del 3%.
##Multiple Games Convengency
game_size=seq(10,10000,200)
prop_wins_player1=array(NA,length(game_size))
for(i in 1:length(game_size)){
results=sapply(X = rep(2,game_size[i]), FUN = sim_game)
prop_wins_player1[i]=prop.table(table(results))[1]
}
graph=data.frame(game_size,prop_wins_player1)
require(ggplot2)
ggplot(graph,aes(x=game_size,y=prop_wins_player1))+geom_line()+theme_bw()+geom_hline(yintercept=0.5,col="red")