chess package - RDocumentation (2024)

Overview

{chess} is an opinionated wrapper for R aroundpython-chess, an amazinglibrary created by Niklas Fiekas. Itallows users to read and writePGN files aswell as create and explore game trees such as the ones seen in chessbooks.

Installation

Install the released version of {chess} from CRAN:

install.packages("chess")

Or install the development version from GitHub with:

# install.packages("remotes")remotes::install_github("curso-r/chess")

This should automatically install python-chess to your {reticulate}environment, but you can also explicitly do it with a convenientfunction:

chess::install_chess()

Example

To read an existing game, simply use read_game(). To explore it youcan use forward()/back(), as well as variations()/variation() tosee all variations listed for the next move and choose one of them.

library(chess)# Read final game from the Queen's Gambitfile <- system.file("harmon.pgn", package = "chess")harmon_borgov <- read_game(file)# Starting positionharmon_borgov#> <Start>#> r n b q k b n r#> p p p p p p p p#> . . . . . . . .#> . . . . . . . .#> . . . . . . . .#> . . . . . . . .#> P P P P P P P P#> R N B Q K B N R# Navigate to 2. c4harmon_borgov %>% forward(3)#> <2. c4>#> r n b q k b n r#> p p p . p p p p#> . . . . . . . .#> . . . p . . . .#> . . P P . . . .#> . . . . . . . .#> P P . . P P P P#> R N B Q K B N R# See all variations for 2...harmon_borgov %>% forward(3) %>% variations()#> <2... e5> <2... e6>#> r n b q k b n r r n b q k b n r#> p p p . . p p p p p p . . p p p#> . . . . . . . . . . . . p . . .#> . . . p p . . . . . . p . . . .#> . . P P . . . . . . P P . . . .#> . . . . . . . . . . . . . . . .#> P P . . P P P P P P . . P P P P#> R N B Q K B N R R N B Q K B N R# Follow the sidelineharmon_borgov %>% forward(3) %>% variation(2)#> <2... e6>#> r n b q k b n r#> p p p . . p p p#> . . . . p . . .#> . . . p . . . .#> . . P P . . . .#> . . . . . . . .#> P P . . P P P P#> R N B Q K B N R

Many other games are included with the package so you can get up andrunning as soon as you install {chess}! See vignette("games") formore information.

You can also create your own game with game() and add variations toit: the move() function adds moves as well as branches the tree of thegame. Strings are converted to simple moves, while list()s behaveexactly as parenthesis in PGN, creating a variation of the last move.Here you can see how to recreate a Scholar’smate and some ways toavoid it:

# Scholar's mate and some defensesscholars_mate <- game() %>% move("e4") %>% move("e5", list("e6"), list("d5")) %>% move("Bc4") %>% move("Nc6", list("Nf6")) %>% move("Qh5") %>% move("Nf6", list("g6", "Qf3", "Nf6")) %>% move("Qxf7")# Last mainline movescholars_mate#> <4. Qxf7#>#> r . b q k b . r#> p p p p . Q p p#> . . n . . n . .#> . . . . p . . .#> . . B . P . . .#> . . . . . . . .#> P P P P . P P P#> R N B . K . N R

Note that there are many ways to structure the input to move(). Seevignette("chess") for more information.

{chess} also features many ways of seeing both the game as a whole andthe board at a specific point in time.

# Print with unicode (doesn't look good on GitHub)print(scholars_mate, unicode = TRUE)#> <4. Qxf7#>#> ♜ . ♝ ♛ ♚ ♝ . ♜#> ♟ ♟ ♟ ♟ . ♕ ♟ ♟#> . . ♞ . . ♞ . .#> . . . . ♟ . . .#> . . ♗ . ♙ . . .#> . . . . . . . .#> ♙ ♙ ♙ ♙ . ♙ ♙ ♙#> ♖ ♘ ♗ . ♔ . ♘ ♖# Export the FEN of the boardfen(scholars_mate)#> [1] "r1bqkb1r/pppp1Qpp/2n2n2/4p3/2B1P3/8/PPPP1PPP/RNB1K1NR b KQkq - 0 4"# See the PGN after some movestr(back(scholars_mate, 3))#> 2... Nc6 3. Qh5 Nf6 ( 3... g6 4. Qf3 Nf6 ) 4. Qxf7## Export the PGN after some movepgn(back(scholars_mate, 3))#> [1] "2... Nc6 3. Qh5 Nf6 ( 3... g6 4. Qf3 Nf6 ) 4. Qxf7#"# Plot current boardplot(scholars_mate)

Motivation

python-chess served as the inspiration (and backbone) for {chess}.While the original version (and{rchess} for that matter) broadlyhandles “move generation, move validation” (with powerful classes andobject-oriented syntax), {chess} focuses on making it easy to createand explore PGNs as trees.

By narrowing down the scope of the API, I believe the package becomesmore intuitive to people who just want to quickly create shareable gameanalyses or easily explore other people’s games without having to resortto point and click software.

{chess}’s first use was helping me study Bobby Fischer’s My 60Memorable Games. After some very difficultparsing,I was able to convert the whole book to PGN and upload it tolichess, but I still felt like theinterface was too clumsy…

Roadmap

  • NAGs
  • Comments
  • Headers
  • Start game from FEN
  • Better plotting
  • More status functions
  • Other OSs
  • Unit tests
  • Advanced usage
  • Styler
  • CRAN
  • Stockfish API
  • Static boards (puzzles)
  • Shiny?

Code of Conduct

Please note that the chess project is released with a Contributor CodeofConduct.By contributing to this project, you agree to abide by its terms.

License

{chess} is licensed under the GPL 3 (or any later version at youroption). Check outLICENSE.mdfor the full text.

chess package - RDocumentation (2024)

References

Top Articles
Latest Posts
Article information

Author: Trent Wehner

Last Updated:

Views: 6010

Rating: 4.6 / 5 (56 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Trent Wehner

Birthday: 1993-03-14

Address: 872 Kevin Squares, New Codyville, AK 01785-0416

Phone: +18698800304764

Job: Senior Farming Developer

Hobby: Paintball, Calligraphy, Hunting, Flying disc, Lapidary, Rafting, Inline skating

Introduction: My name is Trent Wehner, I am a talented, brainy, zealous, light, funny, gleaming, attractive person who loves writing and wants to share my knowledge and understanding with you.