A oui bien vu !
Je fais (un truc comme sa) :
Est-ce que c'est un truc dans ce genre ?Code:
1
2
3 int nombreDeCaseLargeur = LARGEUR_ECRAN / 15; xRandom = (rand() % (LARGEUR_ECRAN - nombreDeCaseLargeur + 15));
A+
Version imprimable
A oui bien vu !
Je fais (un truc comme sa) :
Est-ce que c'est un truc dans ce genre ?Code:
1
2
3 int nombreDeCaseLargeur = LARGEUR_ECRAN / 15; xRandom = (rand() % (LARGEUR_ECRAN - nombreDeCaseLargeur + 15));
A+
oui c'est exactement ça dont je voulais parler :)
Je vais aller bien lire en profondeur ce tuto (mieux que je l'ai lu la première fois :p), et je vais essayer de faire un truc.
Je reposterais demain si j'ai des soucis :)
Encore merci pour votre aide (peu de gens auraient tenu 5 pages à aider un nouveau en programmation :))
A+
c'est normal voyons, dis moi ce que tu auras fait demain et si tu à d'autres problèmes postes les sur ce même topic.
Me revoilou :p
J'ai réussis à réglé le problème des pommes (je sais pas trop comment -> j'ai bidouillé :p).
Par contre même en lisant attentivement le cours du site, je n'arrive pas à faire ma propre formule pour gérer le positionnement aléatoire de la pomme.
J'aimerais que à partir de ceci :
J'arrive à faire apparaitre une pomme à un abscisse et ordonnée qui soit un multiple de 15 (pour que mon serpent puisse passer dessus), qu'il ne puisse pas être mis en dehors de l'écran, et qu'il soit générer à un endroit où n'est pas le serpent (pour pas que le serpent masque la pomme).Code:
1
2
3 xRandom = (rand() % (LARGEUR_ECRAN - 1 + 1)) + 15; yRandom = (rand() % (HAUTEUR_ECRAN - 1 + 1)) + 15;
Une autre question, comment faire pour savoir si un nombre divisé par 5 (par exemple) est un entier ?
Tout les 5 pommes mangés, je veux augmenter la vitesse, donc il faut que je sache si le nombre actuel de pomme mangé divisé par 5 donne un entier (et donc j'augmente la vitesse).
A+
Citation:
J'arrive à faire apparaitre une pomme à un abscisse et ordonnée qui soit un multiple de 15
Code:
1
2 xRandom = (rand() % (LARGEUR_ECRAN / 15)) * 15; yRandom = (rand() % (HAUTEUR_ECRAN / 15)) * 15;
Avec le reste de la division entière (opérateur modulo %) :Citation:
comment faire pour savoir si un nombre divisé par 5 (par exemple) est un entier ?
Code:
1
2
3
4 if (NbPommesMangees % 5 == 0) { // NbPommesMangees est un multiple de 5 }
pourquoi ce compliquer la vie, tu fait simplement dans ta boucle principal :Citation:
Une autre question, comment faire pour savoir si un nombre divisé par 5 (par exemple) est un entier ?
Tout les 5 pommes mangés, je veux augmenter la vitesse, donc il faut que je sache si le nombre actuel de pomme mangé divisé par 5 donne un entier (et donc j'augmente la vitesse).
Code:
1
2
3
4
5
6 while (pomme == 5) { vitesse += 100; pomme = 0; }
Vous êtes des chefs, mais alors là vraiment MERCI.
J'ai jamais vu un forum aussi sympa, ou les réponses sont rapides, clair net et ... précis :D
Avec ces deux lignes de codes :
On est sur que la pomme ne sera pas blittée en dehors de l'écran ?Code:
1
2
3 xRandom = (rand() % (LARGEUR_ECRAN / 15)) * 15; yRandom = (rand() % (HAUTEUR_ECRAN / 15)) * 15;
Encore merci !
A+ et .... bonne nuit :p
EDIT: LeTsIrGoD >> Je n'y avais pas pensé, tu as raison sa va résoudre mon problème :)
oui car on divise la largeur et la hauteur par carrée de 15 pixels donc ça ne pourras pas sortir de l'ecran.Citation:
On est sur que la pomme ne sera pas blittée en dehors de l'écran ?
Bonjour :)
J'ai réussis à gérer la vitesse du serpent, et maintenant j'essaie de faire en sorte que la pomme ne soit pas blitté au même endroit que le serpent (plus le serpent sera grand, et plus il y aura de chance que la pomme soit blitter dessus).
J'ai coder un truc un peu barbare (avec un do ... while).
Voici ce que j'ai fais (sa marche pas bien sur :p)
En faite je commence avec mon do ... et ensuite dans mon while j'essaie de lui dire que si la pomme est sur le serpent, on refait un tirage (jusqu'a ce que la pomme ne soit pas sur lui :))Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 do { /* Je fais sa pour éviter que la pomme soit choisit là où il y a le serpent, comme sa on est sur que la pomme ne sera jamais caché par le serpent ! */ positionPomme.x = (rand() % (LARGEUR_ECRAN / 15)) * 15; positionPomme.y = (rand() % (HAUTEUR_ECRAN / 15)) * 15; }while(for(i=0;i <= nombreDeCorp;i++) { positionSerpent[i].x != positionPomme.x; positionSerpent[i].y != positionPomme.y; });
Quel est la meilleur manière de coder sa ?
A+
le mieu à faire n'est pas comme ça, tu devrait plutot tester la sortis de ton nombre aleatoire x et y et si ça n'est pas egal a la position d'un membre du serpent on continue sinon ça ne fait rien et ça attend un prochain tour de boucle principal. (ça te permet de gérer un affichage des pommes un peu moin systématique).
Oui, j'y avais pensé, mais j'avais peur que sa fasse un vide et pendant 1 secondes il n'y est pas de pomme :)
Si je souhaite faire un pause quand le joueur appuie sur entré, comment je fais pour tout stoper (que plus rien ne bouge :p) ?
A+
tu block ta boucle principal est tu met vitesse serpent à 0 comme ça le serpent n'avance plus et les pommes n'apparaissent plus.
Pour ton problème de boucle, il suffit de placer le test (ta boucle for) dans une fonction.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 bool InSerpent(int X, int Y) { for(i=0;i <= nombreDeCorp;i++) { if ((positionSerpent[i].x == X) && (positionSerpent[i].y == Y)) return true; } return false; } ... do { // Générer les coordonnées de la pomme } while (InSerpent(positionPomme.x, positionPomme.y));
mieu tu pourrais faireCitation:
Si je souhaite faire un pause quand le joueur appuie sur entré, comment je fais pour tout stoper (que plus rien ne bouge :p) ?
et dans ta boucle à l'endroit ou tu blitte la pomme tu entour d'un if :Code:
1
2
3
4
5
6
7 //... case : SDLK_Return vitesseSerpent = 0; blitterLesPommes : 0; break; //...
Code:
1
2
3
4
5
6 if (blitterLesPommes) { //... fonction random //... }
Merci de vos réponses (on va y arriver :p)
Laurent Gomila >> Dans mon main.h il y a ce code :
Et mon compile me met : Syntax error before "pommeDansSerpent".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 #ifndef MAIN_H #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <SDL/SDL_ttf.h> #include <FMOD/fmod.h> #define LARGEUR_ECRAN 450 #define HAUTEUR_ECRAN 375 #define NBRE_DE_BIT 32 #define HAUTEUR_SPRITE 15 #define LARGEUR_SPRITE 15 #define LARGEUR_CADRE_GAMEOVER 200 #define HAUTEUR_CADRE_GAMEOVER 200 /* On défini une variable "Point" qui nous servira pour avoir toutes les coordonnées des parties du serpent et aussi des Pommes etc. */ typedef struct { int x; int y; }Position; //Les directions dans lesquels le serpent peut aller enum{BAS,GAUCHE,DROITE,HAUT}; /* PROTOTYPE DES FONCTIONS */ void deplacerSerpent(int direction, SDL_Rect positionSerpent[], SDL_Rect *positionPomme, int *nombreDeCorp, int *gameOver, int *pomme); bool pommeDansSerpent(int X, int Y, int nombreDeCorp); #endif /* !MAIN_H */
Je ne vois pas ce qui ne va pas ?
LeTsIrGoD >> Je vais tester :)
A+
c'est normal tu programme en C donc tu n'as pas le type bool comme en C++
donc met un type long ou int à la place.
Si tu compiles en C non 99 tu n'as probablement pas le type bool, utilise int.
Ok, voila ce que j'ai fais (je pensais que bool existait en C :s) :
Et quand j'appelle la fonction je fais sa :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 int pommeDansSerpent(int X, int Y, int nombreDeCorp, SDL_Rect positionSerpent[]) { int i = 0; for(i=0;i <= nombreDeCorp;i++) { if ((positionSerpent[i].x == X) && (positionSerpent[i].y == Y)) //Sa veut dire que la pomme est sur le serpent return 0; } //On retourne 1 (car c'est bon) return 1; }
Je test si la fonction retourne 0 ou pas (si elle retourne 0 alors on fait un autre tirage !).Code:
1
2
3
4
5
6
7
8
9 do { /* Je fais sa pour éviter que la pomme soit choisit là où il y a le serpent, comme sa on est sur que la pomme ne sera jamais caché par le serpent ! */ positionPomme.x = (rand() % (LARGEUR_ECRAN / 15)) * 15; positionPomme.y = (rand() % (HAUTEUR_ECRAN / 15)) * 15; }while(pommeDansSerpent(positionPomme.x,positionPomme.y,nombreDeCorp,&positionSerpent) < 1);
Sinon pour la pause, j'ai même pas besoin de la variable blitterLesPommes, car si mon serpent n'avance plus (car j'ai réduit la vitesse), alors on est sur qu'il ne pourra pas aller manger la pomme (étant donné qu'il avance pas).
J'essaie de faire ce que tu m'a dit (pour la pause :))
A+
ça veut dire que pendant la pause les pommes continueront de ce bitter à un endroit aleatoire ? je te conseille quand même de faire comme si ça blocker aussi l'affichage des pommes pour croire vraiment que le jeu est en "pause".