Fonction gagnant
Skyyaeee
Messages postés
9
Statut
Membre
-
paly2 Messages postés 261 Statut Membre -
paly2 Messages postés 261 Statut Membre -
Bonjour,
J'ai besoin d'une fonction avec des if pour, dans mon puissance 4 qu'il détecte si il y a un gagnant, voila mon code -->
J'ai besoin d'une fonction avec des if pour, dans mon puissance 4 qu'il détecte si il y a un gagnant, voila mon code -->
#include <stdio.h>
#include <stdlib.h>
int main()
{
char j1[10], j2[10];
int choix, quitter=0;
printf("Nom du premier joueur ?\n");
scanf("%s",&j1);
printf("Nom du deuxieme joueur ?\n");
scanf("%s",&j2);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
char Tableau[43];
int i=0;
while(quitter==0)
{
while(i<42)
{
Tableau[i]=' ';
i++;
}
printf("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n");
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[0],Tableau[1],Tableau[2],Tableau[3],Tableau[4],Tableau[5],Tableau[6]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[7],Tableau[8],Tableau[9],Tableau[10],Tableau[11],Tableau[12],Tableau[13]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[14],Tableau[15],Tableau[16],Tableau[17],Tableau[18],Tableau[19],Tableau[20]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[21],Tableau[22],Tableau[23],Tableau[24],Tableau[25],Tableau[26],Tableau[27]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[28],Tableau[29],Tableau[30],Tableau[31],Tableau[32],Tableau[33],Tableau[34]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[35],Tableau[36],Tableau[37],Tableau[38],Tableau[39],Tableau[40],Tableau[41]);
printf("+---+---+---+---+---+---+---+\n");
printf("joueur 1, sur quelle colonne voulez-vous mettre votre jeton ?");
scanf("%d",&choix);
system("pause");
int compteur=5;
while(compteur>=0)
{
if(Tableau[compteur*7+choix-1]==' ')
{
Tableau[compteur*7+choix-1]='X';
compteur=-1;
}
else
{
compteur--;
}
}
system("cls");
printf("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n");
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[0],Tableau[1],Tableau[2],Tableau[3],Tableau[4],Tableau[5],Tableau[6]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[7],Tableau[8],Tableau[9],Tableau[10],Tableau[11],Tableau[12],Tableau[13]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[14],Tableau[15],Tableau[16],Tableau[17],Tableau[18],Tableau[19],Tableau[20]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[21],Tableau[22],Tableau[23],Tableau[24],Tableau[25],Tableau[26],Tableau[27]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[28],Tableau[29],Tableau[30],Tableau[31],Tableau[32],Tableau[33],Tableau[34]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[35],Tableau[36],Tableau[37],Tableau[38],Tableau[39],Tableau[40],Tableau[41]);
printf("+---+---+---+---+---+---+---+\n");
system("pause");
printf("joueur 2, sur quelle colonne voulez-vous mettre votre jeton ?");
scanf("%d",&choix);
compteur=5;
while(compteur>=0)
{
if(Tableau[compteur*7+choix-1]==' ')
{
Tableau[compteur*7+choix-1]='O';
compteur=-1;
}
else
{
compteur--;
}
}
printf("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n");
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[0],Tableau[1],Tableau[2],Tableau[3],Tableau[4],Tableau[5],Tableau[6]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[7],Tableau[8],Tableau[9],Tableau[10],Tableau[11],Tableau[12],Tableau[13]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[14],Tableau[15],Tableau[16],Tableau[17],Tableau[18],Tableau[19],Tableau[20]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[21],Tableau[22],Tableau[23],Tableau[24],Tableau[25],Tableau[26],Tableau[27]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[28],Tableau[29],Tableau[30],Tableau[31],Tableau[32],Tableau[33],Tableau[34]);
printf("+---+---+---+---+---+---+---+\n");
printf("| %c | %c | %c | %c | %c | %c | %c |\n",Tableau[35],Tableau[36],Tableau[37],Tableau[38],Tableau[39],Tableau[40],Tableau[41]);
printf("+---+---+---+---+---+---+---+\n");
}
system("pause");
return 0;
}| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Fonction gagnant
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
3 réponses
Poster le code avec les balises <code c>, en l'état je ne peux pas le lire (et je ne l'ai pas lu).
Pour ta fonction, verifier en ligne ou en colonne c'est facile, je pense que tu peux le faire. En diagonale, c'est un peu plus compliqué: Il faut que tu vérifies en incrémentant le numéro de la ligne ET de la colonne puis en incrémentant le numéro de la ligne et en décrémentant le numéro de la colonne (4 fois bien sûr, en vérifiant à chaque fois la couleur du jeton obtenu).
Pour ta fonction, verifier en ligne ou en colonne c'est facile, je pense que tu peux le faire. En diagonale, c'est un peu plus compliqué: Il faut que tu vérifies en incrémentant le numéro de la ligne ET de la colonne puis en incrémentant le numéro de la ligne et en décrémentant le numéro de la colonne (4 fois bien sûr, en vérifiant à chaque fois la couleur du jeton obtenu).
NHenry
Messages postés
15483
Date d'inscription
Statut
Modérateur
Dernière intervention
367
Edition faite.
Skyyaeee
Messages postés
9
Statut
Membre
tu ne saurait pas m'aider juste pour les lignes et colonnes ?
Bonjour,
Le moyen le plus intuitif, tu envisages chacune des cases occupée du plateau. Pour chaque, on vérifie si cette position est suivie de 3 pions de même couleur en envisageant :
Le moyen le plus intuitif, tu envisages chacune des cases occupée du plateau. Pour chaque, on vérifie si cette position est suivie de 3 pions de même couleur en envisageant :
- les 3 cases successives au-dessus;
- les 3 cases successives à droite;
- les 3 cases en diagonale montante;
- les 3 cases en diagonale descendante.
for ( int co = 0 ; co < 7 ; co++ ) { for ( int li = 0 ; li < 6 ; li++ ) { char coul = Tableau[li*7+co]; // couleur de la case a verifier if ( coul != ' ' ) { int h; // verifier les 3 au dessus for ( h = 1 ; h < 4 && (li+h)<6 ; h++ ) { // 3 autres si possible if ( coul != Tableau[(li+h)*7+co] ) // autre couleur ou vide break; // stop avant le 4ieme } if ( h == 4 ) // tous etaient de la meme couleur return coul; // on retourne la couleur du gagnant // verifier les 3 a droite // verifier la diagonale montante // verifier la diagonale descendante } } } return ' '; // personne n'a gagne
Maintenant que ton code est lisible, je peux faire quelques remarques ;-) :
-
-
-
-
- Partout, tu utilises un type
-
Tu initialises ton tableau dans ta boucle. Donc à chaque fois que la boucle va se relancer ton tableau va être effacé.
Tu peux initialiser le tableau au moment de la déclaration:
-
- C'est très redondant la manière dont tu affiches ton tableau. Fais plutôt une fonction qui contient une boucle.
-
?...
- Il n'y a pas que des choses négatives, tout ce que je ne fais pas remarquer est positif ! Exemple: ton indentation est parfaite.
La curiosité est une excellente qualité !
-
system("pause");: Ce n'est pas portable et la fonction system entraîne une faille de sécurité. À enlever absolument, et le remplacer par exemple par :
printf("Appuyez sur Entrée pour continuer...\n");
while (getchar() != '\n');
-
system("cls");: Pas portable non plus, et tout aussi dangereux. Utilise plutôt printf("\e[1;1H\e[2J");, mais ça ne fonctionnera peut-être pas: il n'existe aucun moyen spécifié par la norme C (même la dernière C11) d'effacer l'écran, seulement des moyens propres à chaque système d'exploitation.
-
#include <stdlib.h>: Tu en avais besoin pour system(). Maintenant que tu ne l'utilises plus (n'est-ce pas ?), cette inclusion est devenue obsolète pour ton programme et tu peux la retirer :)
-
char Tableau[43];: Non seulement tu n'as besoin que de 42 cases (6*7 = 42), mais surtout tu te complexifies la vie avec un tableau à une seule dimension, c'est pour ça aussi que tu n'arrives pas à faire les algorithmes... Deux dimensions seraient beaucoup plus logiques:
char Tableau[6][7];, tu y accèdes en faisant Tableau[ligne][colonne].
- Partout, tu utilises un type
charpour stocker l'état des cases. Une énumération serait plus logique, par exemple:
typedef enum {JAUNE, ROUGE, RIEN} couleur_type;
-
while(quitter==0)
{
while(i<42)
{
Tableau[i]=' ';
i++;
}
Tu initialises ton tableau dans ta boucle. Donc à chaque fois que la boucle va se relancer ton tableau va être effacé.
Tu peux initialiser le tableau au moment de la déclaration:
char Tableau[42] = {' '}; // Une dimension
char Tableau[6][7] = {{' '}}; // Deux dimensions, ce que je te conseille
-
int choix, quitter=0;: À moins que ton compilateur ne date d'avant 1999, il serait plus logique que quitter soit un booléen:
bool quitter=false;
- C'est très redondant la manière dont tu affiches ton tableau. Fais plutôt une fonction qui contient une boucle.
-
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
?...
printf("\n\n\n\n\n\n");
- Il n'y a pas que des choses négatives, tout ce que je ne fais pas remarquer est positif ! Exemple: ton indentation est parfaite.
La curiosité est une excellente qualité !
La fonction de Dalfab n'est pas terminée: pour le moment, elle ne contient que la vérification des colonnes.
Mais avec ce qu'il te montre, si tu comprends sa fonction, alors tu pourras facilement la terminer.
Je le reproduis ici en utilisant un tableau à 2 dimensions (ça t'aidera peut-être):
Mais avec ce qu'il te montre, si tu comprends sa fonction, alors tu pourras facilement la terminer.
Je le reproduis ici en utilisant un tableau à 2 dimensions (ça t'aidera peut-être):
for ( int co = 0 ; co < 7 ; co++ ) {
for ( int li = 0 ; li < 6 ; li++ ) {
char coul = Tableau[li][co]; // couleur de la case a verifier
if ( coul != ' ' ) {
int h;
// verifier les 3 au dessus
for ( h = 1 ; h < 4 && (li+h)<6 ; h++ ) { // 3 autres si possible
if ( coul != Tableau[li+h][co] ) // autre couleur ou vide
break; // stop avant le 4ieme
}
if ( h == 4 ) // tous etaient de la meme couleur
return coul; // on retourne la couleur du gagnant
// Comme je suis très sympa, je fais la vérification en ligne !!
for ( h = 1 ; h < 4 && (co+h)<7 ; h++ ) { // La condition change un peu (li+h devient co+h).
if ( coul != Tableau[li][co+h] ) // On remplace juste Tableau[li+h][co] par Tableau[li][co+h].
break;
}
if ( h == 4 )
return coul;
// verifier la diagonale montante
// verifier la diagonale descendante
}
}
}
return ' '; // personne n'a gagne