update report

This commit is contained in:
Mylloon 2022-12-01 19:56:31 +01:00
parent 12c20f5805
commit f4797f572b
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -118,8 +118,13 @@ la taille du plateau est complètement modulable, aussi les couleurs des joueurs
Enfin, sachant qu'il faut aussi implémenter des IAs, j'ai fait en sorte que le jeu
du joueur humain ne soit pas complètement lié au fonctionnement du jeu. Le projet
est donc séparé en plusieurs fichiers/fonctions (cf. \autoref{tree:project}).
\\\\
Grâce à ça, les fonctions relatives au jeu sont indifférentes par rapport à quelle
fonction "joueur" est appelée. Autrement dit, tout ce qui est relatif à un joueur
humain est dans \texttt{humain.h}. Le fichier \texttt{joueur.h} ne contient rien
spécifique à un joueur humain.
\begin{figure}[h]
\begin{figure}[ht]
\centering
\begin{minipage}{0.15\textwidth}
\begin{minted}[autogobble,frame=lines,rulecolor=gray]{mcf}
@ -144,9 +149,6 @@ est donc séparé en plusieurs fichiers/fonctions (cf. \autoref{tree:project}).
\label{tree:project}
\end{figure}
Tout ce qui est relatif à un joueur humain est dans \texttt{humain.h}. Le fichier
\texttt{joueur.h} ne contient rien spécifique à un joueur humain.
\newpage
\subsection[Minimax]{Algorithme minimax}
\subsubsection{Algorithme}
@ -165,7 +167,7 @@ décide si le coup est bien ou non, plus elle est précise plus le coup décidé
meilleur.
\subsubsection{Exemple d'utilisation}
L'utilisation de l'algorithme est simple. Il suffit d'appeller une seule fonction
L'utilisation de l'algorithme est simple. Il suffit d'appeler une seule fonction
et elle jouera un coup (cf. \autoref{cod:minimax_def}).
\begin{figure}[h]
\centering
@ -174,20 +176,66 @@ et elle jouera un coup (cf. \autoref{cod:minimax_def}).
/* Joue le tour d'après l'algorithme minimax */
void action_joueur_minimax(Jeu *jeu, const int couleur);
\end{minted}
\begin{minted}[autogobble,linenos,firstnumber=last]{c}
/* Auxiliaire : Décide d'une case à jouer via l'algorithme minimax */
void _action_joueur_minimax(Jeu *jeu, int profondeur, const int couleur,
const int gagnant, int *ligne, int *colonne,
int *score);
\end{minted}
\end{minipage}
\caption{Déclaration de minimax, dans \texttt{minimax.h}}
\label{cod:minimax_def}
\end{figure}
Pour l'utiliser, il faut l'appeller dans la fonction qui s'occupe du déroulement
du jeu.
Pour l'utiliser, il faut l'appeler dans la fonction qui s'occupe du déroulement
du jeu (cf. \autoref{cod:minimax_play}).
\begin{figure}[ht]
\centering
\begin{minipage}{0.8\textwidth}
\begin{minted}[autogobble,linenos]{c}
while (!partie_finie(jeu)) {
Coups *possibilites =
action_possible_joueur(jeu->plateau, tour->couleur);
if (possibilites->taille_liste > 0) {
// Si le joueur peut jouer
if (tour->couleur == NOIR) {
// Tour du joueur minimax
action_joueur_minimax(jeu, tour->couleur);
} else {
// Tour du joueur humain
action_joueur_humain(jeu, tour->couleur);
}
}
// On passe la main à l'autre joueur
tour = jeu->j1->couleur == tour->couleur ? jeu->j2 : jeu->j1;
}
\end{minted}
\end{minipage}
\caption{Extrait modifié de \texttt{jeu.c}, avec minimax jouant les noirs et un humain les blancs}
\label{cod:minimax_play}
\end{figure}
\newpage
\subsubsection{Problèmes rencontrés}
% TODO avec code d'illustration
Le plus dur était l'implémentation en elle-même et de pas s'emmêler entre les copies
de plateau. La fonction \texttt{action\_joueur\_minimax} appelle une fonction auxiliaire
\texttt{\_action\_joueur\_minimax} (cf. \autoref{cod:minimax_def}) qui fait implémente directement minimax. Elle se passe
en paramètre récursivement :
\begin{itemize}
\item la ligne choisie
\item la colonne choisie
\item le meilleur score
\item la profondeur actuellement évaluée
\item la couleur du joueur (soit MIN, soit MAX)
\end{itemize}
\subsection[Alpha-Bêta]{Élagage alpha-bêta}
\subsubsection{Algorithme}
% TODO expliquer fonctionnement alphabeta
Les coupures $\alpha - \beta$ permettent de réduire la taille en mémoire de minimax
en ne calculant pas certains scénarios.
\subsubsection{Exemple d'utilisation}
% TODO expliquer comment l'utiliser