#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAY 10
#define TAY2 2
/* saisies solides (service minimum) */
static void get_s (char *s, size_t size)
{
fgets (s, size, stdin);
{
/* chercher le '\n' */
char *p = strchr (s, '\n');
if (p != NULL)
{
/* si on l'a trouve, on l'elimine. */
*p = 0;
}
else
{
/* Le traitement depend de l'application.
* Par exemple, ici, on choisi d'ignorer
* les autres caracteres.
*/
/* sinon, on lit tous les caracteres restants */
int c;
while ((c = fgetc (stdin)) != '\n' && c != EOF)
{
}
}
}
}
static int get_c (void)
{
char s[3];
get_s (s, sizeof s);
return s[0];
}
static int get_i (void)
{
char s[16];
get_s (s, sizeof s);
return strtol (s, NULL, 10);
}
/*traçage du tableau */
void affichage (char tab[TAY][TAY], int nb_noirs, int nb_blancs)
{
int i, k, numligne, numcol;
int l = 0;
int m = 0;
//titre
for (i = 0; i < 27; i++)
{
printf ("*#" );
}
for (i = 0; i < 10; i++)
{
printf ("*#" );
}
printf (" JEU DE DAME" );
for (i = 0; i < 10; i++)
{
printf ("*#" );
}
printf ("\n" );
for (i = 0; i < 27; i++)
{
printf ("*#" );
}
printf ("*\n\n\n" );
//rephre colonne
printf (" 1 2 3 4 5 6 7 8 9 10\n" );
//ligne horizontale haut
printf (" " );
for (i = 0; i < 50; i++)
{
printf ("_" );
}
printf ("\n" );
for (numligne = 0; numligne < 10; numligne++)
{
//la case noirte
if (m % 2 == 0)
{
for (k = 0; k < 3; k++)
{
//rephre ligne
if (k == 0 || k == 2)
printf ("|" );
else if (m == 0)
printf ("A|" );
else if (m == 2)
printf ("C|" );
else if (m == 4)
printf ("E|" );
else if (m == 6)
printf ("G|" );
else if (m == 8)
printf ("I|" );
for (numcol = 0; numcol < 10; numcol++)
{
//la fameuse case noirte
if (l % 2 != 1)
{
if (k == 1)
{
printf ("%c", tab[numligne][numcol]);
}
else
{
printf (" " );
}
l++;
}
//et la case blanche
else
{
printf ("###" );
l++;
}
}
printf ("|\n" );
}
m++;
}
//ligne horizontale bas
printf (" " );
for (i = 0; i < 50; i++)
{
printf ("-" );
}
//rephre colonne
printf ("\n 1 2 3 4 5 6 7 8 9 10\n" );
printf ("\n\n\n\n" );
//clearage du tableau
for (i = 0; i < 10; i++)
{
for (k = 0; k < 10; k++)
{
printf ("%c", tab[i][k]);
}
printf ("\n" );
}
printf ("\n\n\n" );
}
}
///////////////// fin affichagte
/// nombre de pion restant
int compten (char tab[TAY][TAY])
{
int nnr, i, k;
nnr = 0;
//calcul nombre de pions noirs restants
for (i = 0; i < 10; i++)
{
for (k = 0; k < 10; k++)
{
if (tab[i][k] == 'N')
{
nnr++;
}
}
}
return nnr;
}
////////////////////////////
int compteb (char tab[TAY][TAY])
{
int i, k;
int nbr = 0;
//calcul nombre de pions blancs restants
for (i = 0; i < 10; i++)
{
for (k = 0; k < 10; k++)
{
if (tab[i][k] == 'B')
{
nbr++;
}
}
}
return nbr;
}
static int lettre2num (int lettre)
{
int num = -1;
char lettres[] = "ABCDEFGHIJ";
char *p = strchr (lettres, lettre);
if (p != NULL)
{
num = (int) (p - lettres);
}
return num;
}
/**************************fin compte***********************/
/////////////////////demande deplacement////////////
int demandeletr (char const *prompt, char const *serr)
{
int lettre;
printf ("%s %s: ", prompt, serr);
fflush (stdout);
lettre = get_c ();
return lettre2num (lettre);
}
/////////////////////
int demandechi (void)
{
int chiffre;
printf (" ,chiffre:" );
chiffre = get_i ();
return chiffre - 1;
}
/**************************fin demande*****************************************/
///////////////////////deplacement///////////////
//////////supprim
void Retire (char tab[TAY][TAY], int lettrif, int chiffre)
{
tab[lettrif][chiffre] = ' ';
}
///APPARITION PION///////////
void Place (char tab[TAY][TAY], int lettrif2, int chiffre2)
{
tab[lettrif2][chiffre2] = 'X';
}
/******************************FIN DEPLACE*************************************/
////////////////////A QUI LE TOUR ?////////////////////////////
int tour0 ()
{
return 0;
}
///////////////////
int tour (int turn)
{
return !turn;
}
/******************************************************************************/
///////////////////////ERREUR PION//////////////////////////////////////////////
int erreurpion (char tab[TAY][TAY], int lettrif, int chiffre, int turn)
{
if (turn == 0 && tab[lettrif][chiffre] != 'B')
{
printf ("\nERREUR DE PION !Vous devez choisir un pion blanc.\n" );
return 1;
}
else if (turn == 1 && tab[lettrif][chiffre] != 'N')
{
printf ("\nERREUR DE PION ! Vous devez choisir un pion noir.\n" );
return 1;
}
else
return 0;
}
/******************************************************************************/
////////////////////////////ERREUR DE DEPLACEMENT///////////////////////////////
int erreurdeplac (char tab[TAY][TAY], int lettrif2, int chiffre2)
{
if (tab[lettrif2][chiffre2] != ' ')
{
printf ("ERREUR DESTINATION !Vous devez choisir une case vide.\n" );
return 1;
}
else
{
return 0;
}
}
/******************************************************************************/
///////////////////////////INITIALISATION TABLEAU///////////////////////////////
void initTab (char tab[TAY][TAY])
{
int i, j, m;
//case pions blancs
m = 0;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 10; j++)
{
if (j % 2 != 1 - (m % 2))
{
tab[i][j] = 'B';
}
else
{
tab[i][j] = '#';
}
}
m++;
}
//case vierges
for (i = 4; i < 6; i++)
{
for (j = 0; j < 10; j++)
{
if (j % 2 != 1 - (m % 2))
{
tab[i][j] = ' ';
}
else
{
tab[i][j] = '#';
}
}
m++;
}
//case pions noirs
m = 0;
for (i = 6; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (j % 2 != 1 - (m % 2))
{
tab[i][j] = 'N';
}
else
{
tab[i][j] = '#';
}
}
m++;
}
}
/*********************************FIN INIT*************************************/
int main (void)
{
char jeu[TAY][TAY];
initTab (jeu);
int nb_noirs = compten (jeu);
int nb_blancs = compteb (jeu);
int joueur = tour0 ();
affichage (jeu, nb_noirs, nb_blancs);
while (nb_noirs != 0 && nb_blancs != 0)
{
if (joueur % 2 == 0)
{
printf ("Joueur Blanc\n" );
}
else
{
printf ("Joueur Noir\n" );
}
/* from */
{
int err = 0;
int ori_l, ori_n;
do
{
do
{
ori_l = demandeletr ("Choisir le pion, lettre", err ? "*ERR*\n" : "" );
}
while (ori_l == -1);
do
{
ori_n = demandechi ();
}
while (ori_n == -1);
err = erreurpion (jeu, ori_l, ori_n, joueur);
}
while (err);
Retire (jeu, ori_l, ori_n);
}
/* to */
{
int err = 0;
int des_l, des_n;
do
{
do
{
des_l = demandeletr ("Where to go, lettre", err ? "*ERR*\n" : "" );
}
while (des_l == -1);
do
{
des_n = demandechi ();
}
while (des_n == -1);
err = erreurdeplac (jeu, des_l, des_n);
}
while (err);
Place (jeu, des_l, des_n);
}
joueur = tour (joueur);
nb_noirs = compten (jeu);
nb_blancs = compteb (jeu);
affichage (jeu, nb_noirs, nb_blancs);
}
return 0;
}
|