Bonjour tout le monde, je suis nouveau sur ce forum, et j'espère apporter au fur et a mesure ma modeste pierre a l'édifice.
Je crée ce sujet suite a un problème que je rencontre pour la réalisation d'un jeu en SDL.
Le principe du jeu est assez simple, des chiffres apparaissent dans le désordre a l'écran, et il faut avec la souris les déplacer afin de les réordonner dans un ordre croissant.
Je vous explique vite fait le morceau de code ci dessous, car je ne peut pas poster l'ensemble (trop long).
Le tableau Rpos[] est un tableau de int composé de 10 chiffres (1 a 10).Je génère 2 nombres aléatoire, et je parcoure le tableau RPos[] en inversent les chiffres qui correspondent au nombres aléatoire.Je recommence l'opération plusieurs fois.
Puis je fait un grand switch sur chaque case du tableau Rpos[], et si par exple a la case 0, le chiffre 1 est présent je Blit le chiffres 1 ect..
J'ai aussi ajouté un bouton (surface) derrière chaque chiffres, afin de pouvoir déplacer chaque chiffre indépendemment, en fonction de leur position.
Si la souris est dans le bouton on peut déplacer le chiffre.
Et on arrive enfin a mon problème, les chiffres ne peuvent pas se déplacer au delà de la limite gauche du bouton, ni au delà de la limite haute du bouton.Et je n'arrive pas a trouvé comment régler ce problème.
Voici une illustration (la Surface rouge est le bouton, la ligne verte est rajouter pour l'exple):
[IMG][/IMG]
On voit bien sur cet exple qu'il y a un problème car le chiffres 1 devrait être déplacé jusqu'en bas a gauche.Or sa bloque au niveau de la ligne verte.
Le morceau de code a modifier :
Voila je pense qu'il faut que je rajoute des lignes après:
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 case SDL_MOUSEMOTION: if(event.button.button == SDL_BUTTON_LEFT){ if(Rpos[0] == 1 && (event.motion.x > posRef[0].x) && (event.motion.x < posRef[0].x + posRef[0].w)&& (event.motion.y > posRef[0].y) && (event.motion.y < posRef[0].y + posRef[0].h)){ /* posTTF[] est la position des chiffres. posRef[] est la position du bouton. */ posTTF[0].x = event.motion.x; posTTF[0].y = event.motion.y; /* Permet de se déplacer au delà du coté droit du bouton, et en dessous */ posRef[0].w = event.motion.x; posRef[0].h = event.motion.y, SDL_FillRect(screen, &posTTF[0], SDL_MapRGB(screen->format, 255,255,255)); SDL_BlitSurface(background, NULL, screen, &posBackground); SDL_BlitSurface(texte[0], NULL, screen, &posTTF[0]); SDL_BlitSurface(Grid_1, NULL, screen, &posGrid); }
posRef[0].w = event.motion.x;
posRef[0].h = event.motion.y;
Mais je n'arrive pas trouver quoi ajouter.
Merci d'avance pour votre aide.
@++++
PS: je remercie grandement le tuto de Loka sur la SDL, qui a été une aide précieuse.
Partager