Bonjour à tous et à toutes !
J'ai commencé un bachelier en informatique en cours du soir et dans le cadre d'initiation à la programmation, nous avons un petit projet à faire en langage C.
Je vous explique en grandes lignes ..
On doit faire un jeux 2D en console qui représente +- la légende de Thésée. Le principe est simple:
Le jeu se passe dans un labyrinthe de 21 case sur 21. Trois personnage sont présent : Thésée, le Minotaure et Ariane (la princesse).
Le but est pour Thésée de rejoindre la princesse et pour le Minotaure d'attraper Thésée.
On doit faire un jeux avec la possibilité de jouer seul et à deux joueur.
Pour le mode solo, on doit pouvoir avoir le choix entre 2 niveau de difficulté.
Le premier niveau de difficulté permet de jouer avec un Minotaure immobile.
Et le deuxième avec un Minotaure qui nous pourchasse.
Pour le moment notre prof ne nous a donner que 1 labyrinthe. J'ai fait du coup des fonction uniquement avec ce labyrinthe mais il faut s'imaginer que par la suite d'autre se rajouteront dans mes paramètre de fonction ainsi que dans mes switch.
Je vous met ici mon main.c duquel je lance le programme faisant appel à plusieurs fonctions situé dans d'autres fichiers ".c"
[CODE]Code:
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 #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <windows.h> #include <string.h> #include "menuF.h" #include "menuAf.h" #include "fonction.h" #define Taille_Grille_X 21 #define Taille_Grille_Y 21 int main() { char nomThesee[20] = {"Thesee"}, nomAriane[20] = {"Ariane"}; int choixDep, choixLab, choixPara, hero = 4; // Les variable commençant par choix sont les variables des menus, hero est le chiffre qui sera attribué au dernier héro en commençant à 2 int labSel[Taille_Grille_X][Taille_Grille_Y] = {{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}}; int lab1[Taille_Grille_X][Taille_Grille_Y] = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Déclaration de mon tableau de dimension 21 x 21 {1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1}, // avec les valeurs du labyrinthe 1 {1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1}, {1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1}, {1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1}, {1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1}, {1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1}, {1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1}, {1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1}, {1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1}, {1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1}, {1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1}, {1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1}, {1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1}, {1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1}, {1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1}, {1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1}, {1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1}, {1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; do// Cette boucle permet de sortir du menu uniquement si on a choisi un joueur ou deux joueur, ce qui nous permettra de continuer le jeu { choixDep = menuDep(); // Fait appelle à la fonction menuDep qui renvoi le choix du menu Principale ( Voir menuAf.C ) switch (choixDep) // fais un switch en fonction du choix dans le menu principale { case 1: // Choix joueur 1 { system("CLS"); printf("==============-------- 1 JOUEUR --------==============\n"); printf("\n"); choixLab =menuLab(lab1); // Fait appelle à la fonction qui permet de choisir un laby qui renvoi un entier stocker ( Voir menuAf.c) switch (choixLab) // fais un switch en fonction du labyrinthe { case 1: // Choix du premier labyrinthe { remplLab(lab1,labSel,Taille_Grille_X,Taille_Grille_Y); // permet de remplacer la bariable labSel qui sera ensuite utilisé comme labyritnthe pendant le jeu printf("Le labyrinthe choisi est le suivant :"); printf("\n"); printf("\n"); afficheLab(labSel,Taille_Grille_X,Taille_Grille_Y); // Affiche le labyrinthe séléctionné. } break; } } break; case 2: { system("CLS"); printf("==============-------- 2 JOUEUR --------==============\n"); printf("\n"); choixLab =menuLab(lab1); // Fonction menuLab permet selectionner le labyrinthe et de stocker cette valeur dans une variable qu'on switchera ensuite comme au case 1 } break; case 3: { system("CLS"); do // Cette boucle permet de sortir du menu uniquement si on a choisi l'option quitter { choixPara = menuPara(); // Fait appele a la fonction menuPara() qui renvoie un entier permettant de choisir dans le menu switch (choixPara) // Switch sur le choix para pour le choix. { case 1: // Choix de changer le nom du héro Thésée { system("CLS"); modifNom(nomThesee, 20); // Permet de modifier le nom du héro via une fonction void ( voir menuF.c ) system("CLS"); } break; case 2 : // Choix de changer le nom de la princesse Ariane { system("CLS"); modifNom(nomAriane, 20); // Permet de modifier le nom du héro via une fonction void ( voir menuF.c ) system("CLS"); } break; case 3: // Choix de quitter break; } }while (choixPara != 3); // Cette boucle permet de sortir du menu uniquement si on a choisi l'option quitter break; } case 4: // Choix Aide { system("CLS"); menuAide(); // Affiche le menu aide suivi d'une pause (voir menuAf.c )e } break; } }while (choixDep >= 3); // Cette boucle permet de sortir du menu uniquement si on a choisi un joueur ou deux joueur, ce qui nous permettra de continuer le jeu return 0; }
Je vais aussi vous mettre le code de ma fonction void affichLab qui fonctionne
Code:
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 void afficheLab(int (*laby)[21], int l, int c) // *laby est le pointeur de mon tableau, l mon nombre de ligne et c mon nombre de colonnes { int i, j; char asc = 219; for (i = 0; i < l; i ++) // Cette double boucle va me permettre d'afficher mon tableau et de remplacer les '1' par des blocks { for (j = 0; j < c; j ++) { if (laby[i][j] == 1) // Permet de remlacer les 1 par des blocks { printf("%c", asc); // remplace les 1 par de blocks } else if (laby[i][j] == 2) { printf("%c", 'M'); } else if (laby[i][j] == 3) { printf("%c", 'T'); } else if (laby[i][j] == 4) { printf("%c", 'A'); } else printf(" "); // remplace les 0 par des espaces } printf("\n"); // permet de mettre à la ligne après chaque ligne de mon tableau. } }
Il faut savoir que cette fonction va me permettre d'afficher en fonction des valeurs des cases de mon tableau des lettres correspondantes à mes héros.
La fonction qui bloque est la fonction , qui est censé remplacer le labyrinthe qu'on utilisera dans le jeu par le labyrinthe seléctionner dans la fonction menuLab.
Quand je lance le programme, c'est au moment ou j'arrive à ce switch remplLab case 1 ligne 55 dans mainVoici la Dite fonction :Citation:
Que le programme cesse de fonctionner
Code:
1
2
3
4
5
6
7
8
9
10
11 void remplLab(int *(labX)[21], int *(labSel)[21],int tailleX,int tailleY) // permet de remplacer le labyrinthe qui va etre lancé // par celui qu'on a selectionné { int i, j; for (i = 0; i < tailleX; i ++) // Permet de selectionner ligne par ligne { for (j = 0; j < tailleY; j ++)// permet selectionner colonne par coonne à l'interieur de chaque ligne labSel[i][j] = labX[i][j]; // Remplace la valeur du labSel ( utilisé dans le jeu) par le labX ( lab choisi dans le menuLab) } }
Voila, si quelqu'un saurai m'aider, ce serai cool.
Je vais mettre le projet complet en lien dropbox (j'arrive pas à le joindre) au cas ou quelqu'un veut y jeter un oeil pour mieux comprendre.
Voici le code d'une autre fonction ( mon srand se trouve dans le main ) qui fait planter le programme de la même manière quand je la lance sans le reste du code.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void positionHero(int *(labSel)[21], int l, int c, int hero) // Cette fonction permet de positionner les héros ( Thesee, Mino et Ariane dans le laby { // La valeur de héro est 4 par défaut int x, y,i; for (i = 2; i <= hero ; i ++) // La valeur de défaut va permettre de remplacer les 0 par 1 '2', 1 '3' et 1 '4' Qui representeront les 3 héros. { do { x = (rand() % (l - 0 + 1)); // La fonction rand me permet de générer un nombre aléatoire qui sera stocker y = (rand() % (l - 0 + 1)); if (labSel[x][y] == 0) labSel[x][y] = hero; // Les nombres aléatoires seront ensuite utilisé pour sélectionner une case du tableau aléatoirement. }while (labSel[x][y] !=hero); // Cette boucle me permet d'être sur que le héro ai sa position. } }
J'imagine que le problème doit avoir la même origine.
Je vous remercie déja si vous avez lu tout ça, et si vous savez m'aider je vous remercierai d'avantage !
PS : Si vous compilez le programme, pour arriver au message d'erreur, il faut choisir le mode 1 joueur et puis sélectionner un labyrinthe de 1 à 7 ( bien qu'il y en ai que deux qui sont les même )
LIEN FICHIER : https://www.dropbox.com/s/oc22759v1v...taure.zip?dl=0