','^','V'))){c($k,$y);} else{b();} }else{ $k=$x-1; if(in_array($c[$y][$k],array('-','+','S','<','^','V'))){c($k,$y);} else{b();} } break; case "|": if($e < $y){ $l=$y+1; if(in_array($c[$l][$x],array('|','+','S','>','<','V'))){c ($x,$l);} else{b();} }else{ $l=$y - 1; if(in_array($c[$l][$x],array('|','+','S','>','<','V'))){c ($x,$l);}else{b();} } break; case "^": case "V": case ">": case "<": d($c[$y][$x]); break; } } function d($m){ global $x,$y,$f,$g,$c; switch($m){ case "^": $k=$x; $l=$y -1; $n=array(" ","V","-","s"); break; case "V": $k=$x; $l=$y + 1; $n=array(" ","^","-","s"); break; case ">": $k=$x + 1; $l=$y; $n=array(" ","<","|","s"); break; case "<": $k=$x - 1; $l=$y; $n=array(" ",">","|","s"); break; default: break; } if(($k <0) OR ($l<0) OR ($k>$f) OR ($l>$g) OR (in_array($c[$l][$k],$n))){b();}else{ if(preg_match("/^[a-z]$/",strtolower($c[$l][$k]))){ echo "WIN: ".$c[$l][$k]."\n"; die; }else{c($k,$l);} } } function a($xCross,$yCross,$d,$e){ if(e($xCross,$yCross +1 ,$xCross,$yCross,$d,$e)){return array($xCross,$yCross +1);} elseif(e($xCross,$yCross -1 ,$xCross,$yCross,$d,$e)){return array($xCross,$yCross -1);} elseif(e($xCross-1,$yCross,$xCross,$yCross,$d,$e)){return array($xCross-1,$yCross);} elseif(e($xCross+1,$yCross,$xCross,$yCross,$d,$e)){return array($xCross+1,$yCross);} else{return false;} } function e($o,$p,$q,$r,$s,$t){ global $h,$f,$g,$c; if(($o < 0) OR ($p < 0) OR ($o >= $f) OR ($p >= $g)){return false;} if( ($c[$p][$o]==" ") OR (($o==$s)&&($p==$t)) OR (($o==$q)&&($c[$p][$o]=="-")) OR (($p==$r)&&($c[$p][$o]=="|")) OR ((isset($h[$q."-".$r])) && (in_array($o."-".$p,$h[$q."-".$r]))) ){return false;} return true; } function c($k,$l){ global $d,$e,$x,$y,$h,$c; if(($c[$y][$x]=='S')OR ($c[$y][$x]=='+')){ $h[$x."-".$y][]=$d."-".$e; $h[$x."-".$y][]=$k."-".$l; } $d=$x; $e=$y; $x=$k; $y=$l; echo "deplacement en ".$x.";".$y."\n"; } function b(){ global $x,$y,$d,$e,$f,$g,$h; foreach($h as $v => $u){ list($w,$z)=explode("-",$v); $aa=a($w,$z,-1,-1); if($aa){ c($w,$z); return true; } } echo "Aucun chemin n'est possible\n"; die; }