Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
bz_
6 / 6 / 4
Регистрация: 10.04.2012
Сообщений: 31
#1

Игра "Угадай число"

09.12.2012, 20:04. Просмотров 2268. Ответов 8
Метки нет (Все метки)

Достаточно простая задача, да и мне стыдно задавать такой вопрос. Но, так как у меня ничего не получается, это мой единственный выход.
Я раньше программировал на C, там я бы все сделал, но здесь возникает проблема.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$number = $_REQUEST["number"];
$answer = rand(1, 10);
for ($attempts = 0; $attempts; $attempts++){
if ($attempts == 0) echo "Enter some value.";
if ($number > $answer) echo "Too big.";
if ($number < $answer) echo "Too small.";
if ($number == $answer){
echo "Yeah!!! You answered after $attempts attempts!";
break;
}
}
?>
Во-первых, переменная $attempts не изменяет своего значение — она всегда равна нулю.
Во-вторых, переменная $answer каждый раз меняет свое значение.
Подскажите, как исправить эти две проблемы. Просто я начал заниматься PHP лишь вчера поздней ночью и мне трудновато пока что.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 20:04
Ответы с готовыми решениями:

Игра "Угадай число", проблема с условием
Изучая PHP наткнулся на задачу, написал чтобы прога выполнялась, но как это...

Игра "угадай число"
блин люди помогите пожалуста никак программа мне эта покоя не дает как...

Игра "Угадай картинку" проверка ответа
Есть картинка и 4 кнопки с ответами, не могу понять как проверить правильный...

Список рейтинга для игры "Угадай число"
У меня есть игра &quot;Угадай число за 7 попыток&quot; Игра работает, все отлично. Мне...

Как реализовать игру на PHP "Угадай число"
составить игру на php угадай число На странице с формой пользователю...

8
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 20:07 #2
Как реализовать игру на PHP "Угадай число"
1
Rayden
12 / 12 / 3
Регистрация: 08.01.2012
Сообщений: 83
09.12.2012, 20:37 #3
for ($attempts = 0; $attempts; $attempts++){
а что это за условие такое интересное? Вы понимаете что цикл не выполнится ниразу?

Во-вторых, переменная $answer каждый раз меняет свое значение.
т.е. вы используете функцию которая выдает случаные числа и удивляетесь почему переменная каждый раз меняет значение?
0
bz_
6 / 6 / 4
Регистрация: 10.04.2012
Сообщений: 31
09.12.2012, 20:57  [ТС] #4
Цитата Сообщение от Rayden Посмотреть сообщение
а что это за условие такое интересное? Вы понимаете что цикл не выполнится ниразу?


т.е. вы используете функцию которая выдает случаные числа и удивляетесь почему переменная каждый раз меняет значение?
Простите, ради всего святого! Я все это знаю, я бы хотел узнать, как сделать так, чтобы эти два фрагмента кода работали правильно, как мне нужно. Чтобы $attempts каждый раз увеличивался, а случайное значение $answer было присвоено единожды.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 864
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.12.2012, 21:54 #5
Цитата Сообщение от bz_ Посмотреть сообщение
Я раньше программировал на C
Цитата Сообщение от bz_ Посмотреть сообщение
Я все это знаю, я бы хотел узнать, как сделать так, чтобы эти два фрагмента кода работали правильно, как мне нужно. Чтобы $attempts каждый раз увеличивался, а случайное значение $answer было присвоено единожды.
т.е. Вы программировали на C(++), но не знаете как сделать цикл? Не говорите глупостей..
C++
1
for ( int attempts = 0; /*здесь какое то условие с attempts*/ ; attempts++ )
тоже самое.
PHP
1
for ( $attempts = 0; /*здесь какое то условие с $attempts*/ ; $attempts++ )
цикл будет выполняться пока условие будет равно ИСТИНе. как только оно станет ЛОЖЬю - сразу же прервется выполнение.
PHP
1
2
3
4
5
for ( $attempts = 0; $attempts < 5 ; $attempts++ ) {
echo ' ', $attempts, ' ';
/* цикл выполнится пять раз, $attempts будет равна числам: 0, 1, 2, 3, 4 и после этого она увеличится до 5
при новом заходе в цикл проверяется условие: 5 < 5 - это ЛОЖЬ, цикл прерывается */
}
Добавлено через 1 минуту
а вот какое оно должно быть, это условие - это уже надо спрашивать у вас..

Добавлено через 2 минуты
Цитата Сообщение от bz_ Посмотреть сообщение
Чтобы $attempts каждый раз увеличивался, а случайное значение $answer было присвоено единожды.
чтобы увеличивался каждый раз - необходимо задать лимит, иначе просто произойдет зацикливание. Если это - Ваша цель, тогда проще использовать while
Случайное значение у вас и так один раз только присваивается - оно не в цикле.. ( и лучше использовать mt_rand() вместо rand() )

Добавлено через 5 минут
P.S.
Цитата Сообщение от bz_ Посмотреть сообщение
PHP
1
2
3
if ($number > $answer) echo "Too big.";
if ($number < $answer) echo "Too small.";
if ($number == $answer){
если число А не меньше числа Б, но также число А и не больше числа Б - то какой вывод? Верно, они равны. вот и ставьте вместо последнего if-а блок else.
0
bz_
6 / 6 / 4
Регистрация: 10.04.2012
Сообщений: 31
09.12.2012, 22:03  [ТС] #6
Цитата Сообщение от KOPOJI Посмотреть сообщение
т.е. Вы программировали на C(++), но не знаете как сделать цикл? Не говорите глупостей..
.......
тоже самое.
.........

цикл будет выполняться пока условие будет равно ИСТИНе. как только оно станет ЛОЖЬю - сразу же прервется выполнение.
.........
а вот какое оно должно быть, это условие - это уже надо спрашивать у вас..

чтобы увеличивался каждый раз - необходимо задать лимит, иначе просто произойдет зацикливание. Если это - Ваша цель, тогда проще использовать while
Случайное значение у вас и так один раз только присваивается - оно не в цикле.. ( и лучше использовать mt_rand() вместо rand() )

P.S.
если число А не меньше числа Б, но также число А и не больше числа Б - то какой вывод? Верно, они равны. вот и ставьте вместо последнего if-а блок else.
Спасибо за содержательный ответ. Кстати, что касается циклов, то я просто не указал break, как бы я поступил в C, но тут все равно как-то все по-другому работает, нужно привыкать. И цикл типа for (int i =0; i; i++) прекрасно работает, осуществляя роль вечного цикла, пока не будет break. Думал, также будет и здесь.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 864
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.12.2012, 22:18 #7
Цитата Сообщение от bz_ Посмотреть сообщение
осуществляя роль вечного цикла
тогда намного проще так)
PHP
1
while(true) { .... }
Добавлено через 1 минуту
в php из за неявных типов наверное там приводятся типы и получается 0 == false -> условие ложно, выходим

Добавлено через 37 секунд
не уверен, просто догадка, никогда "вечные циклы" таким образом не делал

Добавлено через 3 минуты
так нельзя сделать, как вы хотите.

Добавлено через 1 минуту
потому что в браузере будет виден уже результат работы скрипта, сервер (где и находится php-интерпретатор) к тому времени уже будет "курить в сторонке". Либо читайте о WebSockets, либо Comet и т.п.

Добавлено через 4 минуты
вообще, тут пару строчек, если конечно хотите - вот самый простенький вариант
PHP
1
2
3
4
5
6
7
8
9
10
11
<form method="POST">
  <input type="number" name="num">
  <input type="submit">
</form>
<?php
if(isset($_POST['num'])) {
   $num = (int) $_POST['num'];
   $rand = mt_rand(1, 10);
 
   echo ($rand === $num) ? 'Вы угадали' : 'Не угадали';
}
1
bz_
6 / 6 / 4
Регистрация: 10.04.2012
Сообщений: 31
09.12.2012, 23:15  [ТС] #8
Цитата Сообщение от KOPOJI Посмотреть сообщение
тогда намного проще так)
PHP
1
while(true) { .... }
Прости, я, вероятно, уже достал всех, но, правильно ответив мне на следующий вопрос, ты меня осчастливишь.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$number = $_REQUEST["number"];
if (empty($number)) $answer = mt_rand(1, 10);
else{
$attempts = 0;
while ($number != $answer){
if ($number > $answer){
echo "Too big.";
$attempts++;
}
elseif ($number < $answer){
echo "Too small.";
$attempts++;
}
}
echo "Yeah! You answered after $attempts attempts!";
}
?>
С таким кодом у меня ничего не получается. Сообщение "Too big" или "Too small", в зависимости от того, какое значение было присвоено $answer, после ввода в форму значения $number выводится бесконечное число раз. Вопрос: как сделать, чтобы программа работала корректно, то есть один раз выводила это сообщение и только один раз увеличивало значение $attempts после отправки формы.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 864
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.12.2012, 23:33 #9
такое обычно делается на сессиях/куках
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php session_start(); ?>
<!DOCTYPE HTML>
<html>
<head>
    <title>Guess the number</title>
</head>
<body>
<form method="post">
  <input type="number" name="num"><br />
  <input type="submit"><br />
</form>
 
<?php
if(isset($_POST['num'])) {
    $number = (int) $_POST['num'];
 
    if(!isset($_SESSION['answer'])
        $_SESSION['answer'] = mt_rand(1, 10);
    if(!isset($_SESSION['attempts']))
        $_SESSION['attempts'] = 1;
    
    if ($number > $_SESSION['answer']){
        echo 'Too big.';
        $_SESSION['attempts']++;
    }
    elseif ($number < $_SESSION['answer']){
        echo 'Too small.';
        $_SESSION['attempts']++;
    }
    else {
        echo 'Yeah! You answered after <b>', $_SESSION['attempts'], '</b> attempts!';
        session_destroy();
    }
}
?>
</body>
</html>
0
09.12.2012, 23:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 23:33

Программа "Угадай число"
Начал изучать PHP, буквально, два дня назад (HTML/CSS тоже), поэтому моя...

Игра угадай число
Помогите написать программу...уже целый день мучаюсь - никак не допрут, но...

Робот может перемещаться в четырех направлениях ("С" - север, "З" - запад, "Ю" - юг, "В" - восток) и принимать
Робот может перемещаться в четырех направлениях (&quot;С&quot; - север, &quot;З&quot; - запад, &quot;Ю&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru