Fonction gagnant
Fermé
Skyyaeee
Messages postés
6
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
12 juin 2016
-
Modifié par NHenry le 11/06/2016 à 16:53
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 - 13 juin 2016 à 07:24
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 - 13 juin 2016 à 07:24
A voir également:
- Fonction gagnant
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction miroir - Guide
- Fonction remplacer word - Guide
3 réponses
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
11 juin 2016 à 16:39
11 juin 2016 à 16:39
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).
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
11 juin 2016 à 21:44
11 juin 2016 à 21:44
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
Skyyaeee
Messages postés
6
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
12 juin 2016
12 juin 2016 à 00:16
12 juin 2016 à 00:16
Bonjour,
Merci pour ton aide, mais je vais t'en demander encore :)
Sa fait un bout de temps que je n'ai plus toucher au C donc, cela veut dire que ce que tu m'a envoyé, je n'ai aucune idée ou le mettre.
Merci de m'aider.
Merci pour ton aide, mais je vais t'en demander encore :)
Sa fait un bout de temps que je n'ai plus toucher au C donc, cela veut dire que ce que tu m'a envoyé, je n'ai aucune idée ou le mettre.
Merci de m'aider.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
>
Skyyaeee
Messages postés
6
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
12 juin 2016
12 juin 2016 à 04:55
12 juin 2016 à 04:55
Désolé
Skyyaeee
Messages postés
6
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
12 juin 2016
12 juin 2016 à 11:59
12 juin 2016 à 11:59
Tu ne serrait pas m'aider ducoup ?
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
12 juin 2016 à 14:03
12 juin 2016 à 14:03
Sujet du topic: fonction gagnant
Le code que t'a passé ici Dalfab, c'est celui de la fonction "gagnant".
L'endroit où il faut appeler la fonction gagnant ? He bien, tout simplement l'endroit où tu dois vérifier si quelqu'un a gagné.
Le code que t'a passé ici Dalfab, c'est celui de la fonction "gagnant".
char gagnant(char* Tableau) { // Code... }
L'endroit où il faut appeler la fonction gagnant ? He bien, tout simplement l'endroit où tu dois vérifier si quelqu'un a gagné.
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
Modifié par paly2 le 12/06/2016 à 14:25
Modifié par paly2 le 12/06/2016 à 14:25
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é !
Skyyaeee
Messages postés
6
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
12 juin 2016
12 juin 2016 à 14:49
12 juin 2016 à 14:49
Merci bien a toi pour t'es conseils, pourrait tu m'aider a remplacer tout ce que tu m'a dit dans mon code original ci-dessus ?
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
12 juin 2016 à 17:20
12 juin 2016 à 17:20
Je suis sûr que tu peux le faire tout seul, n'hésite pas à poser des questions précises si besoin ;) (par exemple si, en dépit de tes recherches et essais, tu ne parviens pas à utiliser une énumération).
Skyyaeee
Messages postés
6
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
12 juin 2016
12 juin 2016 à 17:37
12 juin 2016 à 17:37
Ok, ben j'ai fait les modifications de ton deuxième message, mais je suis toujours bloqué pour les vérifications lignes et colonnes, même avec la fonction de Dalfab, je sais pas si elle est finie, si ont peut directement la mettre dans mon programme ou pas ?
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
13 juin 2016 à 07:24
13 juin 2016 à 07:24
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
11 juin 2016 à 16:53
Modifié par Skyyaeee le 11/06/2016 à 17:52