begin process at 2012 05 30 17:49:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Divers

 > 

pathfinding A* en php?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pathfinding A* en php?

dimanche 29 avril 2007 à 14:28:50 | pathfinding A* en php?

franco_se

Membre Club
bonjour

je cherche un script en php de l'algo de pathfinding A*.
quelqu'un en a-t-il deja creer un ? ou si non, une idée pour le realiser ?

merci


dimanche 29 avril 2007 à 15:22:04 | Re : pathfinding A* en php?

coockiesch

Yop!
  Y'a l'air d'avoir un article pas torp mal ici: http://blog.lalex.com/post/2003/09/15/Traduction-:-article-sur-le-pathfinding-A

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
mardi 1 mai 2007 à 23:03:36 | Re : pathfinding A* en php?

franco_se

Membre Club
merci ça m'a permis de faire un script rapide .
mais bizarrement, il bug. c'est a dire que durant la recherche du chemin, il concidere comme la case "arrivée" atteinte ( or ça ne devrait pas etre le cas ), et je sais pas pq ! ( et ça m'enerve ! )

voila le script ( je l'ai fait rapidement, donc ne faites pas gaffe a l'horreur dos il s'agit lol )
relancez le plusieur foit ac F5, et vous verrez qu'il se plante de tps en tps ....

<?php

$tableau = array();

// largeur et hauteur du tableau
$largeur_tableau = 15;
$hauteur_tableau = 15;

// coodronnées de départ et d'arrivée
$depart = array(mt_rand(0, $largeur_tableau), mt_rand(0, $hauteur_tableau));
$arrivée = array(mt_rand(0, $largeur_tableau), mt_rand(0, $hauteur_tableau));

// si les coordonnées de départ et d'arrivée sont identiques
while ($arrivée == $depart) $arrivée = array(mt_rand(0, $largeur_tableau), mt_rand(0, $hauteur_tableau));

// creation des coordonnées de la case en cours
$coordonnées_courant = $depart ;

// création du tableau, et ttibution de valeur aux case ( 0=infranchissables; 1=franchissables )
for($i=0; $i<=$hauteur_tableau; $i++) for($j=0; $j<=$largeur_tableau; $j++) $tableau[$i][$j] = (mt_rand(0, 20)==0)?"0":"1";

// les cases de départs et d'arriovées ot une valeur de
$tableau[$depart['0']][$depart['1']] = "1";
$tableau[$arrivée['0']][$arrivée['1']] = "1";

// listes des cases explorées
$liste_cases_explorees = array();
$liste_cases_explorees[] = $depart['0'].'/'.$depart['1'];



// coordonnées des cases accessibles

// les 8 cases autour de la case en cours sont accessibles

//$cases_annexes = array(    array ('1', '1', '1', '0', '0', '-1', '-1', '-1'),
//                        array ('-1', '0', '1', '-1', '1', '-1', '0', '1'));

// seules les 4 case de haut , de bas, a gauche et a droite sont accessibles
$cases_annexes = array(    array ('0', '1', '-1', '0'), array ('1', '0', '0', '-1') );


$stop=0;

//boucle  du pathfinding
// elle ne s'arrete que si la case d'arrivé est atteinte, ou apres 100 boucles

while(($coordonnées_courant['0'] != $arrivée['0'] && $coordonnées_courant['1']!=$arrivée['1']) && $stop <= "100"){

$stop++;

$f = array() ;

// analyse des cases autour de la case en cours

for ($k=0; $k<=(count($cases_annexes['0'])-1); $k++){

 $x_case_annexe = ( $coordonnées_courant['0']+$cases_annexes['0'][$k] );
 $y_case_annexe = ( $coordonnées_courant['1']+$cases_annexes['1'][$k] );


 if($tableau[$x_case_annexe][$y_case_annexe]=="1" && !in_array($x_case_annexe .'/'. $y_case_annexe, $liste_cases_explorees )){

// calcul de la distance de la case en cour a la case annexe en cours d'analyse
  $dist_origine_case_annexe_x = abs( ($coordonnées_courant['0']+$cases_annexes['0'][$k]) - $coordonnées_courant['0']);
  $dist_origine_case_annexe_y = abs( ($coordonnées_courant['1']+$cases_annexes['1'][$k]) - $coordonnées_courant['1']);

  $g =  sqrt(($dist_origine_case_annexe_x*$dist_origine_case_annexe_x)+($dist_origine_case_annexe_y*$dist_origine_case_annexe_y)) ;


// calcul de la distance de la case annexe en cours d'analyse et du point d'arrivé
  $dist_final_case_annexe_x = abs( ($coordonnées_courant['0']+$cases_annexes['0'][$k]) - $arrivée['0']);
  $dist_final_case_annexe_y = abs( ($coordonnées_courant['1']+$cases_annexes['1'][$k]) - $arrivée['1']);

  $h  =  sqrt(($dist_final_case_annexe_x*$dist_final_case_annexe_x)+($dist_final_case_annexe_y*$dist_final_case_annexe_y)) ;


$f[] = array( ($g+$h), $x_case_annexe, $y_case_annexe) ;


 }
 
 
}
// tri des valeurs par distance ascendantes
 sort($f);
 
// selection de la case la plus proche du point d'arrivé
$coordonnées_courant['0'] = $f['0']['1'];
$coordonnées_courant['1'] = $f['0']['2'];

$liste_cases_explorees[] =  $coordonnées_courant['0'] .'/'.$coordonnées_courant['1'] ;

 
}

// affichage de la liste des cases explorées
echo '<pre>';
print_r($liste_cases_explorees);
echo '</pre>';

?>

<table>
<?php
// affichage du talbeau

for($i=0; $i<=$hauteur_tableau; $i++) {
 echo '<tr>';
 for($j=0; $j<=$largeur_tableau; $j++){
  echo '<td  style="background-color:#';
 if ($tableau[$i][$j] ==0) echo "FF0000";
 elseif ($depart['0']==$i && $depart['1']==$j ) echo "00FF00";  
 elseif ($arrivée['0']==$i && $arrivée['1']==$j ) echo "0000ff";
 elseif  (in_array($i.'/'.$j, $liste_cases_explorees) ) echo "ffff00";
 
 echo ' ">';
 if ($depart['0']==$i && $depart['1']==$j ) echo "depart";  
 elseif ($arrivée['0']==$i && $arrivée['1']==$j ) echo "arrivée";
 else echo $i. '/'. $j ;
 echo '</td>';
 }
 echo '</tr>';
}

?>
</table>


Cette discussion est classée dans : php, pathfinding


Répondre à ce message

Sujets en rapport avec ce message

Comment tester les fichiers PHP [ par Clem ] Comment tester les fichiers PHP sans les publier sur son site ? Dans le genre de PWS avec l'asp PWS version PHP ! [ par Clem ] J'ai trouvé un PWS en mieux, et pour le PHP !Sur http://www.easyphp.org/, il suffit de télécharger la dernière version (8Mo) et de l'installer.L'avant comment faire avec pws [ par arnaud ] voila je veux me mettre au PHP je sais que je peux faire fonctionner PWS comme server pour PHP mais je trouve rien Alors pour ceux qui sont te,nte ai Developpeur PHP rechercher. [ par Trafalio BlackHammer ] Bonjour, je recherche un bon developpeur PHP, MySQL. Veuillez me contacter a trafalio@godsoft.orgMerci statistiques ,graphique, php et mysql [ par mouss ] connaissez vous des exemples mettant en oeuvre une base de donnée mysql ,php permettant de créer des courbes, nuages de points sur une feuille html (p Extensions de PHP [ par zerg ] je sais que l'on peut ajouter des extensions en php, ses propres extensions ou celle telechargeables mais difficiles a trouver.... ==> ces extensions Mail et recup [ par H@lloWin___HiA ] SalutJe sais envoyé un mail avec un script PHP sur un serveurMais peut on envoyer un mail depuis un script qui serait ds localhost (easy php)Le proble Comment fait t-on pour executer des pages php [ par Arnaud ] merci Urgent svp !!! [ par Clem ] Comment récupérer le nom d'un fichier a partir de son adresse internet ?(Par exemple obtenir le nom dex.php a partir de http://localhost/dex.php) Démarrage sous PHP. [ par SurfSilver ] Salut à tous.JE me suis m'y cette semaine à Php dans l'espoir de concevoir une appli en base de donnée. Cet avec interet que j'essaierai de donner mes


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,997 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales