1

Hello je sui en train de faire un "zelda-like" et je voudrai savoir commen faire pour faire en sorte que le personnage ne franchise pas des obstacles, par exemple un arbre ou un rocher , etc ...
Est il possible de passé uniquement par un sprite ou un bitmap pour ce genre de "définition" ?
Commen doit je m'y prendre ?

Merci d'avance happy
=)

2

Une solution simple consiste à dire la chose suivante :

La carte est un tableau à deux dimensions qui est représenté de la façon suivante :

[0,1,1,0,0,1,0,0
 1,0,0,1,0,0,0,0
 0,1,1,1,1,1,0,0
 1,0,0,1,1,0,0,0
 0,0,0,0,1,1,1,0
 0,0,0,1,1,1,0,0
 1,0,1,0,1,0,1,0
 0,0,0,1,0,0,0,0]

Avec 0 = emplacement libre et 1 = obstacle

Le joueur se trouve dans une case donnée du tableau.
Le joueur appuie sur une touche fléchée.
La case adjacente dans la direction voulue a-t-elle une valeur de 1 ? Oui => on bloque.
Non, on fait bouger le sprite.


Le but étant de savoir manipuler des choses vraiment abstraites dans ce cas-là...

3

Si j'ai bien compris il suffit de faire un tableau pour toute la carte et c'est bon ?
ca fait rien si le tableau est trés grand ?
La vitesse d'évaluation des cases données par le tableau ne sera pas affecté ?
Je parle d'un tableau de 100*100 cases environ
En tout cas merci happy
=)

4

KIKOOLOL (./3) :
ca fait rien si le tableau est trés grand ?

Euh, si, ça bouffe un peu beaucoup de mémoire... Fais attention à pas tout bouffer, laisse un peu pour le programme ^^
KIKOOLOL (./3) :
La vitesse d'évaluation des cases données par le tableau ne sera pas affecté ?

Je ne pense pas. Tu affiches sur un écran qui a toutes les chances de ne pas contenir toutes les cases de ton tableau, donc tu traites une partie du tableau. Et pendant le déplacement, tu ne vérifies qu'une seule case. A priori, sauf si c'est codé comme un porc, il ne devrait pas y avoir de gros ralentissements.

5

oki merci happy
j'ai une autre question, j'ai pas bien compris comment faire pour bouger un sprite a l'écran sans pour autant faire bouger les autres ?
et pour finir, par quels librairies passer pour afficher des sprites a 4 niveau de gris (blanc, gris clair, gris foncé, noir) et comment ?
Merci d'avances =p
=)

6

KIKOOLOL (./5) :
j'ai pas bien compris comment faire pour bouger un sprite a l'écran sans pour autant faire bouger les autres ?

Ben tu fais bouger que le sprite dans ton code, si le reste doit rester sur place, c'est pas la peine d'y toucher tongue
KIKOOLOL (./5) :
et pour finir, par quels librairies passer pour afficher des sprites a 4 niveau de gris (blanc, gris clair, gris foncé, noir) et comment ?

tigcclib.h peut suffire, sinon regarde du côté d'Extgraph.

7

ok je vais creuser cette idée happy
merci beaucoup et a bientôt !
=)

8

vu que t'as besoin d'un seul bit par case (1 ou 0) tu peux économiser la mémoire exemple si ta largeur fait X cases tu fais

unsigned char X_libre[X/8];

et pour tester un bit tu regardes le bit (X mod 8) de la case (X / 8)

exemple X_libre[x/8] & (1<<(x mod 8))

ben oui on peut ranger 8 bits dans un char, autant les utiliser tous tongue

9

ca sort un peu du sujet mais je suis pas sur que ca soit trés utile de créer un post pour ca:
Comment faire pour detetecter une attaque.
Concretement un perso a l'écran qui frappe un autre perso, comment faire pour que celui ci detetect qu'il a été touché ? il faut en effet tenir compte de la position du perso attanquant et du perso attaqué ainsi que celui de la distance les séparant.

=)

10

la réponse est dans la question hehe

en général ta matrice de jeu contiendra des valeurs différentes si il y a un ennemi, un joueur etc...
ça suffit de détecter si une case "ennemi" est a coté d'une case "joueur"

dans ce cas tu peux même mettre une valeur spéciale pour un mur et utiliser cette valeur pour le détecter, ce qui évite une matrice supplémentaire

ex 0 = libre 1=mur 2=ennemi 3=bonus 4=joueur etc...

11

j'y avait aussi pensé mais le fait de changer la position de l'ennemi ( ennemi qui bouge happy) ne ralentira pas l'application ?
=)

12

c'est nettement moins coûteux de modifier une case dans une matrice que d'afficher un sprite smile donc si par exemple tu affiches 20 sprites d'ennemi à l'écran tu peux largement te permettre de faire bouger 200 ennemis sans que ça ralentisse le jeu ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

13

edit : mauvais topic
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

14

dsl sorry

En tout cas merci a tous happy
=)

15

J'ai eu un autre exmple:
Imaginon je veut faire un jeu de course, commen je vai faire pour délimité les bordures de la pistes ?
J'utilise encore un tableau ?
merci happy
=)

16

pareil, avec un numéro pour chaque portion de bordure (les qui tournent, les tout droits, les qui sont en tire-bouchon, les qui votent à gauche, les qui votent à droite...)

17

ok mirci et pour lire les coordonnées on utilise juste un pointeurs c'est ca ?
mais pour les modifier ?
=)

18

19

okey mirci
=)