I. Prérequis▲
Voici les langages et bibliothèques que j'ai utilisés pour développer pyReversi :
Système d'exploitation : Windows XP ;
Langage : Python 2.5.1 ;
Bibliothèque : wxPython 2.8.7.1.
Le jeu a été testé sous Linux (merci hiko-seijuro) et devrait également tourner sur Mac ainsi qu'avec d'autres versions de Python ou de wxPython, mais je n'ai pas toutes les ressources matérielles pour faire les tests.
II. Introduction▲
Le jeu Reversi avait été le premier projet sur lequel j'avais travaillé pour apprendre le langage Delphi en 2003. En remettant un œil dans les sources, je me suis aperçu qu'il était très difficile de se replonger dans le code. C'est pourquoi j'ai voulu refaire une version en Python en profitant de mon expérience acquise depuis ces quatre années, mais sans chercher à tout redévelopper. Ainsi, je me suis contenté de redévelopper le jeu avec le même algorithme (alpha-bêta) pour la réflexion de l'ordinateur. Par contre, je n'ai pas réécrit l'apprentissage ni la création d'une liste de coups pour l'ouverture d'une partie. J'ai aussi omis quelques animations présentes dans la version Delphi. Si je trouve un peu de temps pour me replonger entièrement dans mon code Delphi et remettre un peu d'ordre, peut-être que je ferai une page pour présenter ce que j'avais codé.
L'interface graphique du jeu a été développée avec la bibliothèque wxPython. Vous pourrez ainsi vous servir de ce code comme exemple d'application manipulant cette bibliothèque.
La réflexion de l'ordinateur est quant à elle beaucoup plus lente que celle de la version de Delphi (un facteur 100 quand même), alors qu'il peut jouer très rapidement avec une profondeur de réflexion de six coups voire huit sur des machines récentes sur ma version Delphi, il faudra se contenter ici d'une profondeur de quatre coups (peut-être six avec une machine récente).
Dans tous les cas, ma version reste très très loin derrière WZebra qui est capable d'aller jusqu'à une profondeur de 26 coups en un temps raisonnable, la version la plus complète à ma connaissance.
À partir de la version 1.0.0, j'ai commencé à optimiser légèrement la réflexion de l'ordinateur (un facteur 3 de récupérer avec la version 1.0.2).
III. Le jeu▲
Ce jeu est aussi connu sous le nom d'Othello, je vous renvoie sur le site de Yahoo pour une explication détaillée des règles.
IV. Le code source▲
Le code source est composé de 5 fichiers. Cette structure peut s'adapter à beaucoup de jeux possédant un plateau et se jouant à deux (échec, puissance4, morpion…).
- Global.py : module contenant les constantes et variables globales du jeu.
- Plate.py : module contenant la gestion interne du plateau de jeu (fonctions permettant le calcul du score d'une position).
- Player.py : module gérant les joueurs et la réflexion de l'ordinateur (présence de l'algorithme alpha-beta).
- Reversi.py : module principal gérant la création du jeu et le déroulement d'une partie.
- wxReversi.py : module gérant l'interface graphique du jeu en wxPython et notamment le plateau du jeu.
Nous allons étudier dans la suite chaque module un à un. Le code source est relativement court. Il doit contenir un millier de lignes dont presque la moitié sert à la gestion de l'interface graphique. En relisant le tout, il me semble relativement facile à comprendre. Je ne suis pas encore allé très loin niveau optimisation (contrairement à ce que j'avais pu faire en Delphi). J'ai toutefois essayé de détailler le plus possible chaque fonction de chaque classe pour que tout soit très clair et que vous puissiez si vous le souhaitez apporter des améliorations ou vous servir de ce code source pour aborder le développement d'autres jeux.