Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
bz_
6 / 6 / 1
Регистрация: 10.04.2012
Сообщений: 31
#1

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

09.12.2012, 20:04. Просмотров 1922. Ответов 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):

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

Игра "угадай число" - PHP
блин люди помогите пожалуста никак программа мне эта покоя не дает как релализовать эту игру &quot;угадай число &quot; при помощи именно скрытых...

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

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

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

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

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

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


т.е. вы используете функцию которая выдает случаные числа и удивляетесь почему переменная каждый раз меняет значение?
Простите, ради всего святого! Я все это знаю, я бы хотел узнать, как сделать так, чтобы эти два фрагмента кода работали правильно, как мне нужно. Чтобы $attempts каждый раз увеличивался, а случайное значение $answer было присвоено единожды.
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 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 / 1
Регистрация: 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
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 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 / 1
Регистрация: 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
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 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
Робот может перемещаться в четырех направлениях (&quot;С&quot; - север, &quot;З&quot; - запад, &quot;Ю&quot; - юг, &quot;В&quot; - восток) и принимать три цифровые команды: 0 -...

Тысячные числа исправлять к примеру с "1200" на "1 200", "12000" на "12 000" и т.д - PHP
Собственно числа исправлять к примеру с &quot;1200&quot; на &quot;1 200&quot;, &quot;12000&quot; на &quot;12 000&quot;, &quot;120000&quot; на &quot;120 000&quot; и т. д. Входные данные: String,...

Не выполняется запрос, где переменная вида "число/число" (2013/2014) - PHP
Доброго времени суток. В общем из выпадающего списка GET запросом передаю переменную (2011/2012 или 2012/2013 или 2013/2014 ну и т.п.). И...

Игра "Шашки" на js(ajax) и php - PHP
Добрый день, хотел бы по обсуждать про реализацию игры в шашки, т.е. где по сети играют 2 человека. Мне интересны эти моменты: ...


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

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

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