diff --git a/DESCRIPTION b/DESCRIPTION index 21a2b44..1194677 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -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"))) diff --git a/NEWS.md b/NEWS.md index 266e259..bba5c53 100644 --- a/NEWS.md +++ b/NEWS.md @@ -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). diff --git a/R/str_piece.r b/R/str_piece.r index 2399a56..2983f25 100644 --- a/R/str_piece.r +++ b/R/str_piece.r @@ -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 } @@ -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 } @@ -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 } @@ -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 @@ -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 } @@ -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) } diff --git a/tests/testthat/_snaps/cat_piece.md b/tests/testthat/_snaps/cat_piece.md index 5ed0175..07683e0 100644 --- a/tests/testthat/_snaps/cat_piece.md +++ b/tests/testthat/_snaps/cat_piece.md @@ -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 + ┌─┰─┰─┰─┰─┰─┰─┰─┐ + │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │⛃┃⛁┃⛃┃⛃┃⛃┃⛃┃ ┃ │ + ┝━╋━╋━╋━╋━╋━╋━╋━┥ + │⛃┃⛃┃⛃┃⛃┃⛃┃⛁┃ ┃ │ + └─┸─┸─┸─┸─┸─┸─┸─┘ + + diff --git a/tests/testthat/test_cat_piece.r b/tests/testthat/test_cat_piece.r index 958bc66..b9a678d 100644 --- a/tests/testthat/test_cat_piece.r +++ b/tests/testthat/test_cat_piece.r @@ -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) + }) })