Accueil > > > MORPION II
MORPION II
Information sur la source
Description
MORPION 2 en C C'est mon deuxieme programme (et deuxième morpion aussi) Cette fois vous jouez contre l'ordinateur.
Source
- //Morpion 2 permet de se mesurer contre l'ordinateur.
- //Il est aussi plus joli que Morpion 1 (ya pas de mal...)
- //A chaque nouvelle partie, celui qui à joué en premier joue en 2e.
- //L'ordinateur deviens plus difficile à battre si le joueur atteint 3 points.
- //A 5 points, bonne chance...
-
-
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <time.h>
-
- #define MESSAGE_ERREUR { TEXTE(7, 25, 19, "Tu t'es plant\x82 quelque part ! Recommence :"); sleep(1500); }
-
- void jeux_morpion(void);
- void TEXTE(int couleur, int col, int ligne, char* texte);
- void affiche(int couleur, int col, int ligne, int *tableau);
- void intro(void);
- void clear(void);
-
- int verif_case(int *pgrille);
- int verif_vainqueur(int joueur);
-
- int coup_aleatoire(void);
- int coup_secondaire(int joueur, int mode_pas_juste);
- int coup_angle(void);
- int coup_central(void);
- int joueur1(void);
- int ordinateur(int prems);
-
- int grille[3][3] = {0}; //Grille du morpion
- int cases[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; //Pour faire son choix...
- int *pgrille = &grille; //Pointeur pour selectionner la case choisie par le joueur
- int *pcases = &cases; //Pointeur pour afficher le tableau "cases"
- int rejouer; //Pour les nouvelles parties
- int ok = 0; //Flag pour erreur
- int v = 0; //Vainqueur
- int x; //Selection du joueur
- int c; //Compteur de coups
- int score1 = 0;
- int score2 = 0;
- char selection;
-
-
-
- int main()
- {
- jeux_morpion();
- return 0;
- }
-
-
-
- void jeux_morpion(void)
- {
- int i, j;
- int k = 0; //compteur de parties
-
- //Ecran de presentation
- intro();
- TEXTE(7, 60, 19, "Par Cal");
- TEXTE(8, 1, 24, "Entr\x82 \be pour jouer");
- getch();
- clrscr();
-
- //Ecran de jeu
- while(getchar() != '\n');
- TEXTE(4, 32, 2, "MORPION II");
- TEXTE(2, 4, 24, "Ton score : 0");
- TEXTE(12, 51, 24, "Score de l'ordinateur : 0");
- TEXTE(8, 4, 9, "Cases :");
- affiche(8, 4, 11, pcases);
-
-
- start :
- rejouer = 0;
- v = 0;
- k++;
-
- if(score1 >= 5)
- TEXTE(4, 25, 5, "Mode \"c'est pas juste\" activ\x82...");
-
-
- //Re-initialisation de la grille pour les nouvelles parties
- for(i = 0; i < 3; i++)
- {
- for(j = 0; j <3; j++)
- grille[i][j] = 0;
- }
- //Affichage de la grille
- TEXTE(7, 32, 9, "Grille :");
- affiche(7, 32, 11, pgrille);
-
- //La partie peut commencer
-
- //Si les 9 coups n'ont pas été joués (en fait ça s'arrete au 8e,
- //mais si un joueur arrive au 9e coup, c'est un match nul)
- for(c = 1; c < 9; c += 2)
- {
- if(!(k%2)) //Pour que l'ordinateur commence toutes les 2 parties
- {
- ordinateur(1);
- if(rejouer)
- goto start;
-
- joueur1();
- if(rejouer)
- goto start;
- }
- else
- {
- joueur1();
- if(rejouer)
- goto start;
-
- ordinateur(0);
- if(rejouer)
- goto start;
- }
- }
- //Personne n'a gagné
- while(getchar() != '\n');
- clear();
- TEXTE(7, 25, 19, "Match nul ! ");
- TEXTE(7, 25, 20, "Une autre partie ? (o/n) :");
- if((selection = getch()) == 'o')
- {
- while(getchar() != 'o');
- goto start;
- }
- else
- exit(0);
-
- return;
- } //Fin de jeu_morpion
-
-
-
- //Affiche un tableau[3][3] (cases[3][3] ou grille[3][3] donc)
- void affiche(int couleur, int col, int ligne, int *tableau)
- {
- int i, j;
- int t = 0;
-
- for(j = 0; j < 3; j++)
- {
- for(i = 0; i < 3; t++, i++)
- {
- tableau += t;
- textcolor(couleur);
- if((*tableau) && ((tableau) != (++pcases))) //Met de la couleur seulement sur grille[3][3]
- (*tableau == 1) ? textcolor(2) : textcolor(12); //1 en vert, 2 en rouge et 0 en blanc
- gotoxy(col + (i*5), ligne + (j*2)); //Place le curçeur au bon endroit
- printf("%d", *tableau); //Affiche les chiffres
- tableau -= t;
- }
- }
-
- return;
- }
-
-
-
- //Pour vérifier si la case n'est pas déjà prise
- int verif_case(int *pgrille)
- {
-
- if(*pgrille)
- {
- clear();
- TEXTE(7, 25, 20, "Case d\x82j\x85 prise ! ");
- sleep(1500);
- ok = 0;
- }
- else
- ok = 1;
- return ok;
- }
-
-
-
- //Vérifie si chaque ligne ou chaque diagonale est égale à 3 ou 6 suivant le numero du joueur
- //Mais il ne faut pas de 0 car 1 + 2 + 0 = 3
- int verif_vainqueur(int joueur)
- {
- int s, t, u;
-
- //Lignes
- for(s = 0, t = 1, u = 2 ; u <= 8; s += 3, t += 3, u += 3) {
- if((pgrille[s] && pgrille[t] && pgrille[u]) && (pgrille[s] + pgrille[t] + pgrille[u] == 3*joueur))
- v = 1;
- }
-
- //Colones
- for(s = 0, t = 3, u = 6; u <= 8; s++, t++, u++) {
- if((pgrille[s] && pgrille[t] && pgrille[u]) && (pgrille[s] + pgrille[t] + pgrille[u] == 3*joueur))
- v = 1;
- }
-
- //Diagonnales
- for(s = 0, t = 4, u = 8; s <= 2; s += 2, u -=2) {
- if((pgrille[s] && pgrille[t] && pgrille[u]) && (pgrille[s] + pgrille[t] + pgrille[u] == 3*joueur))
- v = 1;
- }
-
- return v;
- }
-
-
-
- //L'ordinateur joue une case aléatoire (pour varier les parties)
- int coup_aleatoire(void)
- {
- int r;
- ok = 0;
-
- do
- {
- srand((unsigned) time(NULL));
- r = rand() % 8;
-
- if(!pgrille[r])
- {
- pgrille[r] = 2;
- ok = 1;
- }
-
- }
- while(!ok);
-
- sleep(500); //L'ordinateur réflechit...
-
- return ok;
- }
-
-
-
- //L'ordinateur vérifie si le joueur ou lui peut gagner et agit en consequence
- int coup_secondaire(int joueur, int mode_pas_juste)
- {
- int s, t, u;
-
- ok = 0;
-
- //La fonction vérifie si une ligne est égale à 2 ou 4 selon le joueur concerné
- //et en faisant attention à ne pas confondre 1 + 1 + 0 et 2 + 0 + 0.
-
- //Vérifie les lignes
- for(s = 0, t = 1, u = 2; u <= 8; s += 3, t += 3, u += 3)
- {
- if(((pgrille[s] + pgrille[t] + pgrille[u]) == (2*joueur)) &&
- (pgrille[s] != 2*joueur) &&
- (pgrille[t] != 2*joueur) &&
- (pgrille[u] != 2*joueur))
- {
- if(mode_pas_juste) { //Si le mode "c'est pas juste" est activé,
- ok = 1; //Il n'y a pas de vérification, donc l'ordi joue 2 cases...
- if(!pgrille[s])
- pgrille[s] = 2;
- else if(!pgrille[t])
- pgrille[t] = 2;
- else if(!pgrille[u])
- pgrille[u] = 2;
- else
- ok = 0;
- }
-
- else if(!ok) {
- ok = 1;
- if(!pgrille[s])
- pgrille[s] = 2;
- else if(!pgrille[t])
- pgrille[t] = 2;
- else if(!pgrille[u])
- pgrille[u] = 2;
- else
- ok = 0;
- }
- }
- }
-
- //Vérifie les colonnes
- for(s = 0, t = 3, u = 6; u <= 8; s++, t++, u++)
- {
- if((pgrille[s] + pgrille[t] + pgrille[u] == 2*joueur) &&
- (pgrille[s] != 2*joueur) &&
- (pgrille[t] != 2*joueur) &&
- (pgrille[u] != 2*joueur))
- {
- if(mode_pas_juste) {
- ok = 1;
- if(!pgrille[s])
- pgrille[s] = 2;
- else if(!pgrille[t])
- pgrille[t] = 2;
- else if(!pgrille[u])
- pgrille[u] = 2;
- else
- ok = 0;
- }
-
- else if(!ok) {
- ok = 1;
- if(!pgrille[s])
- pgrille[s] = 2;
- else if(!pgrille[t])
- pgrille[t] = 2;
- else if(!pgrille[u])
- pgrille[u] = 2;
- else
- ok = 0;
- }
- }
- }
-
- //Vérifie les diagonnales
- for(s = 0, t = 4, u = 8; s <= 2; s += 2, u -=2)
- {
- if((pgrille[s] + pgrille[t] + pgrille[u] == 2*joueur) &&
- (pgrille[s] != 2*joueur) &&
- (pgrille[t] != 2*joueur) &&
- (pgrille[u] != 2*joueur))
- {
- if(mode_pas_juste) {
- ok = 1;
- if(!pgrille[s])
- pgrille[s] = 2;
- else if(!pgrille[t])
- pgrille[t] = 2;
- else if(!pgrille[u])
- pgrille[u] = 2;
- else
- ok = 0;
- }
-
- else if(!ok) {
- ok = 1;
- if(!pgrille[s])
- pgrille[s] = 2;
- else if(!pgrille[t])
- pgrille[t] = 2;
- else if(!pgrille[u])
- pgrille[u] = 2;
- else
- ok = 0;
- }
- }
- }
- sleep(1000);
-
- return ok;
- }
-
-
-
- //L'ordinateur joue l'un des 4 coins au hasard
- int coup_angle(void)
- {
- int r;
- ok = 0;
-
- do
- {
- do
- {
- srand((unsigned) time (NULL));
- r = rand() % 9;
- }
- while(!(r == 0 || r == 2 || r == 6 || r == 8));
-
- if(!pgrille[r])
- {
- pgrille[r] = 2;
- ok = 1;
- }
- }
- while(!ok);
-
- sleep(500);
-
- return ok;
- }
-
-
-
- //L'ordinateur joue la case du milleu
- int coup_central(void)
- {
- ok = 0;
-
- pgrille += 4;
- if(!*pgrille)
- {
- *pgrille = 2;
- ok = 1;
- }
- pgrille -= 4;
-
- sleep(400);
-
- return ok;
- }
-
-
-
- //Les coups du joueur hummain
- int joueur1(void)
- {
- int col, ligne;
-
- do
- {
- clear();
- TEXTE(7, 25, 19, "Tape ta case : ");
- scanf("%d",&x);
-
-
- if ((x >= 0) && (x <= 8)) //Si le joueur n'a pas fait d'erreur
- {
- pgrille += x; //Positionnement dans la case du tableau choisie
- verif_case(pgrille);
- if(ok) //Assigne la valeur 1 si la case n'est pas déjà prise
- *pgrille = 1;
- pgrille -= x; //Reviens au debut du tableau
- }
- else
- {
- MESSAGE_ERREUR
- ok = 0;
- }
- }
- while (!ok);
-
- affiche(7, 32, 11, pgrille);
- verif_vainqueur(1);
- if(v) //Si le joueur a gagné
- {
- while(getchar() != '\n');
- score1++;
- clear();
- TEXTE(2, 25, 19, "Bravo, tu as gagn\x82 !");
- gotoxy(16, 24);
- printf("%d", score1);
- TEXTE(7, 25, 20, "Une autre partie ? (o/n) :");
- if((selection = getch()) == 'o')
- {
- while(getchar() != 'o');
- rejouer = 1;
- }
- else
- exit(0);
- }
-
- return rejouer;
- }
-
-
-
- //Les coups de l'ordinateur
- int ordinateur(int prems) //prems = l'ordinateur joue le premier
- {
- int m = 0; //Mode "c'est pas juste"
-
- ok = 0;
-
- if(score1 >= 5)
- m = 1;
-
- if(prems) {
- if(c == 1 || c == 3)
- coup_angle();
- if(!ok)
- coup_secondaire(2, m);
- if(!ok)
- coup_secondaire(1, m);
- if(!ok)
- coup_angle();
- if(!ok)
- coup_aleatoire();
- }
- else {
- if(!ok && score1 >= 3 && c == 1) //ça deviens plus dur si le score1 est superieur à 3
- coup_central();
- if(!ok && c == 1)
- coup_aleatoire();
- if(!ok)
- coup_secondaire(2, m);
- if(!ok)
- coup_secondaire(1, m);
- if(!ok)
- coup_aleatoire();
- }
-
- affiche(7, 32, 11, pgrille);
- verif_vainqueur(2);
- if(v) {
- while(getchar() != '\n');
- score2++;
- clear();
- TEXTE(12, 25, 19, "L'ordinateur \x85 gagn\x82 !");
- gotoxy(75, 24);
- printf("%d", score2);
- TEXTE(7, 25, 20, "Une autre partie ? (o/n) :");
- if((selection = getch()) == 'o') {
- while(getchar() != 'o');
- rejouer = 1;
- }
- else
- exit(0);
- }
-
- return rejouer;
- }
-
-
-
- //Jolie intro
- void intro(void)
- {
- int l, m, n, o;
-
- sleep(500); //Faut bien prendre le temps d'admirer mon intro ;-)
-
- for(l = n = 19, m = 1, o = 56; l >= 10 ; l--, m++, n--, o++)
- {
- clrscr();
- TEXTE(m, l, 11, "|\\ /| __ ___ ___ * ___ | |");
- TEXTE(m, m, 12, "| \\ / | | | |___| |___| | | | |\\ | | |");
- TEXTE(m, n, 13, "| | |__| | \\ | | |___| | \\| _|___|_");
- TEXTE(m, o, 10, "_______");
- sleep(100);
- }
-
- return;
- }
-
-
- //Fonction pratique (merci cmarsc)
- void TEXTE(int couleur, int col, int ligne, char* texte)
- {
- textcolor(couleur);
- gotoxy(col, ligne);
- printf("%s", texte);
-
- return;
- }
-
-
- //Efface une partie de l'écran où se trouvent les messages
- void clear(void)
- {
- int x, y;
-
- for(y = 19; y <=20; y++)
- {
- for(x = 25; x <= 70; x++)
- TEXTE(0, x, y, " ");
- }
-
- return ;
- }
//Morpion 2 permet de se mesurer contre l'ordinateur.
//Il est aussi plus joli que Morpion 1 (ya pas de mal...)
//A chaque nouvelle partie, celui qui à joué en premier joue en 2e.
//L'ordinateur deviens plus difficile à battre si le joueur atteint 3 points.
//A 5 points, bonne chance...
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define MESSAGE_ERREUR { TEXTE(7, 25, 19, "Tu t'es plant\x82 quelque part ! Recommence :"); sleep(1500); }
void jeux_morpion(void);
void TEXTE(int couleur, int col, int ligne, char* texte);
void affiche(int couleur, int col, int ligne, int *tableau);
void intro(void);
void clear(void);
int verif_case(int *pgrille);
int verif_vainqueur(int joueur);
int coup_aleatoire(void);
int coup_secondaire(int joueur, int mode_pas_juste);
int coup_angle(void);
int coup_central(void);
int joueur1(void);
int ordinateur(int prems);
int grille[3][3] = {0}; //Grille du morpion
int cases[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; //Pour faire son choix...
int *pgrille = &grille; //Pointeur pour selectionner la case choisie par le joueur
int *pcases = &cases; //Pointeur pour afficher le tableau "cases"
int rejouer; //Pour les nouvelles parties
int ok = 0; //Flag pour erreur
int v = 0; //Vainqueur
int x; //Selection du joueur
int c; //Compteur de coups
int score1 = 0;
int score2 = 0;
char selection;
int main()
{
jeux_morpion();
return 0;
}
void jeux_morpion(void)
{
int i, j;
int k = 0; //compteur de parties
//Ecran de presentation
intro();
TEXTE(7, 60, 19, "Par Cal");
TEXTE(8, 1, 24, "Entr\x82 \be pour jouer");
getch();
clrscr();
//Ecran de jeu
while(getchar() != '\n');
TEXTE(4, 32, 2, "MORPION II");
TEXTE(2, 4, 24, "Ton score : 0");
TEXTE(12, 51, 24, "Score de l'ordinateur : 0");
TEXTE(8, 4, 9, "Cases :");
affiche(8, 4, 11, pcases);
start :
rejouer = 0;
v = 0;
k++;
if(score1 >= 5)
TEXTE(4, 25, 5, "Mode \"c'est pas juste\" activ\x82...");
//Re-initialisation de la grille pour les nouvelles parties
for(i = 0; i < 3; i++)
{
for(j = 0; j <3; j++)
grille[i][j] = 0;
}
//Affichage de la grille
TEXTE(7, 32, 9, "Grille :");
affiche(7, 32, 11, pgrille);
//La partie peut commencer
//Si les 9 coups n'ont pas été joués (en fait ça s'arrete au 8e,
//mais si un joueur arrive au 9e coup, c'est un match nul)
for(c = 1; c < 9; c += 2)
{
if(!(k%2)) //Pour que l'ordinateur commence toutes les 2 parties
{
ordinateur(1);
if(rejouer)
goto start;
joueur1();
if(rejouer)
goto start;
}
else
{
joueur1();
if(rejouer)
goto start;
ordinateur(0);
if(rejouer)
goto start;
}
}
//Personne n'a gagné
while(getchar() != '\n');
clear();
TEXTE(7, 25, 19, "Match nul ! ");
TEXTE(7, 25, 20, "Une autre partie ? (o/n) :");
if((selection = getch()) == 'o')
{
while(getchar() != 'o');
goto start;
}
else
exit(0);
return;
} //Fin de jeu_morpion
//Affiche un tableau[3][3] (cases[3][3] ou grille[3][3] donc)
void affiche(int couleur, int col, int ligne, int *tableau)
{
int i, j;
int t = 0;
for(j = 0; j < 3; j++)
{
for(i = 0; i < 3; t++, i++)
{
tableau += t;
textcolor(couleur);
if((*tableau) && ((tableau) != (++pcases))) //Met de la couleur seulement sur grille[3][3]
(*tableau == 1) ? textcolor(2) : textcolor(12); //1 en vert, 2 en rouge et 0 en blanc
gotoxy(col + (i*5), ligne + (j*2)); //Place le curçeur au bon endroit
printf("%d", *tableau); //Affiche les chiffres
tableau -= t;
}
}
return;
}
//Pour vérifier si la case n'est pas déjà prise
int verif_case(int *pgrille)
{
if(*pgrille)
{
clear();
TEXTE(7, 25, 20, "Case d\x82j\x85 prise ! ");
sleep(1500);
ok = 0;
}
else
ok = 1;
return ok;
}
//Vérifie si chaque ligne ou chaque diagonale est égale à 3 ou 6 suivant le numero du joueur
//Mais il ne faut pas de 0 car 1 + 2 + 0 = 3
int verif_vainqueur(int joueur)
{
int s, t, u;
//Lignes
for(s = 0, t = 1, u = 2 ; u <= 8; s += 3, t += 3, u += 3) {
if((pgrille[s] && pgrille[t] && pgrille[u]) && (pgrille[s] + pgrille[t] + pgrille[u] == 3*joueur))
v = 1;
}
//Colones
for(s = 0, t = 3, u = 6; u <= 8; s++, t++, u++) {
if((pgrille[s] && pgrille[t] && pgrille[u]) && (pgrille[s] + pgrille[t] + pgrille[u] == 3*joueur))
v = 1;
}
//Diagonnales
for(s = 0, t = 4, u = 8; s <= 2; s += 2, u -=2) {
if((pgrille[s] && pgrille[t] && pgrille[u]) && (pgrille[s] + pgrille[t] + pgrille[u] == 3*joueur))
v = 1;
}
return v;
}
//L'ordinateur joue une case aléatoire (pour varier les parties)
int coup_aleatoire(void)
{
int r;
ok = 0;
do
{
srand((unsigned) time(NULL));
r = rand() % 8;
if(!pgrille[r])
{
pgrille[r] = 2;
ok = 1;
}
}
while(!ok);
sleep(500); //L'ordinateur réflechit...
return ok;
}
//L'ordinateur vérifie si le joueur ou lui peut gagner et agit en consequence
int coup_secondaire(int joueur, int mode_pas_juste)
{
int s, t, u;
ok = 0;
//La fonction vérifie si une ligne est égale à 2 ou 4 selon le joueur concerné
//et en faisant attention à ne pas confondre 1 + 1 + 0 et 2 + 0 + 0.
//Vérifie les lignes
for(s = 0, t = 1, u = 2; u <= 8; s += 3, t += 3, u += 3)
{
if(((pgrille[s] + pgrille[t] + pgrille[u]) == (2*joueur)) &&
(pgrille[s] != 2*joueur) &&
(pgrille[t] != 2*joueur) &&
(pgrille[u] != 2*joueur))
{
if(mode_pas_juste) { //Si le mode "c'est pas juste" est activé,
ok = 1; //Il n'y a pas de vérification, donc l'ordi joue 2 cases...
if(!pgrille[s])
pgrille[s] = 2;
else if(!pgrille[t])
pgrille[t] = 2;
else if(!pgrille[u])
pgrille[u] = 2;
else
ok = 0;
}
else if(!ok) {
ok = 1;
if(!pgrille[s])
pgrille[s] = 2;
else if(!pgrille[t])
pgrille[t] = 2;
else if(!pgrille[u])
pgrille[u] = 2;
else
ok = 0;
}
}
}
//Vérifie les colonnes
for(s = 0, t = 3, u = 6; u <= 8; s++, t++, u++)
{
if((pgrille[s] + pgrille[t] + pgrille[u] == 2*joueur) &&
(pgrille[s] != 2*joueur) &&
(pgrille[t] != 2*joueur) &&
(pgrille[u] != 2*joueur))
{
if(mode_pas_juste) {
ok = 1;
if(!pgrille[s])
pgrille[s] = 2;
else if(!pgrille[t])
pgrille[t] = 2;
else if(!pgrille[u])
pgrille[u] = 2;
else
ok = 0;
}
else if(!ok) {
ok = 1;
if(!pgrille[s])
pgrille[s] = 2;
else if(!pgrille[t])
pgrille[t] = 2;
else if(!pgrille[u])
pgrille[u] = 2;
else
ok = 0;
}
}
}
//Vérifie les diagonnales
for(s = 0, t = 4, u = 8; s <= 2; s += 2, u -=2)
{
if((pgrille[s] + pgrille[t] + pgrille[u] == 2*joueur) &&
(pgrille[s] != 2*joueur) &&
(pgrille[t] != 2*joueur) &&
(pgrille[u] != 2*joueur))
{
if(mode_pas_juste) {
ok = 1;
if(!pgrille[s])
pgrille[s] = 2;
else if(!pgrille[t])
pgrille[t] = 2;
else if(!pgrille[u])
pgrille[u] = 2;
else
ok = 0;
}
else if(!ok) {
ok = 1;
if(!pgrille[s])
pgrille[s] = 2;
else if(!pgrille[t])
pgrille[t] = 2;
else if(!pgrille[u])
pgrille[u] = 2;
else
ok = 0;
}
}
}
sleep(1000);
return ok;
}
//L'ordinateur joue l'un des 4 coins au hasard
int coup_angle(void)
{
int r;
ok = 0;
do
{
do
{
srand((unsigned) time (NULL));
r = rand() % 9;
}
while(!(r == 0 || r == 2 || r == 6 || r == 8));
if(!pgrille[r])
{
pgrille[r] = 2;
ok = 1;
}
}
while(!ok);
sleep(500);
return ok;
}
//L'ordinateur joue la case du milleu
int coup_central(void)
{
ok = 0;
pgrille += 4;
if(!*pgrille)
{
*pgrille = 2;
ok = 1;
}
pgrille -= 4;
sleep(400);
return ok;
}
//Les coups du joueur hummain
int joueur1(void)
{
int col, ligne;
do
{
clear();
TEXTE(7, 25, 19, "Tape ta case : ");
scanf("%d",&x);
if ((x >= 0) && (x <= 8)) //Si le joueur n'a pas fait d'erreur
{
pgrille += x; //Positionnement dans la case du tableau choisie
verif_case(pgrille);
if(ok) //Assigne la valeur 1 si la case n'est pas déjà prise
*pgrille = 1;
pgrille -= x; //Reviens au debut du tableau
}
else
{
MESSAGE_ERREUR
ok = 0;
}
}
while (!ok);
affiche(7, 32, 11, pgrille);
verif_vainqueur(1);
if(v) //Si le joueur a gagné
{
while(getchar() != '\n');
score1++;
clear();
TEXTE(2, 25, 19, "Bravo, tu as gagn\x82 !");
gotoxy(16, 24);
printf("%d", score1);
TEXTE(7, 25, 20, "Une autre partie ? (o/n) :");
if((selection = getch()) == 'o')
{
while(getchar() != 'o');
rejouer = 1;
}
else
exit(0);
}
return rejouer;
}
//Les coups de l'ordinateur
int ordinateur(int prems) //prems = l'ordinateur joue le premier
{
int m = 0; //Mode "c'est pas juste"
ok = 0;
if(score1 >= 5)
m = 1;
if(prems) {
if(c == 1 || c == 3)
coup_angle();
if(!ok)
coup_secondaire(2, m);
if(!ok)
coup_secondaire(1, m);
if(!ok)
coup_angle();
if(!ok)
coup_aleatoire();
}
else {
if(!ok && score1 >= 3 && c == 1) //ça deviens plus dur si le score1 est superieur à 3
coup_central();
if(!ok && c == 1)
coup_aleatoire();
if(!ok)
coup_secondaire(2, m);
if(!ok)
coup_secondaire(1, m);
if(!ok)
coup_aleatoire();
}
affiche(7, 32, 11, pgrille);
verif_vainqueur(2);
if(v) {
while(getchar() != '\n');
score2++;
clear();
TEXTE(12, 25, 19, "L'ordinateur \x85 gagn\x82 !");
gotoxy(75, 24);
printf("%d", score2);
TEXTE(7, 25, 20, "Une autre partie ? (o/n) :");
if((selection = getch()) == 'o') {
while(getchar() != 'o');
rejouer = 1;
}
else
exit(0);
}
return rejouer;
}
//Jolie intro
void intro(void)
{
int l, m, n, o;
sleep(500); //Faut bien prendre le temps d'admirer mon intro ;-)
for(l = n = 19, m = 1, o = 56; l >= 10 ; l--, m++, n--, o++)
{
clrscr();
TEXTE(m, l, 11, "|\\ /| __ ___ ___ * ___ | |");
TEXTE(m, m, 12, "| \\ / | | | |___| |___| | | | |\\ | | |");
TEXTE(m, n, 13, "| | |__| | \\ | | |___| | \\| _|___|_");
TEXTE(m, o, 10, "_______");
sleep(100);
}
return;
}
//Fonction pratique (merci cmarsc)
void TEXTE(int couleur, int col, int ligne, char* texte)
{
textcolor(couleur);
gotoxy(col, ligne);
printf("%s", texte);
return;
}
//Efface une partie de l'écran où se trouvent les messages
void clear(void)
{
int x, y;
for(y = 19; y <=20; y++)
{
for(x = 25; x <= 70; x++)
TEXTE(0, x, y, " ");
}
return ;
}
Conclusion
La mise en forme est pas térible ici, téléchargez le zip pour voir la source plus clairement
J'ai développé ce programme avec LCC Win32.
Si vous avez des remmarques, des conseils ou des idées pour améliorer ce programme, n'ésitez pas.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|