JeuWeb - Crée ton jeu par navigateur
[Résolu] Possibilité de mouvement avec case et obstacles - 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 : [Résolu] Possibilité de mouvement avec case et obstacles (/showthread.php?tid=2501)

Pages : 1 2 3


RE: possibilité de mouvement, avec case, et obstacles. - uriak - 28-02-2008

Cela dit tout comme Roworll l'a dit j'ai mis le frein sur le pathfinding. Pour le moment mes échanges se font avec une portée de 1 (quoi qu'une portée de 2 pourrait être codée facilement en dur)
Je vais sans doute le reprendre dans mon éditeur de monde, pour calculer des graphes de connectivité en dur (la notion de blocage ou pas sera ne variera pas) mais pour des obstacles mobiles, on ne peut pas y couper.

Sinon pour les tirs, il est de loin plus facile de tester une ligne droite à l'entrée dans une zone que de vérifier toute la zone. Mais si tu dois indiquer les portées pour information, et que les éléments ne se déplacent pas trop trop souvent, alors faire cette recherche a un sens.


RE: possibilité de mouvement, avec case, et obstacles. - Ludvig - 29-02-2008

Ce qu'il te faut c'est l'algorithme de Dijkstra.

Ou la première partie :
calculer tout les couts à partir d'une case (avec un max de 10 par exemple).

Après t'as les cases où tu peut aller (avec leur cout).

J'ai ça dans mon jeu et ça marche plutôt bien, enfin c'est un algo n² alors faut pas calculer des distances longues.


/Ludvig


RE: possibilité de mouvement, avec case, et obstacles. - Argorate - 29-02-2008

un algo n²?
oui j'ai pensé faire un truc comme ça: je part de mon perso, je prend les case autour et je leur donne pour valeur 1, puis je prend celle autour n'ayant ni un chiffre ni étant la case de depart et je met un 2 etc jusqu'a arrivé a 10, ça peut etre bien?


RE: possibilité de mouvement, avec case, et obstacles. - Ludvig - 29-02-2008

C'est exactement cela !

Facile & rapide Smile

Attention juste si tu veut un jour mettre des couts différents selon la case traversés (route=1, boue=3, foret=6 etc)
alors là il faut faire les calcules dans l'ordre :
On commence avec la case de début dans une liste et tant que la liste est pas vide :
on sors le plus petite valeur et on regarde autour si (comme t'as dit) ils ont pas un chiffre OU que le chiffre est
plus grand (on a trouve un autre chemin plus longue mais au moindre cout) alors on insère la nouvelle case
dans la liste (dans le bonne position) et on continue.

Enfin l'aglo dijkstra quoi Smile


sinon un O=n² c'est un algo qui coute (en temps d'exécution "CPU") beaucoup plus pour une grande valeur (ici la vue) que pour une petite (enfin simplement dit).
Dans ton jeu, si on compare une vue de 10 avec une vue de 20 on a
potentiellement 441 cases pour le premier et 1681 pour le deuxième
malgré le fait que le deuxième vue n'est que deux fois plus grand.


/Lud


RE: possibilité de mouvement, avec case, et obstacles. - Argorate - 29-02-2008

ok j'ai compris, je vais esseyer de coder ça, je vous tien au courant, merci bien.


RE: possibilité de mouvement, avec case, et obstacles. - genosite - 01-03-2008

Tien un algo que j'ai fait pour un jeu Tu doit l'améliorer.
Attention il est en javascript.

Code :
this.case_action = function()
{
for(k = 1; k <= champ_action; k++)
{
case_adj += (1+1)+'|'+(pos_j[0])+','+(pos_j[1] - k)+'|'+(pos_j[0])+','+(pos_j[1] + k)+'|'+(pos_j[0] + k)+','+(pos_j[1])+'|'+(pos_j[0] - k)+','+(pos_j[1])+'|'+(pos_j[0] - k / 2)+','+(pos_j[1] - k / 2)+'|'+(pos_j[0] + k / 2)+','+(pos_j[1] + k / 2)+'|'+(pos_j[0] - k / 2)+','+(pos_j[1] + k / 2)+'|'+(pos_j[0] + k / 2)+','+(pos_j[1] - k / 2)+'|';
}
tbl_final = case_adj.split('|');
return tbl_final;
}
pos_j = position actuelle du joueur.
champ_action = le nb de case ou il peut se déplacer.


RE: possibilité de mouvement, avec case, et obstacles. - Argorate - 01-03-2008

cette algo ne marche pas, les divisions donne des coordonnées a virgule.. sans compter le +2 qui se balade "case_adj += (1+1)+..."
je comprend pas bien se que sa doit faire.


RE: possibilité de mouvement, avec case, et obstacles. - genosite - 01-03-2008

le 1+1 sert pour initialiser ma map.
sinon pour les valeur a virgule je les enlève apres dans la génération de la map.


RE: possibilité de mouvement, avec case, et obstacles. - Argorate - 01-03-2008

le probleme c'est que sa donne pas du tout se que je veux ^^

bref, je suis sur un putain de code et j'arrive pas vraiment a m'en sortir là... 300 ligne de JS -_-'


RE: possibilité de mouvement, avec case, et obstacles. - genosite - 01-03-2008

300 lignes c'est que le debut. dans pas longtemps tu va toucher les 1000 lignes.