За последние 24 часа нас посетили 22518 программистов и 1207 роботов. Сейчас ищет 721 программист ...

Игра про числа на PHP

Тема в разделе "PHP для новичков", создана пользователем orte0, 24 сен 2017.

  1. orte0

    orte0 Новичок

    С нами с:
    24 сен 2017
    Сообщения:
    4
    Симпатии:
    0
    Всем доброго времени суток!
    Никак не могу разобраться с такой задачей:
    Компьютер загадывает число от 1 до n. У пользователя k попыток отгадать. После каждой неудачной попытки компьютер сообщает меньше или больше загаданное число. В конце игры текст с результатом (или “Вы угадали”, или “Попытки закончились”).
    Источник: http://www.itmathrepetitor.ru/programmirovanie-zadachi-alg/
    Написал индекс-файл index.php с формой, которая кидает число из поля на файлик test.php и получает ответ в виде html текста.
    Вопрос в следующем: как организовать счётчик текущей попытки игрока?
    пробовал уже колдовать с сессией и куками. короче иссяк. Прошу помочь, если кто знает как решить. Заранее спасибо!
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    С этого места пожалуйста поподробней.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ты код покажи, как сессией делаешь.
     
  4. orte0

    orte0 Новичок

    С нами с:
    24 сен 2017
    Сообщения:
    4
    Симпатии:
    0
    Спасибо друзья, я всё решил!

    Код (Text):
    1. <?php
    2. session_start();
    3. $attempts = 1;
    4. $max = 100;
    5. $number = rand(0,$max);
    6.  
    7. $answer = $_POST['answer'];
    8. $state = '';
    9.  
    10. $antipattern = '/[^0-9]/';
    11.  
    12.  
    13. if($_SESSION['attempt']>=$attempts){
    14.    $_SESSION['attempt'] = 0;
    15.    $_SESSION['number'] = ++$number;
    16.    $state = 'Попытки закончились!';
    17. }
    18. else{
    19.    if(preg_match($antipattern, $answer) == 1){
    20.      $state = 'Вовсе не число!';
    21.    }
    22.    elseif($answer>$max||$answer<0){
    23.      $state = 'Не лежит в диапазоне от 0 до '.$max.'!';
    24.    }
    25.    elseif($answer>$_SESSION['number']){
    26.      $state = 'Немного больше чем нужно!';
    27.      $_SESSION['attempt'] = ++$_SESSION['attempt'];
    28.    }
    29.    elseif($answer<$_SESSION['number']){
    30.      $state = 'Немного меньше чем нужно!';
    31.      $_SESSION['attempt'] = ++$_SESSION['attempt'];
    32.    }
    33.    elseif($answer==$_SESSION['number']){
    34.      $_SESSION['attempt'] = 0;
    35.      $state = 'В точку! Вы победили! Введите новое число и начните игру!';
    36.      $_SESSION['number'] = ++$number;
    37.    }
    38.  
    39. }
    40.  
    41. echo 'Номер попытки: '.$_SESSION['attempt'].'</br>';
    42. echo 'Ваш предыдущий ответ: '.$answer.'</br>';
    43. echo 'Ваше число: '.$state.'</br>';


    Оказалось, что можно инкрементить ячейку в массиве сессий, даже если ее ещё не существует следующим способом:
    $_SESSION['attempt'] = ++$_SESSION['attempt'];
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Код не решает той задачи, которая поставлена. Он будет загадывать новое число при каждом запуске, поэтому подсказки не имеют значения, всё равно хрен отгадаешь :) Он должен один раз по задаче загадать число, и дать n попыток, чтобы отгадать.
     
  6. orte0

    orte0 Новичок

    С нами с:
    24 сен 2017
    Сообщения:
    4
    Симпатии:
    0
    Так и работает. Просто генерит каждый запуск, а записывает только в первый.

    Ну то есть, когда идёт вторая попытка или третья или четвёртая, то ответ сравнивается всё равно с числом, которое было загадано в начале. Новое число задается только после того как попытки закончились, либо после того как было отгадано предыдущее число.
     
  7. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Вот так будет лучше:
    PHP:
    1. if(!is_numeric($answer)){
    2.      $state = 'Вовсе не число!';
    3.    }
     
  8. orte0

    orte0 Новичок

    С нами с:
    24 сен 2017
    Сообщения:
    4
    Симпатии:
    0

    О, спасибо. Не знал просто такой функции. Но по сути у меня в регулярке тоже самое