Jeu de dames chinoises en C

En réseau et avec IA

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 :

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.

Téléchargement

Liens