diff --git a/shikaku/gnieark/shi.php b/shikaku/gnieark/shi.php index 392d279..1dc7dac 100644 --- a/shikaku/gnieark/shi.php +++ b/shikaku/gnieark/shi.php @@ -15,7 +15,6 @@ function shikakugen($largeur,$hauteur,$nbeCarres){ //tirer en random l'aire de chaque carré $aireRestante=$largeur * $hauteur; for($i=1;$i<$nbeCarres;$i++){ - $aireOK=false; while($aireOK==false){ $aire=rand(2,$aireRestante - $nbeCarres + $i); @@ -24,21 +23,25 @@ function shikakugen($largeur,$hauteur,$nbeCarres){ if((in_array($aire,array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97))) && ($aire>$largeur) && ($aire>$hauteur)){ - //c'est un nombre premier don le seul carré posssible aura un coté =1 et l'autre coté= aire. si ce dernier coté est supérieur - //aux cotés de la grille, on ne pourra jamais le placer. - $aireOK=false; + /* + * C'est un nombre premier, donc le seul carré posssible aura un coté =1 et l'autre coté= aire. + * si ce dernier coté est supérieur aux cotés de la grille, on ne pourra jamais le placer. + */ + $aireOK=false; } } $aireParCarre[]=$aire; $aireRestante=$aireRestante-$aire; + //on remplit un passage un array contenant les diviseurs possibles de l'aire. $diviseurs[$aire]=trouveDiviseurs($aire); - } - //le dernier carré - if($aireRestante < 2){goto a;} + + //le dernier carré prend l'aire restante + if($aireRestante < 2){goto a;}//dans les regles de zigazou, carré de taille 1 interdit $aireParCarre[]=$aireRestante; $diviseurs[$aireRestante]=trouveDiviseurs($aireRestante); shuffle($aireParCarre); + foreach($aireParCarre as $carre){ //chercher la première position x,y libre for($y=0;$y<$hauteur;$y++){ @@ -73,13 +76,13 @@ function shikakugen($largeur,$hauteur,$nbeCarres){ $count++; } } - break 2; + break 2; //le carré est placé, sert à rien de tester les autres cases. } } } } if($largeurRetenue==0){ - //limpossibilité de placer le carré. retentons + //limpossibilité de placer le carré. retentons aec un autre tirage d'aires goto a; } }