DissertationsEnLigne.com - Dissertations gratuites, mémoires, discours et notes de recherche
Recherche

Gestion de projet en langage C

TD : Gestion de projet en langage C. Rechercher de 53 000+ Dissertation Gratuites et Mémoires

Par   •  16 Février 2024  •  TD  •  3 746 Mots (15 Pages)  •  76 Vues

Page 1 sur 15

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

  1. Fonction pour initialiser la grille[pic 6]
  2. Fonction pour afficher la grille[pic 7]
  3. Fonction pour vérifier qu'une case existe[pic 8]
  4. Fonction pour vérifier qu'un coup est valide[pic 9][pic 10][pic 11][pic 12]
  5. Fonction qui détermine si un joueur peut encore jouer[pic 13]
  6. Fonction de renvoie du numéro du joueur suivant[pic 14]
  7. Fonction qui permet au joueur de choisir un coup[pic 15]
  8. Fonction qui vérifie si la partie est termine[pic 16][pic 17]
  1. Fonction qui permet de jouer un coup[pic 18][pic 19][pic 20] [pic 21] [pic 22]
  2. 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;

...

Télécharger au format  txt (13.8 Kb)   pdf (568.5 Kb)   docx (543.7 Kb)  
Voir 14 pages de plus »
Uniquement disponible sur DissertationsEnLigne.com