Morpion console

Description

voici l'un de mes premier jeu mode console morpion avec couleurs mode 1joueur vs ordi/2joueurs code source un peu long et complexe mais il y a pas malle de chose a apprendre a travers comme par exemple comment coller une chaine 2d sur une autre et comment utiliser cette technique pour faire des animations mode console et aussi comment coder un pc qui joue automatiquement et qui peu calculé probabilité de gain ou de perte etc... je vous laisse admiré cette œuvre (le fichier exe est avec les autre dans la zip il faut seulement lui changer l'extension de ex_ a exe )

Source / Exemple :


/****************main.c**********************/
#include "cte.h"

/*****************************************************************

                • terminer le 23/1/2009 19:30 par khalid majdoub *********
                                                                                                                                  • /
int main() {/*menu principale*/ int w=0,t[3]={7,7,3},done=1,i=2,m=0; char choix=0; while(1){ while(done){//tan que done est vari (tant que lutilisateur n'a pas cliqué sur entreé DEBUT/*on affiche le msg de l'aceuille*/ /*puis le menu*/ color(t[2],0);printf("\t\t\t1-Partie un joueur\n"); color(t[1],0);printf("\t\t\t2-Partie deux jour\n"); color(t[0],0);printf("\t\t\t3-Quiter le jeu \n"); choix=getch();//on stock la touche pressé par l'utilisateur dans choix if(choix==BAS && i!=0) {t[i]=7; i--;_beep(165,25);} /*si l'utilisateur a clicker sur bas et que le curseur n'egale pas zéro on descend le curseur dans le menu*/ if(choix==HAUT && i!=2) {t[i]=7; i++;_beep(247,25);} /*la méme chose avec haut*/ t[i]=3; system("cls");//on bouge le curseur dans le menu if(choix==OK)//si l'utilisateur a cliqué sur entreé { switch(i) { case 2://si i=2 (le curseur etait sur le choix partie un joueur done=0; while(!done) { system("cls"); printf("\n\n\n\n\n\n\n\t\tqui commance??\n\t\t\t1->toi\n\t\t\t2->pc\n"); choix=getch()-48; if(choix==1||choix==2){ m=2-choix; done=1;} } w=1;//on renvoi w & m break; case 1: w=0; break; //si il a choisi partie 2joueurs case 0: return 0; break;//si il a choisi de quité on ferme le prog } done=0;//pour finir la boucle } } while(done!=2) { Jeu(w,m); done=0; system("cls");//on apelle la fonction jeu ol lui envoiant les 2 parametre que le joueur //a donné while(done==0) { printf("\n\n\n\n\n\n\t\t\tveux-tu recommancer??(o/n):"); choix=getch(); if(choix=='o') done=1;//on continuer le programe if(choix=='n'){ done=2; color(7,0);}//retoure au menu P system("cls"); } } }} /********************************morpion.c**************/ #include "cte.h" int Jeu(int w,int m) { /************les VARIABLESSSSSSSSSSSSS*********/ /*les deux image croix et rond*/ Objet tabl[2]; /* les deux map mode graph/nn graph*/ char map[LM][LaM]={NULL}; int jeu[3][3]={NULL}; /* autres */ int t[10][3]={NULL}; char ltr=0,pc=0; /* les conteurs */ int L=0,l=0,i=0,n=1; /*les cordonnes du curseur*/ int x=LaR+2,y=LR+2; /*les boolens*/ long donne=1, gag=0,perd=0; FILE *file=fopen("data.dll","r");/*on ouvre le fichier data.dll ou la croix et le cercle sont stocker*/ color(0,15);system("cls"); while(i!=2) { while(L!=LR) { while(l!=LaR) {tabl[i].t[L][l]=fgetc(file)-48;l++;}l=0;L++;//crois->tabl[0].t & rond->tabl[1].t }L=0;l=0; i++; }l=1;L=1; i=0; while(L!=LM)/* puis il faut dessiner la map*/ { while(l!=LaM) { t[n][1]=l; t[n][2]=L; n++; Init(map,l,L,1); if(l==x && L==y)Init(map,l,L,2); l+=(LaR+1); }L+=(LR+1);l=1; } /********************DEBUT DE LA BOUCLE PRINCIPALE************/ while(donne) { l=0;L=0; color(7,1); printf("*JOUEUR %ld*\n",(i%2)+1); while(L!=LM) {/*affichage*/ color(0,15); printf("\t\t "); while(l!=LaM) { switch(map[L][l]){ case 0: color(3,3); break; case 1: color(7,7); break; case 3: color(8,8); break; case 4: color(2,2); break; case 2: color(2,2); break; default: color(4,4); break;} printf(" ");l++; } printf("\n");l=0; L++; } color(0,15); /**************1 : TOUR DU PC*******************/ //si w est vrai(si lutilisateur a choisi mode 1joueur) if(w) { //on entre dans le mode joeurvsordi if(i%2==m)//si c'est le tour du pc(i est un conteur de tours ->i%2=(1 ou 0) //bon on gros si i%2==m(1ou0 c'est le joueur qui a chosis o debut) { Init(map,x,y,-2); pc=genercoups(map,jeu,t,i,0); if(gagner(jeu)!=1){CASE=0; pc=genercoups(map,jeu,t,i,3);} CHANGE; Init(map,x,y,2); coler(map,x,y,tabl[i%2].t); i++; } else Utilisateur(map,jeu,&x,&y,&i,tabl);//else c'est le tour du joueur } else Utilisateur(map,jeu,&x,&y,&i,tabl);//si w est fausse c a dire si lutilisateur a demandé //partie 2joueurs*/ system("cls"); /*bon on regarde si quelqu'un a gag*/ if(gagner(jeu)==1){GAGNE _sleep(1000);} else if(gagner(jeu)==2){EGALIT _sleep(1000);} } } /**********************gestion.c************************/ #include "cte.h" void deplaser(char map[LM][LaM],int *x,int *y,int X,int Y) { Init(map,*x,*y,-2);
  • y+=Y;
  • x+=X;
Init(map,*x,*y,2); } void Init(char map[][LaM],int x,int y,int ini) { int L=0,l=0; while(L!=LR) {while(l!=LaR){map[y+L][x+l]+=ini;l++;}L++;l=0;} } void color(int T,int F) { HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(H,F*16+T); } void coler(char map[][LaM],int x,int y,char ini[][LaR]) { int L=0,l=0; while(L!=LR) {while(l!=LaR){map[y+L][x+l]+=ini[L][l];l++;}L++;l=0;} } int gagner(int t[][3]) { int E=0,l=0,L=0,somt=0; while(L!=3){ if((som3==12||som3==15)||(som4==12||som4==15)||(som1==12||som1==15)||(som2==12||som2==15))E=1; somt+=som3; L++;l++; } if(somt==40 && !E)E=2; return E; } long genCor(long MIN , long MAX ) { long nM=0; srand(time(NULL)); nM = (rand() % (MAX - MIN + 1)) + MIN; return nM ; } int genercoups(char map[][LaM],int jeu[][3],int t[10][3],int i,int s) { int pc=0,d=1,q=0,gag; while(d) { do{pc++;}while(CASE!=0); q++; CASE=OBJ; if(gagner(jeu)!=0 || q==9-i){ d=0; gag=gagner(jeu);} CASE=0; } if(!gag) do{ pc=genCor(1,9); }while(CASE!=0); CASE=CROIX; return pc; } void Utilisateur(char map[][LaM],int jeu[][3],int *x,int *y,int *i,Objet *tabl) { /*tour du joueur*/ char ltr=getch();//on stock la touche pressé pas ce dernier if( ltr==BAS && *y!=(LR*2)+3 ) BOUGE_CURSEUR DOWN ; if( ltr==HAUT && *y!=1 ) BOUGE_CURSEUR UP ; if( ltr==DROIT && *x!=(LaR*2)+3) BOUGE_CURSEUR RIGHT ; if( ltr==GAUCHE && *x!=1 ) BOUGE_CURSEUR LEFT ; if( ltr==13 && map[*y+1][*x+1]==3 ){ jeu[*y/7][*x/10]=(*i%2) + 4; coler(map,*x,*y,tabl[*i%2].t);
  • i+=1; }
} /**********************************CTE.h*/ #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> #define CHANGE x=t[pc][1];y=t[pc][2] #define ERASE jeu[y/7][x/10]=0; #define BOUGE_CURSEUR deplaser(map,&(*x),&(*y), #define DOWN 0,LR+1) #define UP 0,-LR-1) #define LEFT -LaR-1,0) #define RIGHT LaR+1,0) #define som1 t[0][0]+t[1][1]+t[2][2] #define som2 t[2][0]+t[1][1]+t[0][2] #define som3 t[L][0]+t[L][1]+t[L][2] #define som4 t[0][l]+t[1][l]+t[2][l] #define LR 7 #define LaR 10 #define LM (LR*3)+4 #define LaM (LaR*3)+4 #define GAGNE printf("\n\n\n\n\n\n\n\n\n***********LE JOEUR %ld GAGNE************\n\n\n\n\n\n\n\n\n",((i%2)+1)*-1 + 3);donne=0; #define EGALIT printf("\n\n\n\n\n\n\n\n\n************EGALITE!!!*************\n\n\n\n\n\n\n\n\n");donne=0; #define DEBUT color(7,0);printf("*********BIENVENU DANS MORPION REALISER PAR KHALID MAJDOUB LE 23/1/2009********\n\n\n\n\n\n\n\n\n\n\n"); #define HAUT 72 #define BAS 80 #define GAUCHE 75 #define DROIT 77 #define OK 13 #define CASE jeu[t[pc][2]/7][t[pc][1]/10] #define CROIX (i%2) + 4 #define ROND ((i+1)%2) + 4 #define OBJ ((i+s)%2) + 4 typedef struct Objet Objet ; struct Objet{char t[LR][LaR];}; int genercoups(char map[][LaM],int jeu[][3],int t[10][3],int i,int s); long genCor(long MIN , long MAX ); void Utilisateur(char map[][LaM],int jeu[][3],int *x,int *y,int *i,Objet* tabl); int Jeu(); void coler(char map[][LaM],int x,int y,char ini[][LaR]); void Init(char map[][LaM],int x,int y,int ini); void color(int couleurDuTexte,int couleurDeFond); void deplaser(char map[LM][LaM],int *x,int *y,int X,int Y);

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.