Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Encoding: UTF-8
Package: ppcli
Type: Package
Title: Plaintext Board Game Visualizations
Version: 0.2.0-6
Version: 0.2.0-7
Authors@R: c(person("Trevor L.", "Davis", role=c("aut", "cre"),
email="trevor.l.davis@gmail.com",
comment = c(ORCID = "0000-0001-6341-4639")))
Expand Down
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ New features
- However we currently do not distinguish between the nine marble bit ranks.

+ "morris" bit and board pieces.
+ "reversi" bit and board pieces.

* `cat_piece()` and `str_piece()` gain arguments `xbreaks` and `ybreaks`
to provide a subset (of integers) to provide axis labels for if `annotate` is `TRUE` (#17).
Expand Down
62 changes: 35 additions & 27 deletions R/str_piece.r
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,8 @@ get_style_rs <- function(style, big = FALSE) {
alquerque = rep_len("\u25cf", 6L),
go = rep_len("\u25cf", 6L),
marbles = rep_len("\u25cf", 9L),
morris = rep_len("\u25cf", 9L))
morris = rep_len("\u25cf", 9L),
reversi = c(rep_len("\u26c3", 5L), "\u26c1"))
rs
}

Expand Down Expand Up @@ -226,27 +227,28 @@ get_style_ss <- function(style, big = FALSE) {
}

ss <- list(piecepack = piecepack_suits,
playing_cards_expansion = french_suits_black,
dual_piecepacks_expansion = french_suits_white,
subpack = piecepack_suits,
checkers1 = c(rep_len("\u26c2", 5L), "\u26c0"),
checkers2 = c(rep_len("\u26c2", 5L), "\u26c0"),
chess1 = "",
chess2 = "",
dice = rep_len(" ", 6L),
dice_fudge = rep_len(" ", 6L),
dominoes = dominoes_ranks,
dominoes_black = dominoes_ranks,
dominoes_blue = dominoes_ranks,
dominoes_green = dominoes_ranks,
dominoes_red = dominoes_ranks,
dominoes_white = dominoes_ranks,
dominoes_yellow = dominoes_ranks,
alquerque = c(rep_len("\u25cf", 5L), "\u25cb"),
go = c(rep_len("\u25cf", 5L), "\u25cb"),
marbles = c(rep_len("\u25cf", 5L), "\u25cb"),
morris = c(rep_len("\u25cf", 5L), "\u25cb"),
icehouse_pieces = c(rep_len("\u25b2", 5L), "\u25b3"))
playing_cards_expansion = french_suits_black,
dual_piecepacks_expansion = french_suits_white,
subpack = piecepack_suits,
checkers1 = c(rep_len("\u26c2", 5L), "\u26c0"),
checkers2 = c(rep_len("\u26c2", 5L), "\u26c0"),
chess1 = "",
chess2 = "",
dice = rep_len(" ", 6L),
dice_fudge = rep_len(" ", 6L),
dominoes = dominoes_ranks,
dominoes_black = dominoes_ranks,
dominoes_blue = dominoes_ranks,
dominoes_green = dominoes_ranks,
dominoes_red = dominoes_ranks,
dominoes_white = dominoes_ranks,
dominoes_yellow = dominoes_ranks,
icehouse_pieces = c(rep_len("\u25b2", 5L), "\u25b3"),
alquerque = c(rep_len("\u25cf", 5L), "\u25cb"),
go = c(rep_len("\u25cf", 5L), "\u25cb"),
marbles = c(rep_len("\u25cf", 5L), "\u25cb"),
morris = c(rep_len("\u25cf", 5L), "\u25cb"),
reversi = c("\u26c3", "\u26c1", rep_len("\u26c3", 4L)))
ss
}

Expand Down Expand Up @@ -279,7 +281,8 @@ get_style_fg <- function(style) {
alquerque = suit_colors,
go = suit_colors,
marbles = suit_colors,
morris = suit_colors)
morris = suit_colors,
reversi = suit_colors)
fg
}

Expand Down Expand Up @@ -353,6 +356,10 @@ clean_df <- function(df) {
df$cfg <- ifelse(is.na(df$cfg), "piecepack", df$cfg)
if (!hasName(df, "rank")) df$rank <- NA_integer_
df$rank <- ifelse(is.na(df$rank), 1L, df$rank)
if (!hasName(df, "suit")) df$suit <- NA_integer_
df$suit <- ifelse(is.na(df$suit), 1L, df$suit)
if (!hasName(df, "angle")) df$angle <- NA_real_
df$angle <- ifelse(is.na(df$angle), 0, df$angle %% 360)

# Adjust board sizes
# checkers/chess boards rank is number of cells
Expand Down Expand Up @@ -381,11 +388,11 @@ clean_df <- function(df) {
df$piece_side <- ifelse(df$piece_side == "bit_face" & df$cfg %in% bit_back_cfgs,
"bit_back",
df$piece_side)
# reversi
reversi_flip <- df$cfg == "reversi" & df$piece_side == "bit_back"
df$piece_side <- ifelse(reversi_flip, "bit_face", df$piece_side)
df$suit <- ifelse(reversi_flip, c(3L, 6L, 1L, 5L, 4L, 2L)[df$suit], df$suit)

if (!hasName(df, "suit")) df$suit <- NA_integer_
df$suit <- ifelse(is.na(df$suit), 1L, df$suit)
if (!hasName(df, "angle")) df$angle <- NA_real_
df$angle <- ifelse(is.na(df$angle), 0, df$angle %% 360)
attr(df, "was_cleaned") <- TRUE
df
}
Expand Down Expand Up @@ -435,6 +442,7 @@ add_piece <- function(cm, piece_side, suit, rank, x, y, angle, cfg, reorient = "
else
rs <- style$rs[[cfg]][rank]
if (grepl("chess", cfg) && suit == 6L) rs <- unicode_chess_white[rank]
if (grepl("reversi", cfg) && suit == 6L) rs <- "\u26c1"
if (grepl("checkers", cfg) && suit == 6L) rs <- "\u26c1"
if (!grepl("matchstick", piece_side)) rs <- style$rotate(rs, angle, reorient)
}
Expand Down
31 changes: 31 additions & 0 deletions tests/testthat/_snaps/cat_piece.md
Original file line number Diff line number Diff line change
Expand Up @@ -723,3 +723,34 @@



---

Code
dfx <- tibble(piece_side = "board_face", x = 4.5, y = 4.5, rank = 8L, suit = 2L,
cfg = "reversi")
dff <- tibble(piece_side = "bit_face", x = 1:6, y = 1, rank = 1L, suit = 1:6,
cfg = "reversi")
dfb <- tibble(piece_side = "bit_back", x = 1:6, y = 2, rank = 1L, suit = 1:6,
cfg = "reversi")
df <- rbind(dfx, dff, dfb)
cat_piece(df)
Output
┌─┰─┰─┰─┰─┰─┰─┰─┐
│ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│⛃┃⛁┃⛃┃⛃┃⛃┃⛃┃ ┃ │
┝━╋━╋━╋━╋━╋━╋━╋━┥
│⛃┃⛃┃⛃┃⛃┃⛃┃⛁┃ ┃ │
└─┸─┸─┸─┸─┸─┸─┸─┘


12 changes: 12 additions & 0 deletions tests/testthat/test_cat_piece.r
Original file line number Diff line number Diff line change
Expand Up @@ -226,4 +226,16 @@ test_that("text diagrams", {
rank = 12L, suit = 3L, cfg = "morris")
cat_piece(df12)
})

# reversi
expect_snapshot({
dfx <- tibble(piece_side = "board_face", x = 4.5, y = 4.5,
rank = 8L, suit = 2L, cfg = "reversi")
dff <- tibble(piece_side = "bit_face", x = 1:6, y = 1,
rank = 1L, suit = 1:6, cfg = "reversi")
dfb <- tibble(piece_side = "bit_back", x = 1:6, y = 2,
rank = 1L, suit = 1:6, cfg = "reversi")
df <- rbind(dfx, dff, dfb)
cat_piece(df)
})
})