Trouver un fichier de code source :
   

Version Française - English Version
Accueil > 

C++

 > 

REVERSI

 > 

Reversi (copie)\main.c


REVERSI

Reversi (copie)\main.c


Informations sur ce code source

Cliquez pour voir la capture en taille normale
Code Source REVERSI
Auteur BCedric
Fichier Reversi (copie)\main.c en C / C++ / C++.NET
Publié le 27/05/2007

Le célèbre jeu du réversi (ou othello) contre le PC. C'est mon premier programme dans le genre, donc j'attends vos commentaires sur la façon de gérer l'IA :) Les pions noirs, c'est le PC, et les blancs... Ben c'est vous.
 

Fichier : Reversi (copie)\main.c

Nombre de lignes : 279 lignes


Afficher ce fichier en plein écran
  • #include <SDL/SDL.h>
  • #define klCase 64
  • #define khCase 64
  • #define kblanche 0
  • #define knoire 1
  • #define kneutre 2
  • #define kcorrect 1
  • void copie(int table[8][8], int copieTable[8][8]);
  • int positionnement(int table[8][8], int couleur, int i, int j);
  • int main(int argc, char* argv[]) {
  • int passerTour(int table[8][8], int couleur);
  • void ordinateur(int table[8][8]);
  • void initialisation(int table[8][8]) ;
  • void dessin(int table[8][8], SDL_Surface* spiece[3], SDL_Surface* sfenetre);
  • int fin=0, n;
  • int table[8][8];
  • SDL_Surface* sfenetre;
  • SDL_Surface* spiece[3];
  • SDL_Event evenement;
  • SDL_Init(SDL_INIT_VIDEO);
  • SDL_WM_SetCaption("Reversi", NULL);
  • sfenetre=SDL_SetVideoMode(8*klCase, 8*khCase, 32, SDL_HWSURFACE);
  • spiece[kblanche]=SDL_LoadBMP("Images/blanche.bmp");
  • spiece[knoire]=SDL_LoadBMP("Images/noire.bmp");
  • spiece[kneutre]=SDL_LoadBMP("Images/neutre.bmp");
  • initialisation(table);
  • dessin(table, spiece, sfenetre);
  • SDL_Flip(sfenetre);
  • while ( !fin ) {
  • SDL_WaitEvent(&evenement);
  • switch ( evenement.type ) {
  • case SDL_QUIT:
  • fin=1;
  • break;
  • case SDL_KEYDOWN:
  • if ( evenement.key.keysym.sym==SDLK_ESCAPE )
  • fin=1;
  • break;
  • case SDL_MOUSEBUTTONDOWN:
  • if ( !passerTour(table, kblanche) ) {
  • if ( positionnement(table, kblanche, evenement.button.y/khCase,
  • evenement.button.x/klCase)==kcorrect ) {
  • dessin(table, spiece, sfenetre);
  • SDL_Flip(sfenetre);
  • SDL_Delay(1000);
  • if ( !passerTour(table, knoire) )
  • ordinateur(table);
  • }
  • }
  • else if ( !passerTour(table, knoire) )
  • ordinateur(table);
  • dessin(table, spiece, sfenetre);
  • SDL_Flip(sfenetre);
  • break;
  • }
  • }
  • for ( n=0; n<3; n++ )
  • SDL_FreeSurface(spiece[n]);
  • SDL_Quit();
  • return 0;
  • }
  • int passerTour(int table[8][8], int couleur) {
  • int i, j;
  • int copieTable[8][8];
  • for ( i=0; i<8; i++ ) {
  • for ( j=0; j<8; j++ ) {
  • copie(table, copieTable);
  • if ( positionnement(copieTable, couleur, i, j)==kcorrect )
  • return 0;
  • }
  • }
  • return 1;
  • }
  • void ordinateur(int table[8][8]) {
  • int arbre(int table[8][8], int couleur, int x);
  • int i, j, n, m, x=0;
  • int copieTable[8][8], tableDefinitive[8][8];
  • for ( i=0; i<8; i++ ) {
  • for ( j=0; j<8; j++ ) {
  • copie(table, copieTable);
  • if ( positionnement(copieTable, knoire, i, j)==kcorrect ) {
  • x++;
  • n=arbre(copieTable, knoire, 0);
  • if ( x==1 || n>m ) {
  • m=n;
  • copie(copieTable, tableDefinitive);
  • }
  • }
  • }
  • }
  • copie(tableDefinitive, table);
  • return;
  • }
  • int arbre(int table[8][8], int couleur, int x) {
  • int total(int table[8][8]);
  • int i, j, n=0;
  • int copieTable[8][8];
  • if ( x<4 ) {
  • x++;
  • for ( i=0; i<8; i++ ) {
  • for ( j=0; j<8; j++ ) {
  • copie(table, copieTable);
  • if ( positionnement(copieTable, couleur, i, j)==kcorrect )
  • n+=arbre(copieTable, !couleur, x);
  • }
  • }
  • }
  • else
  • return total(table);
  • return n/4;
  • }
  • int total(int table[8][8]) {
  • int i, j, n=0;
  • for ( i=0; i<8; i++ )
  • for ( j=0; j<8; j++ )
  • if ( table[i][j]==knoire )
  • n++;
  • else if ( table[i][j]==kblanche )
  • n--;
  • return n;
  • }
  • void copie(int table[8][8], int copieTable[8][8]) {
  • int i, j;
  • for ( i=0; i<8; i++ )
  • for ( j=0; j<8; j++ )
  • copieTable[i][j]=table[i][j];
  • return;
  • }
  • int encadrement(int table[8][8], int couleur, int i, int j, int dir[2]) {
  • while ( 0<=i && i<=7 && 0<=j && j<=7 && table[i][j]==!couleur )
  • i+=dir[0], j+=dir[1];
  • if ( 0<=i && i<=7 && 0<=j && j<=7 &&
  • table[i][j]==couleur && table[i-dir[0]][j-dir[1]]==!couleur )
  • return kcorrect;
  • return !kcorrect;
  • }
  • int inversionPions(int table[8][8], int couleur, int i, int j) {
  • int encadrement(int table[8][8], int couleur, int i, int j, int dir[2]) ;
  • int n, ci, cj, x=0;
  • int dir[8][2]={{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
  • for ( n=0; n<8; n++ ) {
  • ci=i, cj=j;
  • if ( encadrement(table, couleur, ci+dir[n][0], cj+dir[n][1], dir[n])==kcorrect ) {
  • while ( table[ci+dir[n][0]][cj+dir[n][1]]==!couleur ) {
  • table[ci+dir[n][0]][cj+dir[n][1]]=couleur;
  • ci+=dir[n][0], cj+=dir[n][1];
  • x++;
  • }
  • }
  • }
  • return x;
  • }
  • int positionnement(int table[8][8], int couleur, int i, int j) {
  • int inversionPions(int table[8][8], int couleur, int i, int j);
  • if ( table[i][j]==kneutre ) {
  • if ( inversionPions(table, couleur, i, j)!=0 ) {
  • table[i][j]=couleur;
  • return kcorrect;
  • }
  • }
  • return !kcorrect;
  • }
  • void dessin(int table[8][8], SDL_Surface* spiece[3], SDL_Surface* sfenetre) {
  • int i, j;
  • SDL_Rect position;
  • for ( i=0; i<8; i++ ) {
  • position.y=i*khCase;
  • for ( j=0; j<8; j++ ) {
  • position.x=j*klCase;
  • SDL_BlitSurface(spiece[table[i][j]], NULL, sfenetre, &position);
  • }
  • }
  • return;
  • }
  • void initialisation(int table[8][8]) {
  • int i, j;
  • for ( i=0; i<8; i++ )
  • for ( j=0; j<8; j++ )
  • table[i][j]=kneutre;
  • table[3][3]=kblanche, table[3][4]=knoire,
  • table[4][3]=knoire, table[4][4]=kblanche;
  • return;
  • }


Liste des fichiers du ZIP

FichierTaille
Reversi (copie) \ Images \ blanche.bmp12,05 Ko
Reversi (copie) \ Images \ neutre.bmp12,05 Ko
Reversi (copie) \ Images \ noire.bmp12,05 Ko
Reversi (copie) \ main.c4,83 Ko

Pour télécharger le zip au complet, veuillez vous rendre sur cette page :
Télécharger REVERSI


Sources du même auteur ayant un ZIP


  • C / C++ / C++.NET Recherche des coefficients de bézout
    C'est un tout petit programme avec une fonction récursive qui permet de rechercher les coefficients de Bézout. Le théorème de Bézout dit qu...
    Langage : C / C++ / C++.NET, publié le 15/06/2008 par BCedric

  • C / C++ / C++.NET Fractale de sierpinski
    La fameuse fractale de Sierpinski... Pas de commentaires :)
    Langage : C / C++ / C++.NET, publié le 10/07/2007 par BCedric

  • C / C++ / C++.NET Arbre de pythagore
    Une jolie construction mathématique. -On dessine un carré de base; -On ajoute un triangle rectangle dessus, avec comme hypothénuse le côté...
    Langage : C / C++ / C++.NET, publié le 09/07/2007 par BCedric

  • C / C++ / C++.NET Le mot le plus long
    Ce code permet de générer des lettres et de trouver le mot le plus long... Intéressant de se comparer à l'ordinateur ;-)
    Langage : C / C++ / C++.NET, publié le 15/02/2007 par BCedric

  • C / C++ / C++.NET Fractale de mandelbrot
    C'est très joli ! Se déplacer : flècles directionnelles Zoomer : + (numpad) Dézoomer : - (idem) Augmenter le nombre d'itérations maximal...
    Langage : C / C++ / C++.NET, publié le 08/02/2007 par BCedric

Voir la suite...


Sources du même langage comportant un zip


Voir la suite...





Guide achat

Softwares to download (FR)...

  • Devis-Factures PHMSD (2.1.0.1)
    Devis-Factures PHMSD (2.1.0.1)
    Configuration minimale Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à jour) - Processeur 500 Mhz (700 Mhz conseillé) - 256 Mo de Ram - 100 Mo d'espace disque disponible po...
  • Ludoprêt (3.2) [Gratuit / Freeware]
    Ludoprêt (3.2) [Gratuit / Freeware]
    Logiciel gratuit de gestion de ludothèque. Gestion des jeux et des adhérents. Gestion des forfaits et des cotisations. Gestion des prêts et retours. Gestion des retards et édition des relances. ...
  • Revealer Keylogger Free (2.05) [Gratuit / Freeware]
    Revealer Keylogger Free (2.05) [Gratuit / Freeware]
    Keylogger invisible et gratuit pour Windows 8, 7, Vista ou XP. Revealer Keylogger Free vous permet de surveiller l'activité des utilisateurs de votre ordinateur et d'enregistrer toutes les touches du ...

Sondage...

Le top des photos

Photo ??Photo ???????????????
Photo ????????Photo ????????
 

Développement réalisé par Nicolas SOREL (Nix) et Emmanuel (EBArtSoft) avec l'aide de Cyril DURAND, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,28 sec