Bonsoir,
Après avoir réfléchi pendant tout un week-end, je fais appel à ce forum afin de trouver de l'aide...
J'ai un petit programme tout bête qui dois créer des joueurs dans un jeu de dada, tout le monde connais ça.
De 1 à 4 joueurs... lorsque je sélectionne 4, il me demande le prénom du 1er, du second, du troisième et LA, il plante sans AUCUN message d'erreur, la fenêtre DOS se ferme seule. Aucune erreur lors de la compilatio, aucun warning...
Qu'en pensez-vous ?
Contenu du fichier main.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <string.h> #include "cheval.h" #include "constantes.h" int main() { srand(time(NULL)); // Déclarations des variables int nbJoueurs = 0; int typeJoueur = -1; char *nomJoueur; joueur joueur_1, joueur_2, joueur_3, joueur_4; int i = 1; // Liste des joueurs joueur *listeJoueurs = NULL; // Initialisation des escaliers cheval matriceEscaliers[4][6]; // Demande du nombre de joueur total while(nbJoueurs > 4 || nbJoueurs < 2){ system("cls"); printf("Combien de joueurs total (2-4) ?\n"); scanf("%d", &nbJoueurs); } while(i <= nbJoueurs){ if(i == 1){ // Création du 1er joueur (humain obligatoire) printf("\n\nPrenom du joueur 1 (humain):\n"); scanf("%s", &nomJoueur); joueur_1 = creationJoueur((char *)&nomJoueur, 0); printf("Bienvenue %s !\n", joueur_1->nom); } if(i == 2){ // Création du 2ème joueur printf("\n\nJoueur 2 ?\n1 : Humain\n2 : Ordinateur\n"); scanf("%d", &typeJoueur); if(typeJoueur == 1){ printf("Quel est le prenom du joueur 2 ?\n"); scanf("%s", &nomJoueur); joueur_2 = creationJoueur((char *)nomJoueur, 0); }else{ joueur_2 = creationJoueur(NOM_JOUEUR_2, 1); } printf("Bienvenue %s !\n", joueur_2->nom); } if(i == 3){ // Création du 3ème joueur printf("\n\nJoueur 3 ?\n1 : Humain\n2 : Ordinateur\n"); scanf("%d", &typeJoueur); if(typeJoueur == 1){ printf("Quel est le prenom du joueur 3 ?\n"); scanf("%s", &nomJoueur); joueur_3 = creationJoueur((char *)nomJoueur, 0); }else{ joueur_3 = creationJoueur(NOM_JOUEUR_3, 1); } printf("Bienvenue %s !\n", joueur_3->nom); } if(i == 4){ // Création du 4ème joueur printf("\n\nJoueur 4 ?\n1 : Humain\n2 : Ordinateur\n"); scanf("%d", &typeJoueur); if(typeJoueur == 1){ printf("Quel est le prenom du joueur 4 ?\n"); scanf("%s", &nomJoueur); joueur_4 = creationJoueur((char *)nomJoueur, 0); }else{ joueur_4 = creationJoueur(NOM_JOUEUR_4, 1); } printf("Bienvenue %s !\n", joueur_4->nom); } i++; } printf("%s\n", joueur_2->nom); system("PAUSE"); return 0; } // ---------------------------- // | | // | FONCTIONS DU PROGRAMME | // | | // ---------------------------- // Cette fonction retourne un chiffre entre 1 et 6 (c'est un dé) :D int lancerDeDe(){ int valeur = 0; while(valeur == 0){ int valeur = (int)(rand()%7); } } // La fonction suivante sert à créer un joueur joueur creationJoueur(char *nom, int bot){ joueur nouveau_joueur = malloc(sizeof(joueur)); nouveau_joueur->chevauxJouables = 4; nouveau_joueur->chevauxEnclos = 4; nouveau_joueur->caseDepart = 0; nouveau_joueur->nom = nom; nouveau_joueur->bot = bot; nouveau_joueur->suivant = NULL; return nouveau_joueur; }
Contenu du fichier cheval.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 // ----------------------------- // | | // | STRUCTURES DU PROGRAMME | // | | // ----------------------------- // Cette structure représente un joueur et ses caractéristiques. struct t_joueur{ int chevauxJouables; // 4 - Nbre de chevaux ayant gagné. int chevauxEnclos; // Nbre de chevaux restant dans l'enclos. int caseDepart; // Position de la case de départ. La case d'arrêt correspond à la case départ-1. char *nom; // Nom du joueur. int bot; // A 1 si le joueur est un ordinateur, 0 sinon (humain). struct t_joueur *suivant; // Pointeur permettant d'accéder au joueur suivant. }; typedef struct t_joueur *joueur; // Cette structure représente un cheval et ses caractéristiques struct t_cheval{ joueur *proprietaire; // Pointeur vers le propriétaire du cheval int position; // Position du cheval sur le plateau int numero; // Numéro du cheval }; typedef struct t_cheval *cheval; // Variables globales // Escaliers menant à la victoire cheval **matriceEscaliers; // Represente les cases du plateau de jeu cheval *tableauPlateau; // Prototypes de fonctions // Création d'un joueur // Retourne : un nouveau joueur joueur creationJoueur(char *nom, int bot); // Simule un lancement de dé. // Retourne : un chiffre entre 1 et 6. int lancerDeDe(); // Positionne le cheval de l'enclos d'un joueur sur la case de départ // Param. : le joueur concerné // Retourne : le cheval en question cheval entrerChevalPlateau(int joueur); // Remet le cheval d'un joueur dans l'enclos // Param. : le cheval concerné // Retourne : un entier (1 : succès, 0 : échec) int sortirChevalPlateau(cheval leCheval); // Teste si un cheval du joueur est disponible dans l'enclos // Param. : le joueur concerné // Retourne : un entier (1 : disponible, 0 : non disponible) int chevalDispo(int joueur); // Teste la présence d'un cheval sur la case // Param. : la case concernée // Retourne : le cheval si trouvé cheval ChevalSurCase(int cellule); // Teste si le cheval est ami d'un joueur // Param. : le cheval/joueur concerné // Retourne : un entier (1 : ami, 0 : ennemi) int chevalAmi(cheval leCheval, joueur leJoueur); // Ajoute un nouveau joueur au plateau // Param. : Nom du joueur, un entier (1 : bot, 0 : humain) void ajouterJoueur(char* nom, int bot); // Ajout d'un vainqueur à la liste des gagnants // Param. : le joueur concerné void victoireJoueur(joueur leJoueur); // Positionne un cheval sur la 1ere marche de ses escaliers // Param. : le cheval concerné void entrerChevalEscaliers(cheval leCheval); // Sort un cheval de ses escaliers // Param. : le cheval concerné void sortirChevalEscaliers(cheval leCheval); // Déplace un cheval sur ses escaliers d'une case // Param. : le cheval concerné, le score du dé (entier de 1 à 6) // Conditions : la valeur de scoreDe doit répondre aux règles du jeu. void deplacerChevalEscaliers(cheval leCheval, int scoreDe); // Déplace un cheval sur le plateau de jeu de scoreDe case // Param. : le cheval concerné, le score du dé (entier de 1 à 6); void deplacerChevalPlateau(cheval leCheval, int scoreDe);
Contenu du fichier constantes.h
Lorsque je mets ces lignes suivantes en commentaires, ça passe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 /* constantes.h ------------ Rôle : définit des constantes communes à tout le programme */ #define NOM_JOUEUR_2 "Christophe" #define NOM_JOUEUR_3 "Mathieu" #define NOM_JOUEUR_4 "Gwnenog"
Autrement ça ne passe pas, le programme se ferme de lui-même...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //joueur_3 = creationJoueur((char *)nomJoueur, 0); //joueur_3 = creationJoueur(NOM_JOUEUR_3, 1); //printf("Bienvenue %s !\n", joueur_3->nom);
Avez-vous déjà rencontrer ce type de bug ?
Si oui, que faire ?
Merci à tous ceux qui répondrant,
Thomas![]()
Partager