#ifndef OTHELLO_JEU_H #define OTHELLO_JEU_H 1 #include #include #include "liste.h" /* Une case est soit vide, soit occupé par un des joueurs, noir ou blanc */ enum CASE { VIDE = ' ', BLANC = 'B', NOIR = 'N' }; /* Propriété globale du jeu */ enum PLATEAU { LONGEUR = 8, LARGEUR = 8 }; /* Jeton contenant le type de case (CASE) ainsi que la position */ struct jeton { int couleur; int pos_i; int pos_j; }; typedef struct jeton Jeton; /* Ajoute un nouveau jeton */ Jeton *ajoute_jeton(int position_i, int position_j, int couleur); /* Joueur contenant le nom, le type ainsi que sa liste de jeton placé sur le * plateau */ struct joueur { char *nom; int couleur; Liste *liste_jeton; int nb_jeton; }; typedef struct joueur Joueur; /* Créer un nouveau joueur */ Joueur *nouveau_joueur(int pion); /* Ajoute un jeton d'un joueur */ void ajoute_jeton_joueur(Joueur *joueur, Jeton *jeton); /* Retire le jeton d'un joueur */ void retire_jeton_joueur(Joueur *joueur, Jeton *jeton); /* Jeu contenant nos 2 joueurs et le plateau de jeu */ struct jeu { Joueur *j1; Joueur *j2; Jeton *plateau[LONGEUR][LARGEUR]; }; typedef struct jeu Jeu; /* Créer une nouvelle partie */ Jeu *nouvelle_partie(void); /* Lance et joue une partie */ void deroulement_partie(Jeu *jeu); /* Renvoie la couleur de l'ennemi */ int couleur_ennemi(int couleur); /* Auxiliaire : S'occupe de faire les changements de jetons récursivement * lorsqu'un joueur joue */ void _jeu_joueur(Jeu *jeu, int case_i, int case_j, int case_i_direction, int case_j_direction, int couleur); /* Gère le coup d'un joueur en faisant les changements nécessaire au jeu. * Renvoie 0 en cas de coup illégal */ int jeu_joueur(Jeu *jeu, int case_i, int case_j, int couleur); /* Coups possibles d'un joueur */ struct coups { Liste *coups; int taille_liste; }; typedef struct coups Coups; /* Libère les coups possibles de la mémoire */ void free_coups(Coups *coups); /* Vérifie si un joueur peut jouer */ Coups *action_possible_joueur(Jeton *plateau[LONGEUR][LARGEUR], int couleur); /* Auxiliaire : Demande au joueur où placer son jeton */ void _action_joueur_humain(int *ligne, int *colonne); /* Joue le tour d'un joueur humain */ void action_joueur_humain(Jeu *jeu, int couleur); /* Vérifie si une partie est terminée */ int partie_finie(Jeu *jeu); /* Compte les points, change le résultat avec le gagnant ainsi que les points de * chacun des joueurs (Gagnant, Perdant) * Renvoie 0 si égalité entre les 2 * joueurs */ int selection_gagnant(Jeu *jeu, int *resultat); /* Libère le jeu de la mémoire */ void free_jeu(Jeu *jeu); #endif