|
Nouveau Membre du Club
Inscription : avril 2003 Messages : 201 Détails du profil  Informations forums : Inscription : avril 2003 Messages : 201 Points : 31 Points : 31
|
Merci pour ce lien, j'avais pourant bien fouillé dans google, mais celui là je ne l'avais pas vu.
Enfin maintenant j'ai tout fait avec ce code
Et j'ai un petit probleme : ce code marche, il me créé bien /temp/maze.png.
Mais maintenant comment l'afficher ?
J'ai essaye en mettant img src en dessous mais là ce ne marche plus...
merci !!
Citation:
<?php
header("Content-type:image/png");
error_reporting(E_ALL ^ E_NOTICE);
$urlphoto = $_POST['urlphoto'];
$LargeurImage = $_POST['LargeurImage'];
$XL = $_POST['XL'];
$YL = $_POST['YL'];
// *******************************************************************
// Test des valeurs entrées par l'utilisateur
// *******************************************************************
$LargeurImage=floor($LargeurImage);
$XL=floor($XL);
$YL=floor($YL);
if(!$LargeurImage or !$XL or !$YL) {
if(!$LargeurImage) print("Vous avez oublié de saisir la largeur de l'image.<br>");
if(!$XL) print("Vous avez oublié de saisir le nombre de cases horizontales du labyrinthe.<br>");
if(!$YL) print("Vous avez oublié de saisir le nombre de cases verticales du labyrinthe.<br>");
print("<a href=\"/maze_maker_1.php\">Retour</a>");
exit;
}
// *******************************************************************
// Définition des dimensions de la grille
// *******************************************************************
$Marge=20; // Largeur de la marge de l'image exprimée en pixels
$Unite=floor(($LargeurImage-(2*$Marge))/$XL); // Dimensions (largeur et hauteur) des cases, exprimées en pixels
// *******************************************************************
// Initialisation des fonctions décrivant l'état de la grille
// *******************************************************************
for($xc=1;$xc<=$XL;$xc++) {
$Hor[$xc][0]=1;
}
for($yc=1;$yc<=$YL;$yc++) {
$Ver[0][$yc]=1;
}
for($xc=1;$xc<=$XL;$xc++) {
for($yc=1;$yc<=$YL;$yc++) {
$Hor[$xc][$yc]=1;
$Ver[$xc][$yc]=1;
$Pos[$xc][$yc]=0;
}
}
$compteurCasesVis=0; // Compteur du nombre de cases visitées
// *******************************************************************
// Définition de la fonction TirN($n), retournant un tableau à n
// éléments, avec les valeurs 1 à n classées dans un ordre aléatoire.
// Cette fonction sera utilisée dans l'algorythme de création du
// labyrinthe.
// *******************************************************************
// Initialisation du générateur de nombres aléatoires
$t=time();
$p=getmypid();
mt_srand($t+$p);
function TirN($n) {
// Initialisation du tableau $tabVal (qui prend les valeurs 1 à n croissantes)
for($c=0;$c<=($n-1);$c++) {
$tabVal[$c]=$c+1;
}
// Création du tableau $tabRes (qui prend les valeurs 1 à n dans un ordre aléatoire)
for($d=($n-1);$d>=1;$d--) {
$al=mt_rand(0,$d);
$tabRes[$d]=$tabVal[$al];
$tabVal[$al]=$n+1;
sort($tabVal);
}
$tabRes[0]=$tabVal[0];
return($tabRes);
// Note : le tableau contient $n éléments. L'index du tableau débute à 0
}
// *******************************************************************
// Algorithme de création du labyrinthe (ajustement des valeurs $Hor,
// $Ver, $Pos)
// *******************************************************************
// -------------------------------------------------------------------
// Définition de la fonction galerie($x,$y)
// Cette fonction creuse une galerie à partir du point ($x,$y)
// en suivant les règles suivantes :
// - Le point ($x,$y) est marqué comme étant visité
// - Le compteur de cases visitées augmente d'une unité
// - Choix d'une direction H(1), D(2), B(3), G(4)
// - Si la case déterminée par cette direction existe, et n'a pas
// encore été visitée, on ajuste la valeur de la variable Hor ou Ver
// correspondante, et on ré-applique à nouveau la fonction galerie()
// -------------------------------------------------------------------
function galerie($x,$y) {
global $XL,$YL,$Hor,$Ver,$Pos,$compteurCasesVis,$comptt;
$comptt++;
if($Pos[$x][$y]==0) $compteurCasesVis++;
$Pos[$x][$y]=1;
$directionTab=TirN(4); // choix d'une direction H, D, B, G
for($c=0;$c<=3;$c++) {
$direction=$directionTab[$c];
if(($direction==1) and (($y>1) and ($Pos[$x][$y-1]==0))) {
$Hor[$x][$y-1]=0;
galerie($x,$y-1);
break;
}
if(($direction==2) and(($x<$XL) and ($Pos[$x+1][$y]==0))) {
$Ver[$x][$y]=0;
galerie($x+1,$y);
break;
}
if(($direction==3) and (($y<$YL) and ($Pos[$x][$y+1]==0))) {
$Hor[$x][$y]=0;
galerie($x,$y+1);
break;
}
if(($direction==4) and (($x>1) and ($Pos[$x-1][$y]==0))) {
$Ver[$x-1][$y]=0;
galerie($x-1,$y);
break;
}
}
}
// -----------------------------------------------------------------
// Lancement effectif du creusement des galeries
// -----------------------------------------------------------------
// Choix au hasard d'une première case pour le creusement de la première galerie
$x0=mt_rand(1,$XL);
$y0=mt_rand(1,$YL);
galerie($x0,$y0);
// définition de la fonction pointDep($x,$y), destinée à vérifier si oui
// ou non une case de coordonnées ($x,$y) peut être utilisée comme point
// de départ pour le creusement d'une nouvelle galerie
// (retourne 'vrai' si la case peut être utilisée comme point de départ)
function pointDep($x,$y) {
global $XL, $YL, $Pos;
$resTestCondition=($Pos[$x][$y]==1) and((($x>1) and ($Pos[$x-1][$y]==0)) or (($Pos[$x+1][$y]==0) and ($x<$XL)) or (($Pos[$x][$y-1]==0) and ($y>1)) or (($Pos[$x][$y+1]==0) and ($y<$YL)));
return $resTestCondition;
}
// Creusement du reste du labyrinthe :
// On répète le creusement de nouvelles galeries tant qu'il existe
// des cases non encore visitées
while($compteurCasesVis<$XL*$YL) {
$tabTirX=TirN($XL);
$tabTirY=TirN($YL);
for($xa=0;$xa<$XL;$xa++) {
$x=$tabTirX[$xa];
for($ya=0;$ya<$YL;$ya++) {
$y=$tabTirY[$ya];
if(pointDep($x,$y)) break;
}
if (pointDep($x,$y)) break;
}
galerie($x,$y);
}
// --------------------------------------------------------
// Touche finale : ouverture de deux portes sur l'extérieur
// --------------------------------------------------------
$Ver[0][1]=0; // En haut à gauche
$Ver[$XL][$YL]=0; // en bas à droite
// *******************************************************************
// Création de l'image au format png
// *******************************************************************
$idImage=imagecreate(($XL*$Unite)+(2*$Marge),($YL*$Unite)+(2*$Marge));
$couleur0=imagecolorallocate($idImage,255,255,255);
$couleur1=imagecolorallocate($idImage,0,0,0);
for($xc=1;$xc<=$XL;$xc++) {
if($Hor[$xc][0]==1) {
imageline($idImage,$Marge+(($xc-1)*$Unite),$Marge,$Marge+($xc*$Unite),$Marge,$couleur1);
}
}
for($yc=1;$yc<=$YL;$yc++) {
if($Ver[0][$yc]==1) {
imageline($idImage,$Marge,$Marge+(($yc-1)*$Unite),$Marge,$Marge+($yc*$Unite),$couleur1);
}
}
for($xc=1;$xc<=$XL;$xc++) {
for($yc=1;$yc<=$YL;$yc++) {
if($Hor[$xc][$yc]==1) {
imageline($idImage,$Marge+(($xc-1)*$Unite),$Marge+($yc*$Unite),$Marge+($xc*$Unite),$Marge+($yc*$Unite),$couleur1);
}
if($Ver[$xc][$yc]==1) {
imageline($idImage,$Marge+($xc*$Unite),$Marge+(($yc-1)*$Unite),$Marge+($xc*$Unite),$Marge+($yc*$Unite),$couleur1);
}
}
}
imagepng($idImage, 'temp/maze.png');
?>
|
|