Couloirs, portes, murs, créatures et mondes cachés

Signaler
Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009
-
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016
-
Bonjour,
j'ai un input-image avec au centre le personnage qui se déplace sur une grande carte dont on ne voit que la partie proche du personnage(200*200px). Dans une table "objet", j'ai l'id de la carte, les coordonnées des objets (des rectangles) , et leur valeur. Si valeur ='interdit', on ne peut pas se déplacer sur cette zone. C'est pratique pour les mondes cachés mais pour les murs, c'est ineficace, on peut de fait passer a travers les murs, puisque seules les coordonnées du mur sont 'interdites' et non pas celles de la piéce derriere le mur.
Comment faire pour obliger le joueur a passer par la porte et non pas a travers le mur?
Je n'y connais pratiquement rien en poo mais peut-être est-ce la manière la plus élégante de programmer ce machin-là.
Je vous remercie par avance pour vos recommandations et pour vos réponses.

14 réponses

Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009

rebonjour,
je me rends compte que ma question hier n'était pas clair:
comment rendre les murs infranchissable? ou plus clairement :
comment faire que si un mur est entre le point de départ et le point de chute, le mouvement est impossible, et ce en connaissant les coordonnées des 3 elements,
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

c'est pas le problème, ce n'est pas pour ça que tu n'as pas eu de réponse : pas parce que tu n'es pas clair. Mais simplement parce que le sujet est bien trop vaste, et la problématique bien trop grosse pour t'être expliquée comme cela. On ne sait même pas comment fonctionne ton code de "déplacement".
Moi, en, gros, je mettraais les lieux "interdits" dans un tableau. Leurs coordonnées. Si on tombe dessus, hop, on ne bouge pas, simplement.
Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009

c'est ce que j'ai fait, mais une piéce comme la cuisine n'est pas interdite, mais le mur entre le personnage et la cuisine si, et donc si tu es hors de la cuisine, tu peux passe dans la cuisine à travers le mur, voila le problême: il suffit qu'un garde surveille la porte de la salle du trésor, tu passes à travers les murs et le combat avec le garde passe à la trappe, pr cette méthode.
C'est bien ça le problême!
Si quelqu'un voit comment faire, je veux bien comprendre.
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Lieux interdits chez Malalam = coordonées x,y des murs !
Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009

le probleme vient en partie du déplacement: on ne se deplace pas de case en case mais de proche en proche: en cliquant sur une partie de l'image, le personnage vient se placer sur l'endroit cliqué. Ce qui fait que si le mur n'est pas trop épais (car s'il est assez épais pour ne pas pouvoir cliqué de l'autre coté du mur, il n'y a plus ce problême, mais l'image n'est vraiment pas super), le joueur passe de l'autre coté s'il veux.
Je veux juste un franchissement des murs impossible.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
C'est pareil. Crées des zones de coordonnées. Dans un tableau. TU gères bien les coordonnées de toutes manières, même si le déplacement se fait de proche en proche ?
Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009

oui a part que si une piece est 'autorisé' comme la cuisine, par exemle, qui est séparée du salon par un mur - interdit lui, on peut toujours aller dans la cuisine, mais on peut y aller sans forcement passer par la porte, puisque le point de chute, la cuisine est autorisé : le trajet n'est pas pris en compte. Voila d'ou vient le problême.
Messages postés
58
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
21 juin 2006

Et bien tes zones "interdites" sont les murs (ou portes ou pnj)et pas les pièces, ensuite tu peu faire des tests quand le gars clique à un endroit pour savoir si il y a une zone interdite entre la position du perso et la position du clic
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ahhhh.

Je ne vois pas comment tu peux faire, dans ce cas, sans monter un pathfinder. A savoir que ton bonhomme ne doit pas se déplacer d'un point A à un point B en passant par une ligne droite, mais en tenant compte du chemin autorisé le plus efficace pour effectuer ce trajet.
Et ça, dans un langage de script...bon courage.
Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009

non malam, ce n'est pas un generateur de trajet que je suhaite avoir, mais comme l'a dit PofMan, je veux juste connaitre s'il existe un mur entre le point de chute et le point de départ.
Quelle est la forme la plus simple de cette fonction "détection de murs" ?
Merci d'avance pour se que vous faites
Messages postés
58
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
21 juin 2006

t'as pas forcement besoin de faire du pathfinding (c vrai qu'en php ca doit être lourd enfin g jamais essayé non plus) mais simplement si en ligne droite tu doit passer pour aller de A a B par une zone interdite et ben tu fait pas de déplacement.

Comme ca en gros ben c le joueur qui fait le pathfinding (c vrai que ca peut être lourd à force mais sans pathfinding ni passer par les murs je vois pas trop)

Il y a aussi la possibilité de faire des tests avant chaque "pas" du perso s'il se déplace progressivement de A à B, mais je suis pas sur que ça soit mieu
Messages postés
55
Date d'inscription
mardi 6 juin 2006
Statut
Membre
Dernière intervention
20 janvier 2009

je crois que vous surestimer mes competences en php, le pathfinding n'est pas au programme avant un bon moment.
Je veux juste trouver les quelques ligns de codes qui disent:
s'il y a un mur entre le point de départ et le point d'arrivée, tu n'avance pas.
Et je crois que sous cette forme, c'est plus comprehensible:
Tant qu'il n'y a pas de mur entre le point d depart et un point A(x,y), on test la valeur de A'(x+1; f(x+1)).
Je me trompe?
Messages postés
58
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
21 juin 2006

Ben pour chaque mur tu peu stocker le point de début et le point de fin (en fait un mur=un segment) quand le gars clique qq part tu a un autre segment (position du perso->point de destination).

Après tu calcule s'il y a instersection entre le segment qui correspond au déplacement demandé et les segments de murs. Ca je me souvien plus comment faut faire mais y a une source qui le fait ici:
http://www.phpcs.com/code.aspx?ID=28401
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

Bon t'as p1(x1,y1), t'as p2(x2,y2), et t'as l'équation de ton mur y=px+q (ex y= 4x-3) avec L1<y<L2 et  L3<x<L4  (c'est un segment).

La droite y = ax + b est ta trajectoire(p1p2). 
il te faut donc trouver a et b donc:

y1=ax1 + b
y2 = ax2+b
tu résouds ces 2 equations à 2 inconnues(aetb): tu trouves l'équation de ta trajectoire(ex y=2x+3).
Ensuite tu cherche ton point d'intersection (systeme 2 equation 2 inconnues)
tq:
y=4x-3
y=2x+3
cas 1 :il ya intersection(1solution unique à ton eq)  :tu vérifies de quel coté du mur le point d'arrivée p2 se situe.dans ce cas 2 solutions  :
               1- il est du même coté par rapport au point p1: le déplacement est possible
               2-il est de l'autre coté par rapport au point p1: le déplacement est impossible
cas 2 : aucune solution à ton equation le déplacement est possible.
cas 3 : infinité de solution : déplacement impossible.
voilà c'est des maths de troisième ou de seconde.