Jump to content

'Guess a number' - Help with hidden fields and arrays


tangar
Go to solution Solved by ginerjm,

Recommended Posts

Hello! I'm rookie.

 

Please help me to solve problem with storing stuff in hidded fields for 'Guess a number' program:
 
https://hastebin.com/vomasuvere.xml
 
Why this...

if ($choice == 'big'){
print $guess[1]=($guess[0] / 2);
} elseif ($choice == 'small') {
print $guess[2]=($guess[0] + 25); 

...doesn't work?

 

p.s.

I know that it's the worst decision to use arrays and hidden fields in such program; but I've made decision to make it like this and can't drop it :) Please help!

 

p.p.s.

This is my live stream, how I made this program - https://www.youtube.com/watch?v=lLQ4J2JkO60 

Edited by tangar
Link to comment
Share on other sites

ginerjm, thank you very much! :D I though I had all errors on, but it seems NOTICE was off. With this:
error_reporting(E_ALL);
ini_set('display_errors', '1');
I saw notices:

Notice: Undefined index: $guess in C:\OpenServer\domains\localhost\php\17.php on line 6

Notice: Undefined index: $choice in C:\OpenServer\domains\localhost\php\17.php on line 7
Is your number 50?

 

So I understand that got troubles with forms.
 
And after I worked some time, I noticed that I got silly error:
$guess = $_POST['$guess'];
It has to be:
$guess = $_POST['guess'];
 
So, what I got now, it works as intended:
 
Thank you, guys!
Edited by tangar
Link to comment
Share on other sites

Here's the example code of your game. I will leave it up to you to improve it and make sure it does not repeat a number.

 

<?php

// game variables
$game_is_started     = false;
$game_is_won         = false;
$game_is_lost        = false;
$game_pc_guesses     = [];
$game_pc_range       = [];
$game_last_guess     = null;
$game_number_low     = 1;
$game_number_high    = 10;
$game_allow_guesses  = 5;
$game_total_guesses  = 0;
$game_p1_win         = 0; // computer
$game_p2_win         = 0; // player
// end game variables

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $game_number_low    = intval($_POST['number_low']);
  $game_number_high   = intval($_POST['number_high']);
  $game_allow_guesses = intval($_POST['allow_guesses']);
  $game_p1_win        = intval($_POST['p1_win']);
  $game_p2_win        = intval($_POST['p2_win']);

  if ($game_number_high < $game_number_low) {
    list($game_number_low, $game_number_high) = [
      $game_number_high, 
      $game_number_low, 
    ];
  }

  $game_is_started = true;
  
  if (array_key_exists('start', $_POST)) {
    $game_last_guess = mt_rand($game_number_low, $game_number_high);
  } else if (array_key_exists('last_result', $_POST)) {
    if (array_key_exists('pc_guesses', $_POST)) {
      $game_pc_guesses = array_map('intval', $_POST['pc_guesses']);
    } else {
      $game_pc_guesses = [];
    }
    
    $game_last_guess    = intval($_POST['last_guess']);
    $game_total_guesses = intval($_POST['total_guesses']) + 1;

    array_push($game_pc_guesses, $game_last_guess);

    if ($game_total_guesses > $game_allow_guesses) {
      $game_is_lost = true;
      $game_p2_win  = $game_p2_win + 1;
    } else {
      switch ($_POST['last_result']) {
        case 'bigger':
          $game_last_guess = ($game_last_guess === $game_number_high || ($game_last_guess + 1 === $game_number_high))
            ? mt_rand($game_number_low, $game_number_high)
            : mt_rand($game_last_guess + 1, $game_number_high);
          break;
        case 'smaller':
          $game_last_guess = ($game_last_guess === $game_number_low || ($game_last_guess - 1 === $game_number_low))
            ? mt_rand($game_number_low, $game_number_high)
            : mt_rand($game_number_low, $game_last_guess - 1);
          break;
        case 'won':
          $game_is_won = true;
          $game_p1_win = $game_p1_win + 1;
          break;
      }
    }
  }
}

?>

<h1>Computer: <?= $game_p1_win ?>, Player: <?= $game_p2_win ?></h1>

<?php if ($game_is_started && !($game_is_won || $game_is_lost)): ?>
  <form action="#" method="post">
    <fieldset>
      <input type="hidden" name="is_started" value="<?= $game_is_started ?>">
      <input type="hidden" name="number_low" value="<?= $game_number_low ?>">
      <input type="hidden" name="number_high" value="<?= $game_number_high ?>">
      <input type="hidden" name="allow_guesses" value="<?= $game_allow_guesses ?>">
      <input type="hidden" name="total_guesses" value="<?= $game_total_guesses ?>">
      <input type="hidden" name="last_guess" value="<?= $game_last_guess ?>">
      <input type="hidden" name="p1_win" value="<?= $game_p1_win ?>">
      <input type="hidden" name="p2_win" value="<?= $game_p2_win ?>">
      <?php foreach ($game_pc_guesses as $guess): ?>
        <input type="hidden" name="pc_guesses[]" value="<?= $guess ?>">
      <?php endforeach ?>
      <p>Is your number <?= $game_last_guess ?>?</p>
      <button type="submit" name="last_result" value="bigger">No, my number is bigger!</button>
      <button type="submit" name="last_result" value="won">Yup, that's my number!</button>
      <button type="submit" name="last_result" value="smaller">No, my number is smaller!</button>
    </fieldset>
  </form>
<?php else: ?>
  <?php if ($game_is_won): ?>
    <h2>I win! ^^</h2>
  <?php elseif ($game_is_lost): ?>
    <h2>You win!</h2>
  <?php endif ?>
  <form action="#" method="post">
    <fieldset>
      <input type="hidden" name="p1_win" value="<?= $game_p1_win ?>">
      <input type="hidden" name="p2_win" value="<?= $game_p2_win ?>">
      <h2>Hello, do you wanna play <?= $game_is_won ? 'another' : 'a' ?> game?</h2>
      <p>
        Yes, find my number between <input type="number" name="number_low" value="<?= $game_number_low ?>">
        and <input type="number" name="number_high" value="<?= $game_number_high ?>">.
      </p>
      <p>You have <input type="number" name="allow_guesses" value="<?= $game_allow_guesses ?>"> guesses.</p>
      <input type="submit" name="start" value="Play!" style="font-size:big">
    </fieldset>
  </form>
<?php endif ?>
  • Like 1
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.