Log‐02 | The Many Ways to Express a Chess Move - AncientNimbus/rb-chess GitHub Wiki

The Many Ways to Express a Chess Move

In this DevLog, I want to touch on my research on how chess is played across different generations and the ingenuity of how chess was made available to everyone regardless of background and nationality. I will keep this brief as the main purpose of this log is to help me through this iterative process and problem understanding.

Correspondence chess

People have been playing chess long before computers were invented. To facilitate the need for remote play, postal services were used to transmit moves between one party and another, and even across continents! With the possibility of encountering players who might not share the same language, the chess society around the globe decided to create an international standard so that chess could be played consistently regardless of where you may be.

Algebraic Notation

Algebraic notation is the official standard for expressing chess movements. It is easy to follow (not so easy for me at the moment), and it is globally accepted across competitions and teaching materials. I am surprised to learn that there is even training to help you memorise this system better. To express a move, you might write 'Nxc6' which represents 'Knight captures c6'. As you can see, it is quite machine-friendly too. This system also features a clever way of handling special moves such as castling '0-0' for 'Castling Kingside'.

Numeric Notation

Numeric notation is another way to express a chess move. Unlike algebraic notation, alphabetic letters are not required. Instead, this system solely relies on numbers. The grid is assigned a 2-digit number starting from 11 to 88. For instance, '52-54' will mean 'Pawn to e4' and '54x55' will mean 'Pawn captures on d5'. As you can see, this is quite straightforward but requires memorisation of grid numbers to play efficiently.

Natural Language

I find expressing chess moves the natural way very elegant. This prompt-like approach rather reminds me of coding in Ruby and Python, where expressiveness is favoured over machine-like code. There is a charm to it when one can express by typing 'Pawn promotes to queen', 'Castling Kingside', 'Rook takes e8', etc. In a terminal game setting, where mouse actions are less likely to be the case, allowing users the ability to express this can be entertaining.

The Problem

We all know that the notation system is very concise and with practice it will likely be most people's default way of communicating chess, but sometimes one may want to play with a more expressive, natural approach, like with your voice. Hence, I want to explore whether it is possible to create a conversation system to parse commands such as 'Bishop to c4' to 'Bc4'. I think it will be a great addition to my terminal chess game since the main way of interaction is through input prompts. That said, I am pretty sure it will not be a simple task as there are many areas and edge cases that might arise throughout the development. Therefore, this is going to be my stretch goal once the core logic is completed.

Further reading

If you wish to learn more about chess notation, this page written by Edward Winter covers this topic in great detail.