Puissance 4, help me !!

  • Auteur de la discussion marinefdt
  • Date de début

marinefdt

Nouveau membre
#1
Bonjour,

Etant en école d'ingénieur, je dois réalisé un Puissance 4 pour lundi.
Le programme est bien avancé et il fonctionne normalement mais je ne parviens pas à écrire les vérifications pour l'alignement :
-alignement verticale de 4 pions
-alignement horizontal de 4 pions
-alignement dans la diagonale haut/droite bas/gauche
-alignement dans la diagonale haut/gauche bas/droite

#include <stdio.h>
#include <stdlib.h>
#include <time.h>




char menu()
{
/*Les joueurs choisissent leurs noms*/
printf("Entrer le nom du joueur 1 :\n");
scanf("%c",1);
printf("Entrer le nom du joueur : \n");
scanf("%c",2);
}


// déclaration du tableau
void affiche(int grille[6][7])

{
int c,l,ll;
printf(" \n");
printf(" PUISSANCE 4 \n");
printf(" \n");
printf(" 0 1 2 3 4 5 6\n");

for (l=0; l<6; l++)
{
for (c=0; c<7; c++)
{
printf ("| ");
if (grille[l][c]==0)
{
printf (" ");
}
if (grille[l][c]==1)
{
system("color E");
printf ("X");
system("color 0");
}
if (grille[l][c]==2)
{
system("color C");
printf ("O");
system("color 0");
}
}
printf("|\n");


}
}


int main()
{

void menu()
{
/*Les joueurs choisissent leurs noms*/
printf("Nom du Joueur1 ? \n");
scanf("%s",1);
printf("Nom du Joueur2 ?\n");
scanf("%s",2);
}


// déclaration des variables du programme
int grille[6][7]={0},c,l,X,O;


affiche (grille);
// Choix de la colonne alternativement pour chaque joueur


int jouer=1;
while(jouer==1)

// Joueur 1
{
int ncl;


printf ("Joueur 1, veuillez choisir une colonne :\n",ncl);
scanf("%d",&ncl);
while(ncl<-1 || ncl>7)
{
printf ("Joueur 1, veuillez choisir une autre colonne :\n",ncl);
scanf ("%d",&ncl);
}



// Tant que la colonne est pleine, le joueur 1 doit choisir une autre colonne

if((grille[0][ncl]==1) || (grille[0][ncl]==2)) {
printf("La colonne est pleine!\n\n");
printf("Choisissez une colonne! => ");
scanf("%d", &l);
}



int compteur=0 ;
// Placer le pion dans la premiere case libre en partant du bas de la colonne choisie
for (l=0; l<7; l++)
{
if (grille[l][ncl]==0)
{

compteur ++ ;
}
}
printf("*Compteur: %d\n",compteur);

grille[compteur-1][ncl]=1;



affiche (grille);


//Joueur 2

int ncll;

printf ("Joueur 2, veuillez choisir une colonne :\n",ncll);
scanf("%d",&ncll);
while(ncll<-1 || ncll>7)
{
printf ("Joueur 2, veuillez choisir une autre colonne :\n",ncll);
scanf ("%d",&ncll);
}

// Tant que la colonne est pleine, le joueur 2 doit choisir une autre colonne


if((grille[0][ncll]==1) || (grille[0][ncll]==2)) {
printf("La colonne est pleine!\n\n");
printf("Choisissez une colonne! => ");
scanf("%d", &l);
}




int compteurr=0;
// Placer le pion dans la premiere case libre en partant du bas de la colonne choisie
for (l=0; l<7; l++)
{
if (grille[l][ncll]==0)
{

compteurr ++ ;
}
}
printf("*Compteur: %d\n",compteurr);

grille[compteurr-1][ncll]=2;




affiche (grille);
}



Si quelqu'un peut m''aider ou me donner des pistes, je vous en serez reconnaissante :)

 

mdjdenormandie

Habitué
#2
Bonjour,
juste avant de commencer sache qu'il y a un outils "code" dans le l’éditeur de texte du forum afin de nous montrer ton code tout en gardant l’indentation

je n'ai pas touché au C depuis longtemps donc ma solution devras certainement être adapté :

C++:
bool check_win(int grille[6][7], int joueur) { //joueur = 1 ou 2
  for (l = 0; l < 6; l++) {
      for (c = 0; c < 7; c++) {
          if (
              //horizontale
              (grille[l][c]==joueur && grille[l+1][c]==joueur && grille[l+2][c]==joueur && grille[l+3][c]==joueur) 
              // verticale
              || (grille[l][c]==joueur && grille[l][c-1]==joueur && grille[l][c-2]==joueur && grille[l][c-3]==joueur) 
              // diagonale vers le bas droite
              || (grille[l][c]==joueur && grille[l+1][c-1]==joueur && grille[l+2][c-2]==joueur && grille[l+3][c-3]==joueur) 
              // diagonale vers le bas gauche
              || (grille[l][c]==joueur && grille[l-1][c-1]==joueur && grille[l-2][c-2]==joueur && grille[l-3][c-3]==joueur) 
          ) {
              return true;
          }
      }
  }
  return false;
}
 

123489

Nouveau membre
#3
Bonjour,
je doit réaliser un puissance 4 en c, mai avec Intelligence artificiel ,j'arrive toujours pas a comprendre les algorithmes MIN_MAX sur net ,le programme simple je l'est terminer et il marche normalement mai comment implémenter cette IA dans mon code je me perd TOUJOURS...
MERCI pour vos repenses,
cordialement.
voici mon code;
VIDE,
JAUNE,
ROUGE,
};
void initialisegrille(int grille [L][C])
{int i,j;
for (i=0;i<L;i++)
for (j=0;j<C;j++)
grille [j]=VIDE;
}
int coupvalide (int grille[L][C],int colonne,int couleur)
{
int ligne=L-1;
if (colonne >=C || colonne<0) return 0;
if (grille [0][colonne]!=VIDE) return 0;
while (ligne>=0 && grille[ligne][colonne]!=VIDE ) ligne--;
if ( ligne>=0)
{
grille[ligne][colonne]=couleur;
return 1;
}
return 0;
}

int compte (int grille[L][C],int ligneD,int colonneD,int DirLigne,int DirColonne){
int compteur=0;
int ligne=ligneD;
int colonne=colonneD;
while (ligne>=0 && ligne<L && colonne>=0 && colonne<C && grille[ligne][colonne]==grille[ligneD][colonneD])
{ printf("ligne=%d colonne=%d couleur=%d\n",ligne,colonne,grille[ligne][colonne]);
compteur ++;
ligne=ligne+DirLigne;
colonne=colonne+DirColonne;
}
return compteur;
}
int gagne(int grille[L][C],int couleur){
printf("gagne(couleur=%d)\n",couleur);
int i,j;
for (i=0;i<L;i++)
for (j=0;j<C;j++)
if (grille [j]==couleur )
if(
((compte(grille,i,j,-1,+1)>=4))||
((compte(grille,i,j,0,+1)>=4)) ||
((compte(grille,i,j,+1,0)>=4))||
((compte(grille,i,j,+1,+1)>=4))
)

{
return 1;
}
return 0;
}
void affiche(int grille[L][C])
{int i,j;
for (i=0;i<L;i++)
{
for (j=0;j<C;j++)
printf ("%c",".XO"[grille[j]]);//converstion auto en eniter
printf("\n");
}
}

int main()
{ srand(time(0));
int grille[L][C];
int valide= 0;
int colonne,gain=0;
initialisegrille(grille);
affiche(grille);
enum couleur couleur = JAUNE;
int joueur, joueur1, joueur2;
printf("Le joueur 1 est il un humain ou un ordinateur ? Entrer 0 ou 1\n");
scanf("%d", &joueur1);
printf("Le joueur 1 est il un humain ou un ordinateur ? Entrer 0 ou 1\n");
scanf("%d", &joueur2);
joueur=joueur1;

do
{
do{
printf("joueur ");
if(couleur==JAUNE) printf("X");
if(couleur==ROUGE) printf("O");
if(joueur==0)
{ printf(" entrez un numero de colonne:");
scanf("%d",&colonne);
}
if(joueur==1) colonne=rand()%8;
printf("La colonne choisie est :%d\n", colonne);
colonne--;
valide=coupvalide(grille,colonne,couleur);
if (!valide) printf("Le coup n'est pas valide\n");
}
while(!valide);
printf("OK3\n");
affiche(grille);
printf("OK1\n");
gain=gagne(grille,couleur);
if(couleur==JAUNE)
{
couleur=ROUGE;
joueur=joueur2;
}
else
{
couleur=JAUNE;
joueur=joueur1;
}
}while (!gain) ;
if (gain ==1)
{
if (couleur==JAUNE) printf ("le joueur gagnant est X,BRAVO!");
if (couleur==ROUGE) printf ("le joueur gagnant est O,BRAVO!");
}
else printf("match null;");
return 0;
}
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Staff en ligne
  • job31
    Admin tout frippé
  • Storos
    Modérateur cochon
  • vince1053
    Modérateur
  • AccroPC2
    Fou du PC
Membres en ligne
  • job31
  • Storos
  • SergioVE
  • vince1053
  • BorisAlpha
  • Lau0417
  • ImTim
  • dartyduck
  • longaripa
  • AccroPC2
Derniers messages publiés
Statistiques globales
Discussions
871 066
Messages
8 131 223
Membres
1 581 593
Dernier membre
Noemie1104
Partager cette page
Haut