Articles

curso-r / chess

CRAN-StatusCodecov-TestabdeckungR-Build-StatusLifecycle: maturing

Overview

{chess} ist ein eigenwilliger Wrapper für R aroundpython-chess, eine amazinglibrary, die von Niklas Fiekas erstellt wurde. Es ermöglicht Benutzern, PGN-Dateien zu lesen und zu schreiben sowie Spielbäume zu erstellen und zu erkunden, wie sie in Schachbüchern zu sehen sind.

Installation

Installieren Sie die freigegebene Version von {chess} von CRAN:

install.packages("chess")

Oder installieren Sie die Entwicklungsversion von GitHub mit:

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

nstallieren Sie python-chess automatisch in Ihrer {reticulate}Umgebung, aber Sie können es auch explizit mit einer praktischen Funktion tun:

chess::install_chess()

Beispiel

Um ein vorhandenes Spiel zu lesen, verwenden Sie einfach read_game(). Um es zu erkunden, können Sie forward()back() sowie variations()variation() verwendensehen Sie alle aufgelisteten Variationen für den nächsten Zug und wählen Sie eine davon aus.

Viele andere Spiele sind im Paket enthalten, so dass Sie aufstehen undlaufen können, sobald Sie installieren {chess}! Weitere Informationen finden Sie unter vignette("games").

Sie können auch Ihr eigenes Spiel mit game() erstellen und Variationen hinzufügen: Die move() Funktion fügt Züge hinzu und verzweigt den Baum des Spiels. Strings werden in einfache Züge umgewandelt, während list()s sich in PGN genau wie Klammern verhalten und eine Variation des letzten Zuges erzeugen.Hier sehen Sie, wie Sie einen Stipendiaten neu erstellen und wie Sie ihn vermeiden können:

# 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

Beachten Sie, dass es viele Möglichkeiten gibt, die Eingabe in move() zu strukturieren. Weitere Informationen finden Sie untervignette("chess").

{chess} bietet auch viele Möglichkeiten, das Spiel als Ganzes und das Brett zu einem bestimmten Zeitpunkt zu sehen.

# Print with unicode (doesn't look good on GitHub)print(scholars_mate, unicode = TRUE)#> <4. Qxf7#>#> ♜ . ♝ ♛ ♚ ♝ . ♜#> ♟ ♟ ♟ ♟ . ♕ ♟ ♟#> . . ♞ . . ♞ . .#> . . . . ♟ . . .#> . . ♗ . ♙ . . .#> . . . . . . . .#> ♙ ♙ ♙ ♙ . ♙ ♙ ♙#> ♖ ♘ ♗ . ♔ . ♘ ♖# Export the FEN of the boardfen(scholars_mate)#> "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))#> "2... Nc6 3. Qh5 Nf6 ( 3... g6 4. Qf3 Nf6 ) 4. Qxf7#"# Plot current boardplot(scholars_mate)

Motivation

Python-Schach diente als Inspiration (und Rückgrat) für {chess}.Während die ursprüngliche Version (und{rchess}) „move generation, move validation“ (mit leistungsstarken Klassen und objektorientierter Syntax) weitgehend behandelt, {chess} konzentriert sich darauf, das Erstellen und Erkunden von PGNs als Bäume zu vereinfachen.

Durch die Eingrenzung des Umfangs der API glaube ich, dass das Paket intuitiver für Leute wird, die einfach nur schnell gemeinsam nutzbare Spieleanalysen erstellen oder einfach die Spiele anderer Leute erkunden möchten, ohne auf Point-and-Click-Software zurückgreifen zu müssen.

{chess}’s erster Einsatz war, mir zu helfen, Bobby Fischers My 60Memorable Games zu studieren. Nach einigen sehr schwierigen Analysen konnte ich das ganze Buch in PGN konvertieren und in den Prozess hochladen, aber ich hatte immer noch das Gefühl, dass die Oberfläche zu ungeschickt war …

Roadmap

  • NAGs
  • Header
  • Spiel von FEN starten
  • Besseres Plotten
  • Mehr Statusfunktionen
  • Andere Betriebssysteme
  • Unit-Tests
  • Erweiterte Nutzung
  • Styler
  • CRAN
  • Stockfish API
  • Statische Boards (Puzzles)
  • Glänzend?

Verhaltenskodex

Bitte beachten Sie, dass das {chess} Projekt mit einem Beitragscode veröffentlicht wird ofConduct.By wenn Sie zu diesem Projekt beitragen, erklären Sie sich damit einverstanden, seine Bedingungen einzuhalten.

Lizenz

{chess} ist unter der GPL 3 (oder einer späteren Version bei youroption) lizenziert. Überprüfen Sie outLICENSE.mdfür den vollständigen Text.