2017-09-12 2 views
2

나는 1과 100 사이의 무작위 ($secretNumber) 번호를 제기, 화면에 인쇄, 사용자가 버튼을 사용하여 양식을 인쇄하는 "높은" 'lower'또는 'correct'. 버튼을 누르면 외부 값이 그에 따라 변경되고 컴퓨터는 가장 낮은 값과 가장 높은 값 사이에서 다른 임의의 숫자를 발생시킵니다. 이것은 사용자가 올 바르고 게임이 재설정 될 때까지 계속됩니다. 버튼을 클릭 할 때마다 값이 재설정되지 않도록 세션을 사용하고 있습니다. 내 문제는 $_SESSION이 잠기기 전에 $secretNumber이 몇 번 리셋된다는 것입니다. $randomGuess 또한 업데이트 전에 잠그지 않는 것 같습니다.번호 추측 게임 PHP는 functoning

이것이 작동하지 않는 이유에 대한 의견이 있으십니까?

<?php session_start() ?> 

<?php 
$low = 1; 
$high = 100; 
//create a function to hold a random number, between 1 and 100 and save it 
//to a session variable. 
secretNumber(); 

function secretNumber(){ //********** secretNumber() ********** 
global $randomGuess; 
     if(!isset($_SESSION["secretNumber"])){ 
     $secretNumber = rand(1,100); 
     $_SESSION['secretNumber'] = $secretNumber; 
    } else { 
     $secretNumber = $_SESSION["secretNumber"]; 
     echo($_SESSION['secretNumber']); 
    } 

    echo 'Secret number is '.$secretNumber; 
    echo ' <br/> '; 
    }     //********** end secretNumber() *********** 

    //create a function to create a random guess as to the value of the 
    //first random number 

randomGuess(); 

function randomGuess() { //********** randomGuess() ********** 
global $randomGuess; 
global $low; 
global $high; 

if (isset($_SESSION['low'])){ 
     $low = $_SESSION['low']; 
} 
if (isset($_SESSION['high'])){ 
     $high = $_SESSION['high']; 
} 
    $randomGuess = round($high-(($high-$low)/2)); 
    echo 'Random guess is '.$randomGuess; 
    echo "<br/>"; 
    $_SESSION['randomGuess'] = $randomGuess; 
    }     // ********** end randomGuess() ********** 

//create a function to provide a response as to whether the guess is low, 
//high or correct, and adjust the limits of the random guess accordingly. 

checkGuess(); 

function checkGuess() { // ********** checkGuess() ********** 
global $low; 
global $high; 
global $randomGuess; 

// form to show a 'high' button, a 'low' button and a 'correct' button 
// Correct button needs to reset $_SESSION["secretNumber"], and start 
// process over. 

    print <<<HERE 
     <div> 
       <br/><br/><br/> 
       <form method = "post" action = "" style="width:35%; 
     padding-left:35%"> 
        <fieldset> 

         <button type = "submit" value="high" name ="high">Too High</button> <br/><br/> 
         <button type = "submit" value="low" name = "low">Too Low</button> <br/><br/> 
         <button type = "submit" value="correct" name = "correct">Correct</button> <br/><br/> 

        </fieldset> 
       </form> 
      </div> 
HERE; 

    if (isset($_POST['low'])) { 
       echo "low <br/>"; 
       echo "randomGuess = ".$randomGuess. "<br/>"; 
       unset($_SESSION["low"]); 
       $low = $randomGuess; 
       $_SESSION['low'] = $low; 
       unset($_SESSION["randomNumber"]); 
    } 
    if (isset($_POST['high'])){ 
       echo "high <br/>"; 
       echo "randomGuess = ".$randomGuess. "<br/>"; 
       unset($_SESSION["high"]); 
       $high = $randomGuess; 
       $_SESSION['high'] = $high; 
       unset($_SESSION["randomNumber"]); 
    } 
} //     ********** end checkGuess() ********** 

if (isset($_POST['correct'])){ 
      print <<<HERE 
      <h2>Yes I guessed the correct secret number. Your secret is out</h2> 
    HERE; 
     unset($_SESSION["secretNumber"]);// unset the random number as the guess was correct. 
      unset($_SESSION["high"]); 
      unset($_SESSION["low"]); 
     }//end if 

echo "low =".$low."<br/>"; 
echo "high =".$high." <br/>"; 

?> 

답변

0

$secretNumber이 세션과 동일한 지 확인하십시오.

var_dump($secretNumber);

모든 기능을 한 후

if($secretNumber != $_SESSION["secretNumber"]) { echo "Restart is here"; }

테스트를 그리고 당신은 문제가 무엇을 볼 수 있습니다.

+0

감사합니다. 나는 'global $ secretNumber;'를 추가했습니다. secretNumber() 함수와 var_dump에 표시된 값을 통해 전달 된 값을 비교합니다. 그러나 프로그램이 처음 실행될 때 $ secretNumber의 값은 첫 x ​​째 단추 누를 때 변경됩니다. random 버튼의 값은 높거나 낮은 버튼을 눌렀을 때 통과하지 않지만 $ low 또는 $ high에 놓인 값은 다음 추측입니다. –

+1

많은 시행 착오 끝에 var_dump()를 사용하여 각 단계에서 변수의 값을 확인한 후 randomGuess()에 함수 호출을 추가하여 '낮음'또는 '높음'버튼을 누른 후 다른 추측을하도록했습니다. 정확한 추측이 인식되었을 때 리셋을 추가 할 수 있습니다. 트릭은 프로그램을 통해 각 변수의 값을 따르는 것뿐만 아니라 약간의 측면적인 사고였습니다. –