JeuWeb - Crée ton jeu par navigateur
Comment gérer le placement de routes ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Comment gérer le placement de routes ? (/showthread.php?tid=1955)



Comment gérer le placement de routes ? - Arathor - 28-06-2008

Bonjour,
j'aimerais savoir si vous connaissez des méthodes pratiques pour réaliser le script que je vais vous détaillez.
Dans mon jeu, lors de la construction de leur ville, les joueurs sont amenés à construire (entre autre) des routes. Le problème, c'est que je dois faire en sorte que les tronçons de route s'orientent de façon cohérente. J'ai ainsi plusieurs tuiles de ce type (en admettant que ces choses grises représentent des routes... ConfusediffleSmile :

[Image: route1co4.jpg] [Image: route2ou2.jpg] [Image: route8yt8.jpg] [Image: route9ew4.jpg] [Image: route10hq8.jpg] [Image: route11gx4.jpg] [Image: route4da0.jpg] [Image: route5er1.jpg] [Image: route6jj8.jpg] [Image: route7qy8.jpg] [Image: route3av4.jpg]

Les routes ne pourront être construites qu'en ligne droite (grâce à un script en javascript, le joueur peut en placer plusieurs d'un coup) mais si 2 routes se croisent, c'est là que mon problème se pose.
Jusqu'ici, je me suis débrouillé pour faire ça avec des conditions du genre : si la route est placée horizontalement (on ne peut les placer qu'en ligne); si on se trouve tout en haut de la route ; si on à détecté un croisement etc...
Pour détecter les croisements d'ailleurs, j'utilise 2 boucles for, (une pour les X et une pour les Y) qui passent en revue toutes les cases de ma route plus une case autour.
Enfin bref, mes conditions finissent... par n'en plus finir :haha:

Donc voila, connaissez-vous une astuce ou une méthode plus simple que celle-ci ?


RE: Comment gérer le placement de routes ? - Nakano - 28-06-2008

J'aurais tout fait aussi avec ces conditions, même si c'est pas super clair.
Aprés faut peut être voir si on ne peut pas un peu réduire le code, a l'aide des booléens :
=> S'il y a possibilitée de poser une route ici, alors X=1
...=>Sinon X=0

Et a la fin du code faire une condition :
Si X==1
(fonction qui permet de mettre la route)
Sinon
(Fonction qui interdit de poser la route)

Sa utiliserais toujours les boucles et conditions, mais je pense que cela pourrais en quelque sorte généraliser la fonction "Autoriser ou non la création de la route".

Bon aprés je laisse la parole au plus expérimentés que moi xD


RE: Comment gérer le placement de routes ? - Arathor - 29-06-2008

Je vais essayer ta méthode Syndrom, ça m'a l'air intéressant Wink
Merci^^


RE: Comment gérer le placement de routes ? - keke - 30-06-2008

Syndrom a écrit :Autre cas :
[Image: route8yt8.jpg][Image: route2ou2.jpg]
Ce qui donne en binaire :
0011 et 1010, la somme donne :
1021
Tu as un deux dans le résultat, les routes se joignent correctement, c'est un placement valide.

Y'a de l'idée, mais l'exemple est faux ...

0011 et 1010 font effectivement 1021, mais j'ai indiqué en rouge la connexion entre tes 2 rues. La condition ne porte pas sur le chiffre 2 ..< Un exemple pour s'en convaincre ... supposons la rue 0011 [Image: route8yt8.jpg] et la rue 1100 [Image: route10hq8.jpg] ... techniquement les rues cohabitent, mais la somme fait 1111 >


RE: Comment gérer le placement de routes ? - keke - 30-06-2008

Hum ...

Je reviens à la charge. J'avais eu le même problème que toi et j'ai pas eu le temps de le développer sur mon jeu (j'étais encore sur Free, et le simple calcul de ligne droite provoquait un time out ^^)

L'idée est plutôt intéressante, mais, sans graphisme pour m'épauler, je vais avoir du mal à me faire comprendre. Sur magdales de plus, le problème était plus compliqué car je gérais aussi les déplacements en diagonale (enfin uniquement en théorie car la mise en pratique n'a jamais été aboutie.)
Bref, de base, je ne résonne pas en case, mais en intersection entre le centre d'une case. Ainsi, si tu as compris cette phrase tu comprendras que je n'ai que 2 types de tuiles : une tuile qui pars du centre d'une case et va horizontalement vers le centre d'une autre case ; la même tuile, orienté de 90° qui pars du centre d'une case, et va verticalement vers le centre d'une autre case. Il faut accepter cependant qu'une route s'arrête en milieu de case.

Avec cette méthode, tu va découvrir que les tests conditionnels sont extrêmement simple : Quatre Cas s'offrent à toi :
00 Pas de route
10 une route horizontale
01 une route verticale
11 La somme de ces 2 routes (est et sud).

La représentation de ces routes, tel que je l'imagine, serait affectée à une case (avec un système de coordonnée en X Y) et graphiquement serait décalé d'une demi case vers la droite et une demi case vers le bas.

Ainsi la table route pourrait ressembler à ceci (H = horizontale, V = verticale, et X Y les coordonnées)
H, V, X, Y
0 1 1 1
1 1 1 2
1 0 2 2
0 0 2 1

Représenterait un carré de 2 sur 3 dans lequel, une route descendrait entre toutes les cases à gauches, et une route partirait sur la droite

Kéké.
PS : si tu as un soucis de compréhension ... n'hésites pas à demander. Il me semble que les jeux comme SimCity et Transport Tycoon opèrent ainsi.