Bonjours ,
Cela fait plus d'un moi que je suis sur ce problème , j'en ai marre .
Je suis actuellement sur un projet de Snake.
Collisions pixel par pixel , déplacement pixels par pixels .
La map est stocker dans un tableau a double [] .
Tout marche pour l'instant l'affichage de la map etc .
Mais une fonction que j'ai crée fait quitter le jeu.
En faite le principe ? :
Une tête , un corps et une queue .
La tête est le début de la chaîne , la queue la fin , a chaque fois que le serpent mange un fruit on rajoute un " morceau de corps " .
La fonction en question sert a définir les positions de tout les " morceaux " .
Pour l'instant je ne fais aucune variations parce que sa marche pas .
Je vous montre le code .
LISTE CHAINNE .H :
LISTES CHAINNE .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 #include "SDL.h" #ifndef LISTE_CHAINEE #define LISTE_CHAINEE typedef struct Element Element; struct Element { SDL_Rect posElement; int orientation; Element *suivant; }; typedef Element* Liste; typedef struct Serpent Serpent; struct Serpent { int direction; int vitesse; Liste chaine; }; Liste initialisation(); void insertion(Serpent serpent); #endif
Fonction JEU.C : ( Que le début la fin n'es pas importante )
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 #include "ressource.h" #include "listes_chainees.h" Liste initialisation() { Liste liste = malloc(sizeof(Element)); Element *element = malloc(sizeof(element)); liste->orientation = HORIZONTALE; liste->posElement.x = 10; liste->posElement.y = 10; element->orientation = liste->orientation; element->posElement.x = liste->posElement.x +43 ; element->posElement.y = 0; element->suivant = NULL; liste->suivant = element; return liste; } void insertion(Serpent serpent) { Element *nouveau = malloc(sizeof(Element)); nouveau->orientation = serpent.chaine->orientation; nouveau->posElement.x = serpent.chaine->posElement.x+43; nouveau->posElement.y = serpent.chaine->posElement.y; nouveau->suivant = serpent.chaine->suivant; serpent.chaine->suivant = nouveau->suivant; }
Et la fonction en question :
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 void jeu (void) { // Declaration des variables nécessaires Input in ; Serpent serpent; int i = 0 , j = 0 , continuer = 1 , nbAleatoire = 60 , tempsActuel = 0, tempsPrecedent = 0; char map[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {{0}} ; SDL_Rect positions , box , posSerpent ; SDL_Surface *teteSerpent, *corpSerpent, *queueSerpent, *arbre, *fruit[3], *caisse, *fond ; // Remplissages des variables if(!chargerNiveau(map)) // Chargement de la map , voir : fichier.c exit(0); serpent.chaine = initialisation(); serpent.vitesse = 1; serpent.direction = DROITE; teteSerpent = init_img("Ressources\\Img\\teteSerpent.png",OUI); corpSerpent = init_img("Ressources\\Img\\corpSerpent.png",NON); queueSerpent = init_img("Ressources\\Img\\queueSerpent.png",OUI); fruit[CERISE] = init_img("Ressources\\Img\\cerise.png",NON); fruit[POMME] = init_img("Ressources\\Img\\pomme.png",OUI); fruit[POIRE] = init_img("Ressources\\Img\\poire.png",OUI); fond = init_img("Ressources\\Img\\fond.png",NON); caisse = init_img("Ressources\\Img\\caisse.png",OUI); arbre = init_img("Ressources\\Img\\arbre.png",NON); nbAleatoire = NB_Aleatoire(0 , 2); memset(&in,0,sizeof(in)); while (continuer) { UpdateEvents(&in); if(in.quit) continuer= 0; if(in.key[SDLK_ESCAPE]) continuer = 0 ; else if(in.key[SDLK_UP]) { serpent.direction = HAUT; serpent.chaine->orientation = VERTICALE; in.key[SDLK_UP] = 0; } else if(in.key[SDLK_DOWN]) { serpent.direction = BAS; serpent.chaine->orientation = VERTICALE; in.key[SDLK_DOWN] = 0; } else if(in.key[SDLK_LEFT]) { serpent.direction = GAUCHE; serpent.chaine->orientation = HORIZONTALE; in.key[SDLK_LEFT] = 0; } else if(in.key[SDLK_RIGHT]) { serpent.direction = DROITE; serpent.chaine->orientation = HORIZONTALE; in.key[SDLK_RIGHT] = 0; } tempsActuel = SDL_GetTicks(); mouvementSerpent(serpent, tempsActuel, tempsPrecedent ); definePosSerpent(serpent); // ICI LA FONCTION QUI BUGGGGGG
Voila merci , j’espère vous aurez le courage de m'aider .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void definePosSerpent (Serpent serpent) { Element *actuel = serpent.chaine->suivant; actuel->posElement.x = serpent.chaine->posElement.x +43; while(actuel!= NULL) { if( actuel->suivant != NULL) actuel->suivant->posElement.x = actuel->posElement.x + 43; actuel = actuel->suivant; } }
Partager