# Functions for manuipulation of the board
WHITE <- 0
RED <- 1
WHITE_BAR = -1
RED_BAR = -2
getStartingBoard <- function() {
board <- tibble(
point = c(1:24,WHITE_BAR, RED_BAR),
numCheckers = c(2,0,0,0,0,5,0,3,0,0,0,5,5,0,0,0,3,0,5,0,0,0,0,2,0,0),
colour = c(WHITE,NA,NA,NA,NA,RED,NA,RED,NA,NA,NA,WHITE,RED,NA,NA,NA,WHITE,NA,WHITE,NA,NA,NA,NA,RED,WHITE,RED)
)
return (board)
}
isWhite <- function(colour) {
return (colour == WHITE)
}
getBarPoint <- function(colour) {
return (ifelse(colour == WHITE, WHITE_BAR, RED_BAR))
}
getOtherColour <- function(colour) {
return (if_else(isWhite(colour), RED, WHITE))
}
hasCheckerOnBar <- function(board, thisColour) {
return (getNumOnBar(board, thisColour) > 0)
}
getNumOnBar <- function(board, thisColour){
return (board %>%
filter(point == getBarPoint(thisColour)) %>%
pull(numCheckers)
)
}
validate <- function(board) {
numByColour <- board %>%
filter(!is.na(colour)) %>%
group_by(colour) %>%
summarise(sum = sum(numCheckers)) %>%
ungroup()
return (all(pull(numByColour, sum) == 15))
}
getValue <- function(board, thisPoint, number) {
return (
board %>%
filter(point == thisPoint) %>%
mutate(indicator = case_when(
colour == RED & numCheckers >= number ~ " x",
colour == WHITE & numCheckers >= number ~ " o",
TRUE ~ " "
)) %>%
pull(indicator)
)
}
pad <- function(number) {
padOne <- function(x) {
if (x < 10)
return (paste(" ", x, sep = ""))
else {
return (as.character(x))
}
}
return (sapply(number, padOne))
}
printBoard <- function(board) {
leftSide <- paste(13:18, collapse = " ")
rightSide <- paste(19:24, collapse = " ")
boardString <- paste("", leftSide, "|", rightSide, "\n")
# Top
for (row in 1:5) {
for (point in 13:18) {
boardString <- paste(boardString, getValue(board, point, row))
}
boardString <- paste(boardString, "|")
for (point in 19:24) {
boardString <- paste(boardString, getValue(board, point, row))
}
boardString <- paste(boardString, "\n", sep = "")
}
# Middle
boardString <- paste(boardString, "\n", sep = "")
boardString <- paste(boardString, "\n", sep = "")
for (row in 5:1) {
for (point in 12:7) {
boardString <- paste(boardString, getValue(board, point, row))
}
boardString <- paste(boardString, "|")
for (point in 6:1) {
boardString <- paste(boardString, getValue(board, point, row))
}
boardString <- paste(boardString, "\n", sep = "")
}
leftSide <- paste(pad(12:7), collapse = " ")
rightSide <- paste(pad(6:1), collapse = " ")
bottomString <- paste("", leftSide, "|", rightSide, "\n")
boardString <- paste(boardString, bottomString, sep = "")
return (boardString)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.