Skip to content

grondilu/chess

Repository files navigation

Chess

Chess-related stuff in Raku.

My ultimate, long-term goal with this project is to build a proper chess training app.

SYNOPSIS

$ raku -MChess
> say startpos;                       
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
> say startpos * 'e4'; # position after 1.e4
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1
> (startpos * 'd4').ascii;  # see further for kitty terminal
   +------------------------+
 8 | r  n  b  q  k  b  n  r |
 7 | p  p  p  p  p  p  p  p |
 6 | .  .  .  .  .  .  .  . |
 5 | .  .  .  .  .  .  .  . |
 4 | .  .  .  P  .  .  .  . |
 3 | .  .  .  .  .  .  .  . |
 2 | P  P  P  .  P  P  P  P |
 1 | R  N  B  Q  K  B  N  R |
   +------------------------+
> say legal-moves startpos;
[d3 d4 e3 e4 c3 c4 f3 f4 Nf3 Nh3 h3 h4 a3 a4 g3 g4 Na3 Nc3 b3 b4]
> use Chess::GUI;
> Chess::GUI.new;  # full graphical GUI with raylib

Description

PGN Grammar

use Chess::PGN;
say Chess::PGN.parse: "1. f3 e5 2. g4?? Qh4#";

FEN Grammar

use Chess::FEN;
say Chess::FEN.parse('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');

See the wikipedia article about FEN for more information.

General utilities

Graphic, in-terminal display

In addition to the ASCII representation mentioned above, there are several other possibilities to display a chess position:

  • one is using unicode chess characters, along with escape code sequences to change the background and foreground colors of each square.
  • the other is using Kitty's graphics protocol. This second solution is a bit slow at startup, it requires ImageMagick to be installed on your system, and it's not very robust to things like terminal zoom, scrolling or even clearing. It looks very good though, using the same piece set as the default one on lichess.

showing the start position ascii, unicode and kitty

Graphical User Interface

As a work in progress, a graphical user interface using raylib is being developed. It will eventually be used to create the opening trainer mentioned above.

Polyglot books

WIP

External links

TODO

  • implement rules of the game
  • interface Stockfish (easy with Proc::Async or even just run)
  • make Board image internally, not relying on lichess
  • opening and tactics trainer
  • game database management
  • translate Chess.js
  • read and write Polyglot books
  • make the board square as tall as the cursor by default
  • clean-up and update README
  • GUI with raylib support (WIP)

About

Chess-related stuff in raku

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages