Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Игра типа виселица
 
 автор: chexov   (29.10.2007 в 11:49)   письмо автору
 
 

Скачал в интернете старючую игру "виселица", решил переделать ее без явы скриптов и попроще
что то типа
http://softtime.ru/forum/read.php?id_forum=1&id_theme=44705&page=1
Если можно то подскажите как?

   
 
 автор: KPETuH   (29.10.2007 в 11:55)   письмо автору
 
   для: chexov   (29.10.2007 в 11:49)
 

алгоритм виселицы?

   
 
 автор: chexov   (29.10.2007 в 12:00)   письмо автору
 
   для: KPETuH   (29.10.2007 в 11:55)
 

вот пример http://wap.2yxa.ru/games/hang.php думаю тут алгоритм налицо:)

   
 
 автор: chexov   (29.10.2007 в 14:59)   письмо автору
 
   для: chexov   (29.10.2007 в 12:00)
 

есть варианты?

   
 
 автор: chexov   (30.10.2007 в 01:30)   письмо автору
 
   для: chexov   (29.10.2007 в 14:59)
 

уважаемые знатоки, подскажите что нибудь

   
 
 автор: kasmanaft   (30.10.2007 в 05:36)   письмо автору
 
   для: chexov   (29.10.2007 в 11:49)
 

Заготовте заранее нужное количество картинок, словарь. Составте алфавит ссылками, в параметрах передавайте букву.
Итак:
1. из словаря берем слово, сохраняем его куда-нибудь (например, в сессию), если там, куда его сохраняем, его еще нет.
составляем слово из "-" такой же длины, запоминаем туда же
записываем количество минусов (в начале 0) (неправильных попыток)
2. если есть $_GET['char'] проверяем, есть ли в слове такая буква (если в параметре будете передавать латинские буквы, нужно составить словарик-массив соответствий: 'a' => 'a', 'b' => 'б', 'v' => 'в'и т.д.). Проверить, есть ли буква можно с помощью strpos(), заменить примерно так: пока ($pos = strpos(.....)) !== false, слово_из_минусов[$pos] = буква)
3. в зависимости от количества минусов, выводим нужную картинку, слово из "-" с отгаданными буквами. Поздравления в случае выйгрыша, проигрыша...

   
 
 автор: chexov   (30.10.2007 в 13:55)   письмо автору
 
   для: kasmanaft   (30.10.2007 в 05:36)
 

я алгоритм тоде очень хорошо понимаю, но че то не хватает мозгов:(

   
 
 автор: Саня   (30.10.2007 в 11:57)   письмо автору
 
   для: chexov   (29.10.2007 в 11:49)
 

<?php
$words 
= array("республика""форум""винда");

session_start();
if ( empty(
$_SESSION['secret']) ) {
  
$_SESSION['try'] = 6;  // количество попыток
  
$_SESSION['true'] = 0// количество угаданных букв
  
$_SESSION['secret'] = $words[array_rand($words1)];
  
$_SESSION['text'] = str_repeat("_ "strlen($_SESSION['secret']));
  
$abc "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я";
  
$_SESSION['abc'] = explode(" "$abc);
}

if ( (!empty(
$_GET['char']) || @$_GET['char'] === "0") && $_SESSION['try'] > ) {
  
$pos strpos($_SESSION['secret'], $_SESSION['abc'][$_GET['char']]);
  if ( 
$pos !== false ) {
    
$_SESSION['text'][$pos*2] = $_SESSION['secret'][$pos];
    print 
"символ угадан!<br/>";
    
$_SESSION['true']++;
  } else {
    print 
"символ неугадан!<br/>";
    
$_SESSION['try']--;
  }

  unset(
$_SESSION['abc'][$_GET['char']]);

  if ( 
$_SESSION['try'] === ) {
    print 
"Вы проиграли.<br/><a href='?'>заново</a>";
    
session_destroy();
    exit;
  }

  if ( 
$_SESSION['true'] === strlen($_SESSION['secret']) ) {
    print 
"Вы выиграли.<br/><a href='?'>заново</a>";
    
session_destroy();
    exit;
  }

}

print 
"У вас ".$_SESSION['try']." попыток<br/>";
print 
$_SESSION['secret']."<br/>".$_SESSION['text']."<br/>";

foreach ( 
$_SESSION['abc'] as $key => $char )
  print 
'<a href="?char='.$key.'">'.$char.'</a> ';

   
 
 автор: kasmanaft   (30.10.2007 в 13:01)   письмо автору
 
   для: Саня   (30.10.2007 в 11:57)
 

Попробуйте "молоко" отгадать ;)

   
 
 автор: Саня   (30.10.2007 в 14:09)   письмо автору
 
   для: kasmanaft   (30.10.2007 в 13:01)
 

Предложенный код специально рассчитан на слова без повторяющихся букв. Желающие могут переделать скрипт под себя.

   
 
 автор: kasmanaft   (30.10.2007 в 14:14)   письмо автору
 
   для: Саня   (30.10.2007 в 14:09)
 

Уж прямо-таки "специально" ? =)

   
 
 автор: chexov   (30.10.2007 в 13:54)   письмо автору
 
   для: Саня   (30.10.2007 в 11:57)
 

$words = array("республика", "форум", "винда");
если это база слов то чтранно но выводит больше количество букв чем каждое из слов:(

   
 
 автор: Саня   (30.10.2007 в 14:09)   письмо автору
 
   для: chexov   (30.10.2007 в 13:54)
 

Если я правильно прочитал мысли, то замените
str_repeat("_ ", str...
на
str_repeat("_", str...

и

$_SESSION['text'][$pos*2] = $_SESS...
на
$_SESSION['text'][$pos] = $_SESS...

   
 
 автор: chexov   (30.10.2007 в 14:58)   письмо автору
 
   для: Саня   (30.10.2007 в 14:09)
 

вот результат:(

<?
символ неугадан
!
У вас 5 попыток
форум
_ _ _ _ _ _ _ _ _ _ 
а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
?>

   
 
 автор: kasmanaft   (30.10.2007 в 15:42)   письмо автору
 
   для: chexov   (30.10.2007 в 14:58)
 

В PHP Expert Editor'e запускаете? У меня в нем почему-то такая же ерунда была.

   
 
 автор: Саня   (30.10.2007 в 15:54)   письмо автору
 
   для: chexov   (30.10.2007 в 14:58)
 

Функция str_repeat() вообще странно ведёт себя на денвере. На нормальной связке Apache+PHP отлично работает.

   
 
 автор: chexov   (30.10.2007 в 16:06)   письмо автору
 
   для: Саня   (30.10.2007 в 15:54)
 

у меня не денвер у меня как раз такая связка...что же делать?

   
 
 автор: chexov   (31.10.2007 в 06:52)   письмо автору
 
   для: chexov   (30.10.2007 в 16:06)
 

а еще глюки с кодировкой и когда угадаешь слово не выводит вы выиграли:(

   
 
 автор: KPETuH   (31.10.2007 в 08:14)   письмо автору
 
   для: chexov   (31.10.2007 в 06:52)
 

в PHPed'е проверил код все работает нормально :)

   
 
 автор: chexov   (31.10.2007 в 11:42)   письмо автору
 
   для: KPETuH   (31.10.2007 в 08:14)
 

я проверил на хостинге - не работает как надо:(

   
 
 автор: chexov   (31.10.2007 в 15:10)   письмо автору
 
   для: chexov   (31.10.2007 в 11:42)
 

я сделал так:

<?php
header 
("Content-type:text/vnd.wap.wml;");
$file_parole 'word.dat';   //словарь слов 

$alfabeto = array ('А' => 'a','Б' => 'b','В' => 'c','Г' => 'd','Д' => 'e',
 
'Е' => 'f','Ж' => 'g','З' => 'h','И' => 'i','Й' => 'j','К' => 'k','Л' => 'l',
 
'М' => 'm','Н' => 'n','О' => 'o','П' => 'p','Р' => 'q','С' => 'r','Т' => 's',
 
'У' => 't','Ф' => 'u','Х' => 'v','Ц' => 'w','Ч' => 'x','Ш' => 'y','Щ' => 'z',
 
'Ь' => '1','Ъ' => '2','Ы' => '3','Э' => '4','Ю' => '5','Я' => '6');

$paperino session_name ("found");
session_register ("regfound");

//выбор слова из файла
function ScegliParola ($file_parole) {
 
$content file ($file_parole);
 
$numero_parole = (count ($content)-1);
 
$posizione_parola rand (0, ($numero_parole));
 
$linea $content[$posizione_parola];
 
$parola rtrim ($linea);
 return (
$parola);
}

// изменяет все неугаданные буквы на _
function CalcolaIndovinata ($parola$escludi$alfabeto) {
 
$alfabeto array_flip ($alfabeto);
 
$escluse strtr ($escludi$alfabeto);
 
$escluse '['.$escluse.']';
 
$escluse ereg_replace ($escluse'''[АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯ]');
 
$indovinata ereg_replace ($escluse'_'$parola);
 return 
$indovinata;
}

// вставляет выбранную букву в слово
function TrovaLettera ($lettera$parola$scelte$alfabeto) {
 
$alfabeto array_flip ($alfabeto);
 
$lettera strtr ($lettera$alfabeto);
 
$scelte.= $lettera;
 if (
ereg ($lettera$parola)) {
  
$controllo true;
 }
 else {
  
$controllo false;
 }
 
$risposta = array ($scelte$controllo);
 return 
$risposta;
}

if ((isset(
$letter) and isset($regfound))) {
 
$variab explode ('/'$regfound);
 
$indovina $variab[0];
 
$scelte $variab[1];
 
$tentativi $variab[2];
 
$checklet TrovaLettera ($letter$indovina$scelte$alfabeto);
 
$scelte $checklet[0];
 if (!
$checklet[1]) {
  
$tentativi $tentativi +1;
 }
 
$indovinata CalcolaIndovinata ($indovina$scelte$alfabeto);
}
else {
 
$tentativi=0;
 
$scelte = ('_');
 
$indovina ScegliParola ($file_parole);
 
$indovinata CalcolaIndovinata ($indovina$scelte$alfabeto);
}

$regfound = ($indovina.'/'.$scelte.'/'.$tentativi);

echo 
"<?xml version=\"1.0\"?>
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">
<wml><head><meta http-equiv=\"Cache-Control\" content=\"no-cache\" forua=\"true\"/></head><card title=\"&#x0423;&#x0433;&#x0430;&#x0434;&#x0430;&#x0439;&#x043A;&#x0430;!\">"
;
print 
"<p align=\"center\">
&#x0418;&#x0433;&#x0440;&#x0430; - &#x0443;&#x0433;&#x0430;&#x0434;&#x0430;&#x0439; &#x0441;&#x043B;&#x043E;&#x0432;&#x043E;!<br/>"
;

print 
iconv("windows-1251","utf-8","Ошибок $tentativi").' &#x0438;&#x0437; 6<br/>';
$caratteri preg_split('//'$indovinata, -1PREG_SPLIT_NO_EMPTY);
foreach (
$caratteri as $lettalf) {
 
$lettalf strtr ($lettalf$alfabeto);
 if (
$lettalf==' ') {
  print 
'';
 }
 else {
$all = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6');
$addd = array ('а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ъ','э','ы','ю','я');
print 
iconv("windows-1251","utf-8",str_replace ($all,$addd,$lettalf));

}
 print (
' ');
}
print (
'<br/><br/>');


if (
$indovina!=$indovinata)
{
if (
$tentativi>=6)
{
print 
iconv("windows-1251","utf-8","Вы не угадали задуманое слово.<br/>Слово было: ".strtolower($indovina).""); session_destroy(); 
}
 else {
$scelt preg_split('//'$scelte, -1PREG_SPLIT_NO_EMPTY);
print (
'');
foreach (
$alfabeto as $lettalf) {
$contrl false;
foreach (
$scelt as $letter) {
if (!
strcasecmp ($lettalf$letter))
{
$contrl true;
}
}
if (
$contrl)
{
print 
$lettalf;
}
else {
$al = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6');
$add = array ('а ','б ','в ','г ','д ','е ','ж ','з ','и ','й ','к ','л ','м ','н ','о ','п ','р ','с ','т ','у ','ф ','х ','ц ','ч ','ш ','щ ','ь ','ъ ','э ','ы ','ю ','я ');

print 
'<a href="index.php?letter='.$lettalf.'&amp;'.SID.'">'.iconv("windows-1251","utf-8",str_replace ($al,$add,$lettalf)).'</a>';
}
if (
$lettalf=='k' or $lettalf=='v'){print ('<br/>');}
}
}
}
else 
{
 print 
iconv("windows-1251","utf-8","Поздравляю! Вы угадали слово!");
 
session_destroy();
}
echo 
iconv("windows-1251","utf-8","<br/><br/><small><a href=\"index.php\">Еще поиграть!</a></small>");
print 
"</p>";
print 
"</card></wml>";
?>

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

   
 
 автор: chexov   (01.11.2007 в 01:32)   письмо автору
 
   для: Саня   (30.10.2007 в 15:54)
 

подскажите как убирать нажатую букву из алфавита....пожалуйста

   
 
 автор: chexov   (01.11.2007 в 11:18)   письмо автору
 
   для: chexov   (01.11.2007 в 01:32)
 

подскажите кто нибудь как убирать нажатую букву из алфавита..

   
 
 автор: Unkind   (02.11.2007 в 13:06)   письмо автору
 
   для: Саня   (30.10.2007 в 15:54)
 

Да все в порядке с str_repeat(). Просто Вы в UTF-8, небось, сохранили.

   
 
 автор: chexov   (02.11.2007 в 13:57)   письмо автору
 
   для: Unkind   (02.11.2007 в 13:06)
 

Сейчас уже вопрос не в этом, а в том: как в предложенном мною коде сделать так чтобы при нажатие на букву, буква изчезала из алфавита не зависимо от того угадана она или нет

   
 
 автор: chexov   (02.11.2007 в 14:12)   письмо автору
 
   для: Unkind   (02.11.2007 в 13:06)
 

Кстати вы правы:) сделал виндовс 1251 и все стало на свои места:) спасибо Сане и Unkind за помощь:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования