Gestion de projet en langage C
TD : Gestion de projet en langage C. Rechercher de 53 000+ Dissertation Gratuites et MémoiresPar ROYKAY • 16 Février 2024 • TD • 3 746 Mots (15 Pages) • 204 Vues
Langage C
FISA-I3-EEDD 2023-2024[pic 1]
Systèmes d’informatisation :
Langage C
Rapport du jeu Othello
codé en langage C
Préparé par :
ALKAREH Roy
Présenté à :
Mme Marjorie RUSSO
Sommaire
I Présentation du projet 3
I.1 Introduction 3
I.2 Règles du jeu 3
II Diagramme et étude avant-projet 5
III Vue générale du programme 6
IV Details des fonctions 7
1. Fonction pour initialiser la grille 7
2. Fonction pour afficher la grille 7
3. Fonction pour vérifier qu'une case existe 8
4. Fonction pour vérifier qu'un coup est valide 8
5. Fonction qui détermine si un joueur peut encore jouer 9
6. Fonction de renvoie du numéro du joueur suivant 10
7. Fonction qui permet au joueur de choisir un coup 10
8. Fonction qui vérifie si la partie est termine 11
9. Fonction qui permet de jouer un coup 12
10. Le main 14
V Code complet 15
VI Références et sites 30
I Présentation du projet
I.1 Introduction
Le Réversi est un jeu de plateau pour deux joueurs et comme pour la plupart des jeux de plateau, il existe de nombreuses versions informatiques fournissant une intelligence artificielle plus ou moins développée, capable d'anticiper les réactions adverses avec plusieurs dizaines de coups d'avance en utilisant diverses techniques comme un arbre de recherche et un algorithme « min-max ». [pic 2]
Ainsi le but de ce projet universitaire est de mieux appréhender le fonctionnement d'une intelligence artificielle en réalisant un jeu de Réversi en langage C, qui, à terme sera « quasi imbattable » par un joueur humain, même expérimenté et capable rivaliser avec les meilleurs programmes du genre.
I.2 Règles du jeu
Le Réversi (aussi connu sous son appellation commerciale Othello) est un jeu de plateau qui se joue sur un damier carré de 64 cases avec des pions ayant une face noire et une face blanche.
Chaque joueur à sa couleur. Le joueur ayant les pions noirs commence. Au départ, il y a deux pions noirs et deux pions blancs sur le plateau.
Le joueur qui a la main doit poser un pion de manière à encadrer un ou plusieurs pions adverses avec un autre de ses pions déjà posé. Ainsi, les pions encadrés sont capturés et sont retournés de manière à prendre la couleur du joueur.
Les joueurs jouent ensuite à tour de rôle. S'il est impossible pour un joueur de placer un pion, il passe son tour.
La partie se termine lorsque le plateau est plein ou qu'aucun des deux joueurs ne peut plus jouer. Le gagnant est celui qui a le plus de pions de sa couleur sur le plateau.
[pic 3]
II Diagramme et étude avant-projet [pic 4]En résumé voici les fonctions qu’on aura besoin :
- Fonction pour initialiser la grille
- Fonction pour afficher la grille
- Fonction pour vérifier qu'une case existe
- Fonction pour vérifier qu'un coup est valide
- Fonction qui détermine si un joueur peut encore jouer
- Renvoie le numéro du joueur suivant
- Permet au joueur de choisir un coup
- Vérifie si la partie est terminée
- Fonction qui permet de jouer un cou
III Vue générale du programme[pic 5]
La capture d’écran suivante affiche la structure du programme avec explication en rouge de chaque étape
IV Details des fonctions
- Fonction pour initialiser la grille[pic 6]
- Fonction pour afficher la grille[pic 7]
- Fonction pour vérifier qu'une case existe[pic 8]
- Fonction pour vérifier qu'un coup est valide[pic 9][pic 10][pic 11][pic 12]
- Fonction qui détermine si un joueur peut encore jouer[pic 13]
- Fonction de renvoie du numéro du joueur suivant[pic 14]
- Fonction qui permet au joueur de choisir un coup[pic 15]
- Fonction qui vérifie si la partie est termine[pic 16][pic 17]
- Fonction qui permet de jouer un coup[pic 18][pic 19][pic 20] [pic 21] [pic 22]
- Le main[pic 23]
V Code complet
#include <stdio.h>
#define N 8
#define VIDE ' '
#define NOIR 'X'
#define BLANC 'O'
typedef char t_matrice[N][N];
void init_matrice (t_matrice m) {
int i, j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
m[i][j] = VIDE;
m[N/2-1][N/2-1] = NOIR;
m[N/2-1][N/2] = BLANC;
m[N/2][N/2-1] = BLANC;
m[N/2][N/2] = NOIR;
}
void afficher_matrice (t_matrice m) {
int i, j;
char a = 'A';
printf ("\n");
for (i=0; i<N; i++) {
printf (" %c ", a);
a++;
}
printf ("\n+");
for (i=0; i<N; i++)
printf ("---+");
printf ("\n");
for (i=0; i<N; i++) {
printf ("|");
for (j=0; j<N; j++)
printf (" %c |", m[i][j]);
printf (" %d\n+", i+1);
for (j=0; j<N; j++)
printf ("---+");
printf ("\n");
}
}
int case_existe (int lig, int col) {
return ((col >= 0) && (col < N) && (lig >= 0) && (lig < N));
}
int coup_valide (t_matrice m, int lig, int col, int joueur) {
int i, j, ok;
char cj, ca;
if (joueur == 1) {
cj = NOIR;
ca = BLANC;
} else {
cj = BLANC;
ca = NOIR;
}
if (!case_existe(lig, col) || m[lig][col] != VIDE) return 0;
i = lig - 1;
ok = 0;
while (case_existe(i, col) && m[i][col] == ca) {
i--;
ok = 1;
}
if (case_existe(i, col) && m[i][col] == cj && ok == 1) return 1;
i = lig + 1;
ok = 0;
while (case_existe(i, col) && m[i][col] == ca) {
i++;
ok = 1;
}
if (case_existe(i, col) && m[i][col] == cj && ok == 1) return 1;
j = col - 1;
ok = 0;
while (case_existe(lig, j) && m[lig][j] == ca) {
j--;
ok = 1;
}
if (case_existe(lig, j) && m[lig][j] == cj && ok == 1) return 1;
...