Comme cela m'arrive parfois, il m'est venu une idée de challenge complètement inutile... réaliser un jeu de dames chinoises en C (mode console).
En pur C bien gore... Et par dessus le marché, histoire de relever le challenge de quelques crans, le jeu existe en 4 versions :
- Manual : vous jouez jusqu'à 6 sur le même PC, les uns après les autres.
- IA : le même que "Manual", mais vous pouvez rajouter des ordinateurs contre lesquels jouer.
- Network : mode client/serveur, vous jouez à plusieurs joueurs humains en réseau.
- Network/IA : idem que Network mais avec la possibilité de rajouter des IA.
L'ensemble m'a pris une quinzaine de jours à coder. Le plus dur fut l'IA programmée qui fait appel à des structures assez costaudes et surtout dans les règles du jeu de dames chinoises, il existe la possibilité de repasser sur son propre chemin ce qui fait que l'arbre décisionnel de l'IA doit mémoriser son chemin de test pour éviter de boucler indéfinimment.
Le jeu
Plateau de jeu ci-contre.
Pour ceux qui ne connaissent pas les règles des dames chinoises, allez voir sur Wikipédia.
En bref, le jeu s'apparente aux dames "classiques" mais on peut y jouer jusqu'à 6.
Environnement/jouer
Vous pouvez y jouer sous windows ou linux mais sous windows, il vous faudra modifier quelques constantes dans le
define.h
car le terminal windows ne supporte pas la coloration ANSI.
Je vous conseille de le faire sous linux, il vous faut seulement make
et gcc
# pour compiler un simple make fera l'affaire
make
./dames
Déroulement du jeu en mode "manual"
Au début du jeu, on renseigne le nombre d'utilisateurs et leurs noms :
Comme indiqué, à n'importe quel moment, le fait de taper 'exit' vous fera quitter le jeu proprement.
Ensuite le plateau est affiché :
Vous choisissez le pion et sa direction :
Ensuite c'est à l'adversaire de jouer :
Et ainsi de suite jusqu'à ce qu'un des joueurs gagne (en suivant les règles bien sûr...).
Différences en mode réseau
Le premier joueur se connectant au serveur indique le nombre de joueurs à se connecter après avoir saisi son nom :
Le jeu commence vraiment une fois tout le monde connecté :
N'importe qui peut quitter en cours de jeu en tapant exit et les autres joueurs sont tenus au courant :
Bien entendu, si trop de personnes quittent, le jeu est annulé :
Code
Pour ceux qui s'intéressent au code source, je vous met ci-contre un schema de la structure des objets utilisés.
Le plateau de jeu
La représentation textuelle du plateau n'a pas été facile à définir, j'ai adopté cette représentation :
Les 'x' représentent une case.
Le numéro à gauche est le numéro de la première case de chaque ligne.
L'affichage du plateau est géré ligne par ligne en affichant des espaces suivi des cases.
Comme le nombre de lignes est fini, j'ai affiché « en dur » les lignes sans passer par un système de boucles.
Pointeurs entre les cases
Le problème de tous mes liens, c'est qu'il faut être sûr de les avoir bien initialisés. C'est pour cela que j'ai réalisé un fichier debug.h qui affiche les pointeurs des cases.
Voici le schéma des liens qui est observable sans affichage des numéros des cases pointées (chaque trait représente un lien ou pointeur, à l'intersection des liens se trouvent les cases) :
Il s'agit d'un semble de cases avec ces liens :
Sachant qu'un espace est affiché lorsqu'un lien est égal à NULL
.