Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Создание игры "Угадай число" [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2] 

> Описание: Это мой первыйй урок,он посвящён созданию примитивной игры.
DeathStalker
Отправлено: 19 Августа, 2010 - 12:59:53
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2010  
Откуда: Ростов на Дону


Помог: 0 раз(а)




Вот моя первая самостоятельная программа. Никуда не подглядывал. Закатив глазки Это было задание из одного самоучителя. Так уж вышло что это задание совпало с вашим. Выкладываю как альтернативное решение:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $randF = $_POST['rand'];
  5. $dijit = $_POST['dijit'];
  6. $I = $_POST['i'];
  7.  
  8. logica();   //логические опирации программы
  9. inter();    //функция хранения данных, т. к мы не используем базы данных.
  10.              //в данном случае используются скрытые поля hidden.
  11.  
  12. function logica(){
  13. global $dijit, $rand, $randF, $i, $I;
  14. if (empty($dijit)) {
  15.         $i = 1;
  16.         $rand = rand(1, 100);
  17.         echo "<H1>Введите число от 1 до 100</H1>";
  18. } elseif ($dijit > 100 or $dijit < 1) {
  19.         echo "<H1>Введите пожалуйста корректные данные</H1>!";
  20. }elseif ($dijit > $randF) {
  21.         echo "<H2>Ваше число слишком велико, попробуйте еще</H2>";
  22.         $rand = $randF;
  23.         $I++;
  24.         $i = $I;
  25. } elseif ($dijit < $randF) {
  26.         echo "<H2>Ваше число слишком мало, попробуйте еще</H2>";
  27.         $rand = $randF;
  28.         $I++;
  29.         $i = $I;
  30.  
  31. } else {
  32.         echo "<H1>Подравляю вы угадали! Вам понадобилось $I попыток.</H1>";
  33. } //закрываем цикл if
  34. }//закрываем функцию logica()
  35.  
  36. function inter(){
  37. global $digit, $rand, $i, $I;
  38. echo <<<here
  39.         <form method="post">
  40.         <input name="dijit" type="text" value="">
  41.         <input type="hidden" name="rand" value = $rand>
  42.         <input type="hidden" name="i" value = $i>
  43.         <input type="submit" value="Send">
  44.         </form>
  45. here;
  46. }
  47. ?>
  48.  


Данная программа позволяет пользователю угадывать одно и тоже число мого раз и считает сколько на это ушло попыток. Если кому нибудь нужно будет подробнее объясню Улыбка
 
 Top
Libiros
Отправлено: 26 Августа, 2010 - 17:06:55
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Мне тоже пришла в голову мысль сделать такую игру.
Но у меня она немного отличается:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $a = mt_rand(10, 100);
  3. echo "Я загадал число от <b>10</b> до <b>100</b>. Попробуй его угадать.<br><br>";
  4. echo "<form action=3.php method=post>";
  5. echo "Ввод: <input type=text name=number maxlen=2><input type=hidden name=a value=$a><br>";
  6. echo "<br><input type=submit value=send></form>";
  7. ?>

И следующий файл:
PHP:
скопировать код в буфер обмена
  1. define("a",$a);
  2. if ($number==$a) {echo "<div align='center'><font color='green' size='4'><b>Правильно! :)</font></b> <br><br>"; echo "<a href='2.php'>Сыграть ещё раз</a>";}
  3. elseif (($number>($a-10))&&($number<($a+10))) {echo "<div align='center'><font color='orange' size='4'><b>Неправильно, но ты уже рядом :)<br><br>";
  4. echo "<form action=3.php method=post>";
  5. echo "Ввод: <input type=text name=number><input type=hidden name=a value=$a><br>";
  6. echo "<br><input type=submit value=send></form>";}
  7. else {echo "<div align='center'><font color='red' size='4'><b>Неправильно. Попробуй ещё раз<br><br></font>";
  8. echo "<form action=3.php method=post>";
  9. echo "Ввод: <input type=text name=number><input type=hidden name=a value=$a><br>";
  10. echo "<br><input type=submit value=send></form>";}
  11. ?>


Строго не судите. Писал её ещё тогда, когда дошёл до главы if Улыбка
 
 Top
Yashko
Отправлено: 01 Сентября, 2010 - 16:29:41
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)

[+][+]


Libiros А вы как учитесь? Через самоучитель? Можно ссылку, или чтонебудь)
 
 Top
But
Отправлено: 24 Января, 2011 - 19:44:12
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




У меня не запускается игра. Игра на беспл. Хостинге . Там все как надо есть надпись выбири число , патом там есть калонка с числами но она не открывается. И нет кнопки Играть! . Не подскажите из за чего ? Код как у афтора темы.
 
 Top
3d quattro
Отправлено: 01 Февраля, 2011 - 17:43:01
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




But,код кнопки есть.<input ..../> - разве не кнопка?Попробуйте не тупо копировать ХТМЛ,а написать свой,на основе этого.Если что-то не работает,то не надо обвинять ни в чём автора(это уже не к вам,а так,в общем),а просто перепроверить код.И,кстати,если не секрет,скажите что за хостинг.

(Отредактировано автором: 01 Февраля, 2011 - 17:44:18)



-----
Is there saberfighters?
 
 Top
ValentO
Отправлено: 02 Февраля, 2011 - 17:30:15
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Простите пожалуйста я новичек в этом,но у меня желание это все выучить и понять.
А почему после финального результата,когда обновляеш страницу он выбивает разные результаты? Улыбка
 
 Top
3d quattro
Отправлено: 07 Февраля, 2011 - 16:58:17
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Насколько хватает моего небольшого понимания великого PHP,то мне кажется что при обновлении обновляется скрипт,а переменная в массиве ПОСТ остаётся,вот поэтому и разные рез-таты.


-----
Is there saberfighters?
 
 Top
t0h0
Отправлено: 15 Марта, 2011 - 23:17:41
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




А вот мой php код игры угадай число от 1 до 5 (значение можно менять от 1 до 100 наример), тока и условия там некоторые надо будет изменить. Код длинный но за то очень простой начинающему легко его понять.
PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title>Угадай число</title>
  4. </head>
  5. <body>
  6. <form>
  7. <?PHP
  8. if (empty($r))
  9. {
  10. $r=rand(1,5);
  11. echo <<<here
  12. Компьютер загадал число от 1 до 5,
  13.        <input type = "hidden"
  14.               name = "r"
  15.               value = "$r"
  16.               size = "3"><br>
  17. Отгадайте число число:
  18. <input type = "text"
  19.        MAXLENGTH = "3"
  20.        size = "3"
  21.        name = "d"
  22.        value = "">
  23. <input type = "submit"
  24.        value = "Отгадать">
  25. here;
  26. }
  27. else
  28. {
  29. if ($d >5 or $d <1)
  30. {
  31. echo <<<here
  32. Введите числа в диапозоне от 1 до 5<br>
  33.         <input type = "submit"
  34.         value = "Еще раз"><br>
  35. here;
  36. }
  37. else
  38. {
  39. if ($r==$d)
  40. {
  41. echo <<<here
  42.        Числа равны,Вы угадали<br><br>
  43. <input type = "submit"
  44.        value = "Играть снова">
  45. here;
  46. }
  47. else
  48. {
  49. if ($d > $r)
  50. {
  51. echo <<<here
  52. Ваше число больше загаданного, введите другое число:<br><br>
  53. <input type = "text"
  54.        size = "3"
  55.         MAXLENGTH = "3"
  56.        name = "d"
  57.        value = "">
  58. <input type = "submit"
  59.         value = "Еще раз"><br>
  60.        <input type = "hidden"
  61.        name = "r"
  62.        value = "$r"><br>
  63. here;
  64. }
  65. else
  66. {
  67. echo <<<here
  68. Ваше число меньше загаданного, введите другое число:<br><br>
  69. <input type = "text"
  70.        size = "3"
  71.         MAXLENGTH = "3"
  72.        name = "d"
  73.        value = "">
  74. <input type = "submit"
  75.         value = "Еще раз"><br>
  76.        <input type = "hidden"
  77.        name = "r"
  78.        value = "$r"><br>
  79. here;
  80. }
  81. }
  82. }
  83. }
  84. ?>
  85. </form>
  86. </body>
  87. </html>

(Отредактировано автором: 15 Марта, 2011 - 23:23:25)

 
 Top
OrmaJever
Отправлено: 16 Марта, 2011 - 00:12:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP session_start();?>
  2. <html>
  3. <head>
  4. <title>Угадай число</title>
  5. </head>
  6. <body>
  7. <?PHP
  8. $max = 2;
  9. $_POST['d'] = isset($_POST['d']) ? (int)$_POST['d'] : 0;
  10. if (!isset($_SESSION['num'])) :
  11. $_SESSION['num'] = rand(1, $max);
  12. ?>
  13. <form method="post">
  14. Компьютер загадал число от 1 до <?=$max?>,<br>
  15. Отгадайте число число:
  16. <input type="text" MAXLENGTH="3" size="5" name="d">
  17. <input type="submit" value="Отгадать">
  18. </form>
  19. <?PHP
  20. elseif($_SESSION['num'] == $_POST['d']) :
  21. unset($_SESSION['num']);
  22. ?>
  23. Числа равны,Вы угадали<br><br>
  24. <input type="submit" onclick="location.reload();" value="Играть снова">
  25. <?PHP
  26. else :
  27. unset($_SESSION['num']);
  28. ?>
  29. числа не угаданы!<br><br>
  30. <input type="submit" onclick="location.reload();" value="Играть снова">
  31. <?PHP
  32. endif;
  33. ?>
  34. </form>
  35. </body>
  36. </html>

(Отредактировано автором: 16 Марта, 2011 - 00:12:53)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
valdislav
Отправлено: 05 Октября, 2012 - 21:57:37
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title>Покер дайс</title>
  4. <style type="text/css">
  5. body {
  6.         background: gray;
  7.         color: tan;
  8.         }
  9. </style>
  10. </head>
  11. <body>
  12. <center>
  13. <h1>Угадайка</h1>
  14. <form>
  15. <?
  16. $number = $_GET[number];
  17. $userChoise = $_GET[userChoise];
  18. $roll = $_GET[roll];   
  19. function printNumber() {
  20.                 global $number, $roll;
  21.                 $roll++;
  22.                 print "УгадайКа<br>";
  23.                 //Save hidden
  24.                 print <<<HERE
  25.                 <input type = "hidden" name = "roll" value = "$roll">
  26.                 <input type = "hidden" name = "number" value = "$number">
  27.                 <input type = "text" name = "userChoise" maxlength = "3" size = "3" value = ""><br>
  28.                 <input type = submit value = "KnOPKA">
  29. HERE;
  30. }
  31. if (empty($number)) {
  32.         $number = rand(1,100);
  33. }
  34. else {
  35.         if ($userChoise < $number) {
  36.         print "Ваша цифра меньше загаданной<br>";
  37.         }
  38.         elseif ($userChoise > $number) {
  39.         print "Ваша цифра больше загаданной<br>";
  40.         }
  41.         elseif ($userChoise == $number) {
  42.         print "<h1>ВЫ УГАДАЛИ за $roll попыток</h1><br>";
  43.         }
  44.         else {
  45.         print "Чтото не так<br>";
  46.         }
  47. }
  48. printNumber();
  49. ?>
  50. </form>
  51. </body>
  52. </html>

(Добавление)
Вот еще вариант где пользователь задает число, а компьютер должен угадать меньше чем за 7 шагов:

PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title>Угадайка</title>
  4. <style type="text/css">
  5. body {
  6.         background: gray;
  7.         color: tan;
  8.         }
  9. </style>
  10. </head>
  11. <body>
  12. <center>
  13. <h1>Угадайка</h1>
  14. <form>
  15. <?
  16. function compMind() {
  17.         $userChoise = $_GET[userchoise];//27
  18.         $pcEnd = 100;
  19.         $shag = 50;
  20.         $pcStart = 0;
  21.         for ($i=1;$i<=8;$i++){
  22.                 if ($pcEnd == $userChoise) {
  23.                         print "<h1>Bingo</h1><br>";
  24.                         break; //Досрочный выход
  25.                 }
  26.                 elseif ($i >= 8) {
  27.                         print "<h1>У компьютера только 7 попыток</h1><br>";
  28.                         break; //Досрочный выход
  29.                 }
  30.                 elseif ($pcEnd > $userChoise) {
  31.                         $pcEnd = $pcEnd-$shag; //100-50=50 //50-25=25 //37-6=31 //31-3=28 //28-1
  32.                         $pcEnd = round($pcEnd);
  33.                         $shag = $shag/2; //25 //12 //3 //1 //1
  34.                         $shag = round($shag);
  35.                         print "Шаг $i , ПК выбрал = $pcEnd<br>";
  36.                                                
  37.                 }//end elseif 27
  38.                 elseif ($pcEnd < $userChoise) {
  39.                         $pcEnd += $shag; //25+12=37
  40.                         $pcEnd = round($pcEnd);
  41.                         $shag = $shag/2; //12/2=6
  42.                         $shag = round($shag);
  43.                         print "Шаг $i , ПК выбрал = $pcEnd<br>";                       
  44.                 }//end elseif
  45.                
  46.         }//end for
  47. }//End compMind
  48. function showForm() {
  49.         print <<<HERE
  50.         <table borber=1>
  51.         <tr>
  52.         <td colspan = "5">
  53.         <h3>Загадайте компьютеру число</h3>
  54.         </td></tr><br>
  55.         <tr>
  56.         <td colspan = "5">
  57.         <center><input type = "text" name = "userchoise"
  58.         value = ""></center>
  59.         </td></tr><br>
  60. <tr>
  61.         <td colspan = "5">
  62.         <center>
  63.         <input type = submit value = "Угадай">
  64.         </center>
  65.         </td>
  66.         </tr>
  67. HERE;
  68. }
  69. compMind();
  70. showForm();
  71. ?>
  72. </form>
  73. </body>
  74. </html>
 
 Top
DlTA
Отправлено: 30 Января, 2021 - 01:31:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Во и я своё добавлю
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $rand = rand(1,9);
  4. $ok = false;
  5. echo "угадай число 1-9\n";
  6. for ($i=0; $i<3; $i++){
  7.         echo "> ";
  8.        
  9.         fscanf(STDIN,"%d\n", $val);
  10.         if ($val == $rand){
  11.                 $ok = true;
  12.                 break;
  13.         }
  14.         if ($val<$rand){
  15.                 echo "+\n";
  16.         }
  17.         else {
  18.                 echo "-\n";
  19.         }
  20. }
  21. if ($ok) {
  22.         echo "ok\n";
  23. }
  24. else {
  25.         echo "no\n";
  26. }
  27.  
  28.  
 
 Top
LML
Отправлено: 16 Июня, 2021 - 14:13:59
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2021  


Помог: 1 раз(а)




На основе вышеприведённых решений задумал встроить "угадайку" в бота.

Задача:
1. Боту приходит фраза с ключевым словом из массива $chislo.
2. Бот переходит в режим ожидания ввода цифр.
3. Если цифры в введённой фразе есть - обрабатывает их. Если нет - обрабатывает фразу, как обычно.
4. Если сразу есть совпадение - поздравляет.
5. Если нет совпадения - в цикле проверяет каждый последующий ввод, пока цифра не совпадёт, либо её вообще не будет в сообщении.
6. При совпадении - выходит из цикла и выводит поздравление.

Как я пытаюсь сделать:

PHP:
скопировать код в буфер обмена
  1. // $umsg = 'игра';
  2.  
  3. $chislo = ['угадать число','игра','угадайк'];
  4.                 if(str_ireplace($chislo, '', $umsg) !== $umsg) {
  5.                 echo "Ну что, сыграем? Я загадал число от 1 до 100. Попробуйте его угадать.";  
  6.  
  7.  //Тут получаем $umsg = 'строка, содержащая число';
  8.  
  9.         $umsg = preg_replace('/\D+/', '', $umsg);
  10.                 if(is_numeric($umsg)) {
  11.                 $rand_chislo = mt_rand(1, 100);
  12.                
  13.         //      $rand_chislo = 33;     
  14.                
  15.                         if($rand_chislo == $umsg) {echo 'Угадал '.$rand_chislo.'!';                    
  16.         } else {               
  17.  
  18.   if($rand_chislo > ($umsg - 10) && $rand_chislo < ($umsg + 10)) {echo 'Рядом';
  19.   }
  20.     elseif ($umsg < $rand_chislo) {echo 'Твоё Меньше';
  21.                 }
  22.                         elseif ($umsg > $rand_chislo) {echo 'Твоё Больше';
  23.                         }
  24. }
  25.         } else {
  26.         echo 'Не число';
  27.         }      
  28. }


По частям всё работает (проверяю в песочнице).

Но есть вопросы.
Как зациклить перебор вариантов, чтобы не выбрасывало после первого прохода?
Наверное, как-то через

Но не пойму, как сделать, чтобы после неправильного ответа ожидалась новая переменная $umsg и цикл повторялся до выполнения условия.

Или может лучше записывать загаданное число в файл, а после правильного ответа - удалять его? А пока файл существует, сравнивать вводимое значение и записанное?

(Отредактировано автором: 16 Июня, 2021 - 18:14:18)

 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Уроки php »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB