2022-11-16 10:31:18 +01:00
|
|
|
#ifndef OTHELLO_JEU_H
|
|
|
|
#define OTHELLO_JEU_H 1
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
2022-11-17 16:51:56 +01:00
|
|
|
#include "liste.h"
|
2022-12-04 18:25:35 +01:00
|
|
|
#include "test.h"
|
2022-11-17 16:51:56 +01:00
|
|
|
|
2022-11-18 16:35:36 +01:00
|
|
|
typedef struct joueur Joueur;
|
|
|
|
|
2022-11-16 10:31:18 +01:00
|
|
|
/* Une case est soit vide, soit occupé par un des joueurs, noir ou blanc */
|
2022-11-17 16:59:18 +01:00
|
|
|
enum CASE { VIDE = ' ', BLANC = 'B', NOIR = 'N' };
|
2022-11-16 10:31:18 +01:00
|
|
|
|
2022-11-16 15:27:49 +01:00
|
|
|
/* Propriété globale du jeu */
|
2022-11-17 16:51:56 +01:00
|
|
|
enum PLATEAU { LONGEUR = 8, LARGEUR = 8 };
|
2022-11-16 15:27:49 +01:00
|
|
|
|
2022-12-04 17:53:24 +01:00
|
|
|
/* Type de joueurs */
|
|
|
|
enum PLAYER_TYPE { HUMAIN, MINIMAX, ALPHABETA };
|
|
|
|
|
|
|
|
/* Renvoie un string comportant le nom du type du joueur */
|
|
|
|
const char *joueur_type_str(const enum PLAYER_TYPE type);
|
|
|
|
|
2022-11-18 16:35:36 +01:00
|
|
|
/* Jeton contenant le type de case (cf. enum CASE) ainsi que la position */
|
2022-11-16 10:31:18 +01:00
|
|
|
struct jeton {
|
|
|
|
int couleur;
|
|
|
|
int pos_i;
|
|
|
|
int pos_j;
|
|
|
|
};
|
|
|
|
typedef struct jeton Jeton;
|
|
|
|
|
|
|
|
/* Ajoute un nouveau jeton */
|
2022-11-28 21:06:59 +01:00
|
|
|
Jeton *ajoute_jeton(const int position_i, const int position_j,
|
|
|
|
const int couleur);
|
2022-11-16 10:31:18 +01:00
|
|
|
|
2022-11-28 21:06:59 +01:00
|
|
|
void affiche_jeton(FILE *stream, const Jeton *jeton);
|
2022-11-19 15:50:18 +01:00
|
|
|
|
2022-11-16 10:31:18 +01:00
|
|
|
/* Jeu contenant nos 2 joueurs et le plateau de jeu */
|
|
|
|
struct jeu {
|
|
|
|
Joueur *j1;
|
|
|
|
Joueur *j2;
|
2022-11-16 15:27:49 +01:00
|
|
|
Jeton *plateau[LONGEUR][LARGEUR];
|
2022-11-16 10:31:18 +01:00
|
|
|
};
|
|
|
|
typedef struct jeu Jeu;
|
|
|
|
|
|
|
|
/* Créer une nouvelle partie */
|
|
|
|
Jeu *nouvelle_partie(void);
|
|
|
|
|
2022-11-17 20:24:22 +01:00
|
|
|
/* Lance et joue une partie */
|
2022-12-04 21:05:28 +01:00
|
|
|
enum CASE deroulement_partie(Jeu *jeu, const enum PLAYER_TYPE noir,
|
|
|
|
const enum PLAYER_TYPE blanc,
|
|
|
|
const Test_Data *test);
|
2022-11-17 20:24:22 +01:00
|
|
|
|
2022-11-18 15:15:18 +01:00
|
|
|
/* Coups possibles d'un joueur */
|
|
|
|
struct coups {
|
|
|
|
Liste *coups;
|
|
|
|
int taille_liste;
|
|
|
|
};
|
|
|
|
typedef struct coups Coups;
|
|
|
|
|
2022-11-17 20:53:06 +01:00
|
|
|
/* Vérifie si un joueur peut jouer */
|
2022-11-28 21:06:59 +01:00
|
|
|
Coups *action_possible_joueur(Jeton *plateau[LONGEUR][LARGEUR],
|
|
|
|
const int couleur);
|
2022-11-17 20:53:06 +01:00
|
|
|
|
2022-11-18 16:35:36 +01:00
|
|
|
/* Libère les coups possibles de la mémoire */
|
|
|
|
void free_coups(Coups *coups);
|
2022-11-17 20:24:22 +01:00
|
|
|
|
|
|
|
/* Vérifie si une partie est terminée */
|
|
|
|
int partie_finie(Jeu *jeu);
|
2022-11-17 16:51:56 +01:00
|
|
|
|
2022-11-17 22:01:25 +01:00
|
|
|
/* Compte les points, change le résultat avec le gagnant ainsi que les points de
|
2022-11-17 22:14:04 +01:00
|
|
|
* chacun des joueurs (Gagnant, Perdant)
|
2022-11-18 16:35:36 +01:00
|
|
|
* Renvoie 0 si égalité entre les 2 joueurs */
|
2022-11-28 21:06:59 +01:00
|
|
|
int selection_gagnant(const Jeu *jeu, int *resultat);
|
2022-11-17 22:01:25 +01:00
|
|
|
|
2022-11-19 15:50:18 +01:00
|
|
|
/* Copie le jeu */
|
2022-11-28 21:06:59 +01:00
|
|
|
Jeu *copie_jeu(const Jeu *jeu_source);
|
2022-11-19 15:50:18 +01:00
|
|
|
|
2022-11-18 15:15:18 +01:00
|
|
|
/* Libère le jeu de la mémoire */
|
2022-11-16 10:31:18 +01:00
|
|
|
void free_jeu(Jeu *jeu);
|
|
|
|
|
|
|
|
#endif
|