2015-05-11 5 views
1

Я пытаюсь отобразить 3 кнопки отправки на странице в случайных позициях. Мне удалось это сделать. Теперь я создал три функции, которые генерируют координаты для этих кнопок, а также проверяют, что они не слишком много перекрываются с другими кнопками.Бесконечная петля?

Где-то в этих функциях я думаю, я создаю бесконечный цикл - но я не могу понять, почему это было бы дело ...

Вот код. Функции определяются и вызывают в заголовке.

<?php session_start(); ?> 
<html> 
    <head> 
     <style> 
      input[type='submit']{ 
       position: absolute; 
       width: 300; 
       height: 50; 
       color: white; 
       background: red; 
      } 
     </style> 
     <?php 

     $first=array(2,4,8,10); 
     $second=array(2,4,8,10); 

     $b=rand(0,3); 
     $c=rand(0,3); 

     $f=$first[$b]; 
     $s=$second[$c]; 

     $d=$f*$s; 
     $score=$_SESSION["score"]; 
     $name=$_SESSION["name"]; 

     function firstxy(){ 

     $x1=rand(0,500); 
     $y1=rand(0,500); 
     } 

     function secondxy(){ 
      $x2=rand(0,500); 
      $y2=rand(0,500); 
      if ($x2-$x1<30 ||$x1-$x2<30){ 
      secondxy(); 
     } 
      if ($y2-$y1<30 ||$y1-$y2<30){ 
      secondxy(); 
     }} 

     function thirdxy(){ 
      $x3=rand(0,500); 
      $y3=rand(0,500); 
      if ($x3-$x2<30 ||$x3-$x1<30||$x2-$x3<30||$x1-$x3<30){ 
      thirdxy(); 
     } 
      if ($y3-$y2<30 ||$y3-$y1<30||$y2-$y3<30||$y1-$y3<30){ 
      thirdxy(); 
     }} 

     firstxy(); 

     secondxy(); 

     thirdxy(); 
     ?> 
     </head> 
    <body> 

     <?php 

     echo $name." your score so far=".$score; 
     echo "<br>"; 
     ?> 

     <?php echo"Write the answer";?> 
     <br> 
     <?php echo $f."x".$s."=";?> 
    <form method= "post" action="submit.php"> 
     <input type="number" name=a value="0"> 
     <input type="hidden" name=b value=<?php echo $f;?>> 
     <input type="hidden" name=c value=<?php echo $s;?>> 
     <input type="submit" name=submit value=<?php echo $d;?>> 

     <input type="submit" id="btn" value=<?php echo $d;?>> 
    <input type="submit" id="btn2" value=<?php echo " Wrong answer";?>> 
    <input type="submit" id="btn3" value=<?php echo " Wrong answer";?>> 
    </form> 
    <script> 
      var btn = document.getElementById("btn"); 
//btn.style.top = Math.floor((Math.random() * 230) + 1) + "px"; 
//btn.style.left = Math.floor((Math.random() * 200) + 1) + "px"; 
btn.style.top = <?php echo $x1;?>+ "px"; 
btn.style.left = <?php echo $y1;?> + "px"; 

var btn2 = document.getElementById("btn2"); 
//btn2.style.top = Math.floor((Math.random() * 230) + 1) + "px"; 
//btn2.style.left = Math.floor((Math.random() * 200) + 1) + "px"; 
btn2.style.top = <?php echo $x2;?>+ "px"; 
btn2.style.left = <?php echo $y2;?> + "px"; 

var btn3 = document.getElementById("btn3"); 
//btn3.style.top = Math.floor((Math.random() * 230) + 1) + "px"; 
//btn3.style.left = Math.floor((Math.random() * 200) + 1) + "px"; 
btn3.style.top = <?php echo $x3;?>+ "px"; 
btn3.style.left = <?php echo $y3;?> + "px"; 
     </script> 

</body></html> 
+0

В 'secondxy' каталог' $ x1' всегда будет неопределенным. http://php.net/manual/en/language.variables.scope.php – chris85

+0

То же самое в третьем случае также –

+0

@ chris85 Итак, если я объявляю $ x1, $ y1 и т. д. сначала, вне функций, тогда объявляю они глобальны внутри функций ... он должен работать? – stilts77

ответ

2

Когда вы проверяете перекрытие, вы должны использовать abs(). Следующее условие всегда будет проходить, потому что один из $ x2- $ x1 или $ x1- $ x2 будет отрицательным (поэтому меньше 30).

if ($x2-$x1<30 ||$x1-$x2<30) 

Попробуйте сделать что-то вроде

if (abs($x2-$x1) < 30){ 
+0

Он всегда будет проходить, потому что $ x1 всегда неопределен. – chris85