zulfine | Bonjour, j'ai un projet a réaliser en C.
C'est un puissance 4, 7 colonnes, 6 lignes.
La première partie a été faite, c'est a dire en joueur contre joueur.
La deuxième partie doit utiliser des arbres pour calculer toutes les possibilités.
Le premier fichier correspond au jeu en JvsJ, le deuxième fichier va contenir toute les procédures et fonction pour calculer l'arbre, évaluer les possibilités, parcourir l'arbre, et devra retourner juste le numéro de la colonne a jouer pour l'ordi.
J'aimerais avoir de l'aide sur toute la deuxième partie, je bloque depuis 2 jours sur ces points la.
Voici le code de la première partie :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- //#include "p4IA.c"
- //constante
- #define N 50
- //variable
- /*ce tableau à deux dimensions représente la structure du support de jeu*/
- char tab_p4[6][7];
- /*ce tableau représente la capacité en pion d'une colonne*/
- int remplircol[7];
- /*Cette variable représente un booléen 0=perdu, 1=gagné*/
- int win;
- /******************************************************************************************************/
- //prototype
- int jouable(int colonnes);
- int saisie();
- void afficher_tab_p4();
- int tab_p4_rempli();
- int pion_cote(int col, int lign,int dirVer, int dirHor);
- void gagner(int c,int l);
- void jouer(int *cpt,char c,char nom[N]);
- void jeu1j();
- void jeu2j();
- int choix();
- void jouer_ordi(int *cpt,char c,char nom[N]);
- /******************************************************************************************************/
- //corps
- void main (){
- choix();
- }
- /******************************************************************************************************/
- int choix(){
- int reponse=0;
- printf("Choisissez un mode de jeux\n\n" );
- printf("1-Mode joueur contre joueur\n" );
- printf("2-Mode joueur contre ordinateur\n" );
- scanf("%d",&reponse);
- do{
- switch (reponse) {
- case 1:
- jeu2j();
- break;
- case 2:
- jeu1j();
- break;
- }
- }while(reponse!=1||reponse!=2);
- }
- /******************************************************************************************************/
- void jeu1j(){
- int i,j,joueur=0,compt1=0;
- char nom1[N],nom2[N]="Ordinateur",recom;
- win=0;// 1 gagné // 0 perdu
- printf("\t\t\t\t\t\t **********Puissance4********** \n\n" );
- printf("\n\n\t\t\t\t\t\t *****Partie contre l'ordinateur***** \n\n\n\n\n\n" );
- printf("Nom du joueur!!\n" );
- scanf("%s",&nom1[N]);
- afficher_tab_p4();
- do{
- for (i=0;i<6;i++)
- {
- for (j=0;j<7;j++)
- {
- tab_p4[i][j]=' '; //Déclare le caractère de la fonction afficher_tab_p4 pour organiser le tableau
- }
- }
- for(j=0;j<7;j++){
- /* Iniatilisation de la fonction remplircol à zéro*/
- remplircol[j]=0;
- }
- do{
- //Gestion des pions du joueur 1
- if (joueur%2==0){
- jouer(&compt1,'O',nom1);
- }
- //Gestion des pions de l'ordinateur
- if(joueur%2!=0){
- jouer_ordi(&compt1,'X',nom2);
- }
- // joueur incrémenté
- joueur=joueur+1;
- // répéter tant que la grille n’est pas remplie ou que la partie n’est pas gagnée
- } while(( !tab_p4_rempli() && win==0 ) );
- do{
- fflush(stdin);//vide le tampon des scanf effectuer
- printf("\t\tSouhaitez-vous recommencer la partie ? (o/n) : " );
- scanf("%c",&recom);
- }while(recom!='o' && recom!='n');
- printf("\n" );
- }while (recom=='o');
- }
- /******************************************************************************************************/
- void jeu2j(){
- int i,j,joueur=0,compt1=0;
- char nom1[N],nom2[N],recom;
- win=0;// 1 gagné // 0 perdu
- printf("\t\t\t\t\t\t **********Puissance4********** \n\n" );
- printf("\n\n\t\t\t\t\t\t *****Partie à deux joueurs***** \n\n\n\n\n\n" );
- printf("Nom du premier joueur!!\n" );
- scanf("%s",&nom1[N]);
- printf("Nom du deuxième joueur\n" );
- scanf("%s",&nom2[N]);
- afficher_tab_p4();
- do{
- for (i=0;i<6;i++)
- {
- for (j=0;j<7;j++)
- {
- tab_p4[i][j]=' '; //Déclare le caractère de la fonction afficher_tab_p4 pour organiser le tableau
- }
- }
- for(j=0;j<7;j++){
- /* Iniatilisation de la fonction remplircol à zéro*/
- remplircol[j]=0;
- }
- do{
- //Gestion des pions du joueur 1
- if (joueur%2==0){
- jouer(&compt1,'O',nom1);
- }
- //Gestion des pions du joueur 2
- if(joueur%2!=0){
- jouer(&compt1,'X',nom2);
- }
- // joueur incrémenté
- joueur=joueur+1;
- // répéter tant que la grille n’est pas remplie ou que la partie n’est pas gagnée
- } while(( !tab_p4_rempli() && win==0 ) );
- do{
- fflush(stdin);//vide le tampon des scanf effectuer
- printf("\t\tSouhaitez-vous recommencer la partie ? (o/n) : " );
- scanf("%c",&recom);
- }while(recom!='o' && recom!='n');
- printf("\n" );
- }while (recom=='o');
- }
- /**********************************************************************************************************/
- /* fonction qui renvoie vrai s'il est possible de poser un pion dans la colonne colonnes*/
- int jouable(int colonnes){
- if ((colonnes>=0) && (colonnes<7) && (remplircol[colonnes]>=0) && (remplircol[colonnes]<6)) return 1;
- else return 0;
- }
- /**********************************************************************************************************/
- /*fonction de saisie d'un coup fait par le joueur*/
- int saisie(){
- int x; /* x est la colonne */
- do{
- printf("\t Veuillez entrer un chiffre entre 0 et 6:\n\t Attention aux colonnes déjà remplies!\n" );
- scanf("%d",&x);
- if (jouable(x)==1) return x;
- }while(jouable(x)!=1);
- return 0;
- }
- /**********************************************************************************************************/
- void afficher_tab_p4() //Procédure qui permet d'afficher une grille de jeu Puissance4
- {
- int i,j;
- printf("\t\t\t\t\t\t **********Puissance4********** \n\n" );
- for (i=0;i<6;i++)
- {
- printf("\t\t\t\t\t\t ø-ø-ø-ø-ø-ø-ø-ø \n" );
- printf("\t\t\t\t\t\t" );
- for (j=0;j<7;j++)
- {
- printf("|%c",tab_p4[5-i][j]); //Le %c permet de declarer un espace vide pour un caractère non déclaré pour le moment
- }
- printf("| %d\n",i); //Indice de la grille afficher horizontalement
- }
- printf("\t\t\t\t\t\t ø-ø-ø-ø-ø-ø-ø-ø \n" );
- printf("\t\t\t\t\t\t" );
-
- for(j=0;j<=6;j++)
- {
- printf(" %d",j); //Indice de la grille afficher verticalement
- }
- printf("\n\n\t\t" );
- }
- /******************************************************************************************************/
- int tab_p4_rempli(){
- int colon,complet=0;
- /* la fonction cherche quel sont les cases de la grille qui sont remplies */
- for(colon=0;colon<=6;colon++){
- if(jouable(colon)){
- complet=complet+1;
- }
- }
- //Après avoir incrémenté chaque colonne, la fonction renvoie si la grille est complete (return 1) ou non (return 0) */
- if (complet==0) return 1;
- else return 0;
- }
- /******************************************************************************************************/
- /*La fonction pion_cote permet de verifier pour chaque direction, par rapport a un pion donné, si le pion mitoyen est de meme symbole.
- Cela permet, grâce à un compteur, de compter le nombre de pions cote à cote*/
- int pion_cote(int col, int lign,int dirVer, int dirHor)
- {
- int n=0;
- if(dirVer==-1){
- if(dirHor==0){
- while((tab_p4[lign][col])==(tab_p4[lign-1][col])&&(tab_p4[lign][col]!=' ')){
- n++;
- lign--;
- }
- }
- else if(dirHor==-1){
- while((tab_p4[lign][col])==(tab_p4[lign-1][col-1])&&(tab_p4[lign][col]!=' ')){
- n++;
- col--;
- lign--;
- }
- }
- else if(dirHor==1){
- while((tab_p4[lign][col])==(tab_p4[lign-1][col+1])&&(tab_p4[lign][col]!=' ')){
- n++;
- col++;
- lign--;
- }
- }
- }
- if(dirVer==0){
- if(dirHor==1){
- while((tab_p4[lign][col])==(tab_p4[lign][col+1])&&(tab_p4[lign][col]!=' ')){
- n++;
- col++;
- }
- }
- else if(dirHor==-1){
- while((tab_p4[lign][col])==(tab_p4[lign][col-1])&&(tab_p4[lign][col]!=' ')){
- n++;
- col--;
- }
- }
- }
- return(n);
- }
- /******************************************************************************************************/
- void gagner(int c,int l){
- /*Appele la fonction pion_cote, et teste dans tout les sens par rapport au pion donné*/
- if ((pion_cote(c,l,0,1) +pion_cote(c,l,0,-1)) >=3 ||
- ( pion_cote(c,l,1,0) +pion_cote(c,l,-1,0)) >=3 ||
- ( pion_cote(c,l,1,1) +pion_cote(c,l,-1,-1))>=3 ||
- ( pion_cote(c,l,1,-1)+pion_cote(c,l,-1,1) >=3))
- win=1;
- else win=0;
- }
- /*******************************************************************************************************/
- //procedure permettant au joueur de jouer // // problème lors de l'execution //
- void jouer(int *cpt,char c,char nom[N]){
- int l,col;
- // on rentre son nommax
- printf("%s, posez votre pion\n",&nom[N]);
- col=saisie();
- //la fonction remplircol définit les lignes de la colonne
- l=remplircol[col];
- tab_p4[l][col]=c;
- remplircol[col]=remplircol[col]+1;
- (*cpt)++;
- afficher_tab_p4();
- gagner(col,l);
- // si la partie est gagnée
- if( win==1){
- printf("%s gagne au %deme coup\n",&nom[N],(*cpt)/2+1);
- }
- }
- /*******************************************************************************************************/
- void jouer_ordi(int *cpt,char c,char nom[N]){
- int l,col;
- int profondeur;
- col=getCol();
- //la fonction remplircol définit les lignes de la colonne
- l=remplircol[col];
- tab_p4[l][col]=c;
- remplircol[col]=remplircol[col]+1;
- (*cpt)++;
- afficher_tab_p4();
- gagner(col,l);
- // si la partie est gagnée
- if( win==1){
- printf("%s gagne au %deme coup\n",&nom[N],(*cpt)/2+1);
- }
- }
|
Merci Message édité par zulfine le 10-11-2011 à 16:23:00
|