Gomoku (morpion revisité) code C
Fermé
jauneam
Messages postés
2
Date d'inscription
vendredi 6 avril 2018
Statut
Membre
Dernière intervention
17 avril 2018
-
Modifié le 6 avril 2018 à 09:52
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 17 avril 2018 à 18:26
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 17 avril 2018 à 18:26
A voir également:
- Gomoku (morpion revisité) code C
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code blocks free - Télécharger - Langages
- Code windows 10 - Guide
1 réponse
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
Modifié le 11 avril 2018 à 11:32
Modifié le 11 avril 2018 à 11:32
Salut,
Il y a beaucoup de problèmes dans ton code et étant sous Linux, ce n'est pas facile de tester tout cela.
D'abord, il doit manquer /* en ligne 1
en ligne 30, le commentaire est faux. Le handle n'est utile que si une fonction Windows doit l'utiliser dans le contexte dans lequel tu le déclares.
en lignes 52 et 53 tu annonces des prototypes de fonctions qui ne sont pas dans le code, ce qui produit une erreur de liaison.
en ligne 62, dans main(), tu définis
en ligne 66 dans main() tu déclares H, mais tu ne l'utilises pas dans main().
en lignes 92 et 93, tu appelles affichage_pl(), puis affichage_pl2() avec un pointeur vers "gomoku", alors que :
- affichage_pl() semble conçue pour afficher le plateau, tu devrais donc passer &gomoku et &mobile afin que la fonction puisse soit afficher un blanc de la couleur correspondante au damier si la case dans mobile est vide, soit autre chose avec la bonne couleur de fond s'il y a quelque chose dans mobile à cette case
- affichage_pl2() n'affiche rien, elle semble conçue pour initialiser mobile, or : (1) tu lui passes &gomoku et non &mobile : et (2) tu l'appelles après affichage_pl(). Elle est donc mal nommée, son paramètre est erroné et tu devrais l'appeler après la fonction affichage_init() et avant affichage_pl()
en ligne 206 à l'intérieur de la fonction affichage_pl(), tu insères une autre fonction affichage_pl2() contenant le code de affichage_pl(). Il y a trois problèmes avec cela :
- le code à l'intérieur de affichage_pl() n'est jamais exécuté, puisqu'il n'est jamais réellement appelé
- la déclaration de fonctions à l'intérieur de fonctions n'est pas du C standard (gcc le gère comme une extension au C)
- de toutes façons cela n'a aucun sens, puisque tu implémentes déjà par ailleurs une fonction affichage_pl2() qui a son propre code
en ligne 231
- afficher un blanc coloré avec la couleur de fond correspondant à la case du damier (ce que semble faire le code, bien que maladroitement)
- afficher un caractère de la couleur que tu veux avec la couleur de fond correspondant à la case du damier contenant quelque chose
Alternativement, tu peux utiliser SetConsoleCursorPosition() de l'API Windows, pour placer ton curseur à l'endroit souhaité avant d'écrire.
https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044844545&id=1043284392
ou si ton conio.h dispose de gotoxy(), utiliser directement cette fonction.
Dal
Il y a beaucoup de problèmes dans ton code et étant sous Linux, ce n'est pas facile de tester tout cela.
D'abord, il doit manquer /* en ligne 1
en ligne 30, le commentaire est faux. Le handle n'est utile que si une fonction Windows doit l'utiliser dans le contexte dans lequel tu le déclares.
en lignes 52 et 53 tu annonces des prototypes de fonctions qui ne sont pas dans le code, ce qui produit une erreur de liaison.
en ligne 62, dans main(), tu définis
plateau mobile;, mais cette variable n'est pas initialisée, ni utilisée.
en ligne 66 dans main() tu déclares H, mais tu ne l'utilises pas dans main().
en lignes 92 et 93, tu appelles affichage_pl(), puis affichage_pl2() avec un pointeur vers "gomoku", alors que :
- affichage_pl() semble conçue pour afficher le plateau, tu devrais donc passer &gomoku et &mobile afin que la fonction puisse soit afficher un blanc de la couleur correspondante au damier si la case dans mobile est vide, soit autre chose avec la bonne couleur de fond s'il y a quelque chose dans mobile à cette case
- affichage_pl2() n'affiche rien, elle semble conçue pour initialiser mobile, or : (1) tu lui passes &gomoku et non &mobile : et (2) tu l'appelles après affichage_pl(). Elle est donc mal nommée, son paramètre est erroné et tu devrais l'appeler après la fonction affichage_init() et avant affichage_pl()
en ligne 206 à l'intérieur de la fonction affichage_pl(), tu insères une autre fonction affichage_pl2() contenant le code de affichage_pl(). Il y a trois problèmes avec cela :
- le code à l'intérieur de affichage_pl() n'est jamais exécuté, puisqu'il n'est jamais réellement appelé
- la déclaration de fonctions à l'intérieur de fonctions n'est pas du C standard (gcc le gère comme une extension au C)
- de toutes façons cela n'a aucun sens, puisque tu implémentes déjà par ailleurs une fonction affichage_pl2() qui a son propre code
en ligne 231
printf(" ", *gomoku);: (1) produit un warning, car tu mets un argument à printf sans spécificateur (l'argument ne sert donc à rien, printf affiche juste les espaces) ; (2) de toutes façons le type est inadéquat, car c'est une struct ; (3) tu dois, à ce moment, soit :
- afficher un blanc coloré avec la couleur de fond correspondant à la case du damier (ce que semble faire le code, bien que maladroitement)
- afficher un caractère de la couleur que tu veux avec la couleur de fond correspondant à la case du damier contenant quelque chose
Alternativement, tu peux utiliser SetConsoleCursorPosition() de l'API Windows, pour placer ton curseur à l'endroit souhaité avant d'écrire.
https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044844545&id=1043284392
ou si ton conio.h dispose de gotoxy(), utiliser directement cette fonction.
Dal
Modifié le 11 avril 2018 à 11:34
note aussi que, du point de vue de la conception, utiliser une struct pour stocker la couleur de fond du damier n'est pas forcément nécessaire, et qu'il devrait être assez facile de déterminer si la couleur de fond d'une case d'un damier, à partir de ses coordonnées, doit être jaune ou noire, ou simplement d'alterner entre ces deux couleurs entre chaque printf sensé afficher une case consécutivement.
17 avril 2018 à 08:22
17 avril 2018 à 18:26