Web - Поиграем с PHP - "Поле чудес" - PRCY⮭net
Дело было вечером, а может и нет - не припомню :) Под звуки Dj Quicksilver'a я, продолжая свое изучение PHP, дошел до раздела "Работа со строками". Благо там все было написано понятным языком, поэтому после прочтения раздела возникло желание "закрепить" полученные знания на практике.

Покопавшись в инете, я нашел множество примеров работы со строками. Но одни были черезчур сложные, а другие - с точностью до наоборот.

После долгих поисков мне попался один интересный пример работы со строками. Этот скрипт напоминал известную телеигру "Поле Чудес". Суть его, в интерпретации на PHP, заключалась в том, что вы нажимаете на одну из букв алфавита, а сверху, в зависимости от того, угадали вы букву слова или нет, выдается результат.

Задача была тривиальной, поэтому я решил ее усложнить. В сторону повышения привлекательности и функциональности, естественно.

Надеюсь, веб-сервер (какой - выбирать вам; лично я использую Apache) у вас настроен. Если нет, то в "МК" было несколько статей по настройке различных веб-серверов. Будет желание - найдете непременно.

Начнем с написания скрипта, а назовем наш его pole_chudes.php:

<?php

// Количество возможных попыток (пусть будет пол-алфавита);
$let_num = 16;

// наш массив-"алфавит";
$alphabet = array(
"А","Б","В","Г","Д","Е","Ж","З","И","Й","К","Л","М","Н","О","П",
"Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я");

// Массив возможных слов,
$words = array("МАГИЯ","ЛАМПА","КАРТА","МОНИТОР","МУЗЫКА");

// из которых случайным образом будет выбрано слово,
// которое игрок будет угадывать;

// Выбираем слово наугад;
if (!isset($word_number)){
$word_number = rand(1,count($words)) - 1;
}

// $word - короткий псевдоним для $words[$word_number];
$word = $words[$word_number];

echo"<H1>"; /* Начинаем выводить загаданное слово
(вместо еще "неугаданных" букв - у нас будет знак подчеркивания "_"),
заодно проверяем, может оно уже отгадано; */

// Предположим, что это так (т.е. угадано) установкой флага $finished.
$finished = 1;

// Перебираем все буквы слова;
for ($i=0; $i < strlen($word); $i++) {

/* Если $i-ю букву слова игрок уже "назвал" и она есть в загаданном слове,*/
if (ereg($word[$i], $letters)){
/* то выводим, ее на экран. (Тут $letters - множество "названных" букв);*/
echo $word[$i];
}
else {
// В противном случае выводим знак подчеркивания "_".
echo "_";
// Заодно отмечаем, что слово еще не отгадано.
$finished = 0;
}
}
echo"</H1>";

// Если слово угадано, то появляется сообщение:
if ($finished){
echo "<BR><BR><I>ПОЗДРАВЛЯЕМ! ВЫ ВЫИГРАЛИ!</I><BR><BR>";
echo "<A HREF=$PHP_SELF><IMG SRC="./play_again.jpg"></A>";

/* Предлагаем игроку сыграть еще раз,
нажав на кнопку с надписью "Сыграем еще?"
("кнопка" есть не что иное как картинка "play_again.jpg" в
одном каталоге с нашем файлом pole_chudes.php). */
}

Далее необходимо ввести переменную letters, в которой бы хранились все "названные" играющим буквы.Ссылка идет на эту же страницу, но передает такие параметры:

letters=$letters$var - к множеству "названных" букв $letters добавим текущую букву $var. Зачем это нужно? Для того, что если игрок нажмет на нее, она ведь тоже станет "названной".

Введем еще такие переменные:

word_number=$word_number - номер загаданного слова;

last=$var - последняя "названная" буква.

else {
$links .= "<A HREF=
"$PHP_SELF?letters=$letters$var&word_number=$word_number&last=$var">$var</A> ";
}
}

На заключительном этапе необходимо предусмотреть такие варианты:

* играющий превысил установленное количество попыток (переменная $let_num);
* буква,"названная" играющим, правильная или нет (других вариантов лично я не вижу - может вы знаете ?).

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

В нашем случае пусть это будут картинки с соответствующим содержанием.





/* Если игрок превысил лимит попыток (т.е проиграл ),то так ему об этом и скажем:*/
if ($wrong == $let_num) {

echo "<BR>НА ЭТОТ РАЗ ВАМ НЕ ПОВЕЗЛО!<BR><BR>";
echo "СЛОВО, КОТОРОЕ ВЫ ТАК И НЕ УГАДАЛИ: "$word"<BR><BR>";
echo "<A HREF=$PHP_SELF><IMG SRC="./play_again.jpg"></A> ";
// Опять предложим сыграть,для реванша, так сказать.

}
else {
if (isset($last)) {

/* Если переменная $last уже была инициализирована,то необходимо проверить,
является ли она правильной. Т.е если переменная $lastприсутствует в строке
$word - нашем загаданном слове.*/

// Если да (т.е. буква названа правильно),
// то появиться картинка с надписью "Угадал!"";
if (ereg($last,$word)) {
echo "<BR><IMG SRC="./all_right.jpg"><BR>";
}
// если нет, то так и скажем "А вот и не угадал".
else {
echo "<BR><IMG SRC="./try_again.jpg"><BR>";
}
}
echo "<BR><BR>";
echo "ОСТАЛОСЬ ПОПЫТОК = ".($let_num-$wrong)."<BR>"; // без комментариев;
echo "<BR>ПОЖАЛУЙСТА ВЫБЕРИТЕ БУКВУ:<BR><BR>";
echo $links;
}
}
?>

Итак, все готово! Теперь можно добавить в набор слов хоть целый словарь и развлекаться в перерывах между написанием скриптов.

Можно, конечно, еще добавить и ведущего, игроков, суперигру, но оставляю это удовольствие вам.

Особую благодарность хочу выразить Дмитрию Кравченко за помощь в подготовке данной статьи и Roxton'у за его супер-редактор TEA. защита сети
Information
  • Posted on 27.04.2013 15:45
  • Просмотры: 1332