Thursday, May 19, 2011

Moteur d’échecs

C'est décidé, je m'y met. Je vais programmer un moteur d’échecs. En Ruby. Wow. Robert Hyatt a dit qu'il fallait choisir le langage qu'on aimait le plus. Bob a raison, tiens!

Et tant qu'à faire je commente mon avancée sur mon blog (en français!) pour me motiver encore plus que ce que je ne le suis déjà. Ça commence aujourd'hui, je ne sais pas quand ça va se terminer. La semaine prochaine ou dans 10 ans.

Le premier choix difficile a été la représentation du plateau de jeu. Mailbox, 0x88, finalement je pense que je vais aller au plus intéressant, les bitboards. Parce que Ruby par rapport à C++, c'est lent et les bitboards, c'est des calculs rapides. Mais surtout parce que les bitboards c'est sexy. Et finalement pas si compliqué que ça (après avoir passé 3 soirées complètes à lire des articles sur la programmation d'un moteur de jeu d’échecs, à commencer quelque chose sans être emballé, recommencer sur autre chose et finalement changer d'avis pour du sexy! Sale geek).

Je sens que ça va être long.
Voici la roadmap (quelques parties pompées sur un site):

- décider de la représentation du plateau (fait: bitboards)
- Faire du TDD (rien de plus important que ça quand on écrit un moteur compliqué)
- interface graphique (Gtk) pour suivre un minimum aisément et débugguer
- écrire un traducteur FEN <=> Position
- écrire le générateur de déplacements
- écrire une fonction pour savoir si une case est attaquée
- écrire une fonction de mise à jour du plateau
- Fonction de test de performance (Perft)
- écrire une fonction d'évaluatiuon simple
- écrire une fonction de recherche
- optimiser (Quiescence search, etc...)
- écrire une interface pour jouer (basée sur XBoard ?)
- écrire une interface pour FICS
- écrire une base de donnée de parties et autres stats et enregistreur de positions pour optimiser la performance (comme je l'avais déjà fait pour MyTeacher basé sur TSCP)

Les sources et le README est sur github:

Son nom de code est donc MyTeacheR, comme l'ancien, mais avec R majuscule, on se demande pourquoi, y aurait-il un rapport avec Ruby ?

Son nom de scène est encore à définir.
Longue vie à MyTeacheR !

No comments: