<?php
$r=0;
echo '<table>' .'<tr>';
while ($r<9) {
$r++;
if (isset ($_GET['action'])) {
if ($_GET['action']=="x") $act="?action=y";
if ($_GET['action']=="y") $act="?action=x";}
else
$act="?action=x";
$submit=$_POST['subm'.$r];
echo '<td>'.'<form action="' .$_SERVER['PHP_SELF']. $act . '"' .'method="post"' . 'name="' . $r . '"' . '>'
. '<input type="submit"';
if(isset($submit)) {
echo $res = 'value="' . $_GET["action"] .'"';
}
if (!isset($submit)) {
echo $res2 = 'value=" "';
}
echo 'name="subm' . $r . '" />'
. '</form>' . '</td>';
if ($r%3 == 0)
echo '</tr>' . '<tr>';
}
echo '</tr>'. '</table>';
?>
Спустя 47 минут, 46 секунд (11.11.2010 - 13:37) kovaldm написал(а):
Я думаю надо данные о содержимом поля value каждой кнопки сохранять в массиве, а массив каждый раз передавать в поле hidden. Перед выводом формы проверять содержимое массива и заполнять поля в соответствии с содержимым.
Спустя 1 час, 12 секунд (11.11.2010 - 14:37) kovaldm написал(а):
У меня получилось вот так
error_reporting(E_ALL);
//Массив со значениями кнопок для первого запуска
$array['a1'] = '';
$array['a2'] = '';
$array['a3'] = '';
$array['b1'] = '';
$array['b2'] = '';
$array['b3'] = '';
$array['c1'] = '';
$array['c2'] = '';
$array['c3'] = '';
$array['id'] = 'x';
if(!empty($_POST))
{
$button=array_keys($_POST);//Получаем имя нажатой кнопки
$array = unserialize($_POST['hidden']);//Получаем массив со значениями кнопок
if($array['id'] == 'x')//Проверяем что было поставлено в предидущий раз
{
$array[$button[0]] = 'x';
$array['id'] = 'o';
}
else
{
$array[$button[0]] = 'o';
$array['id'] = 'x';
}
}
//Форма
echo '<form action=./index.php method=post>
<input type=submit name="a1" value="'.$array['a1'].'">
<input type=submit name="a2" value="'.$array['a2'].'">
<input type=submit name="a3" value="'.$array['a3'].'">
<br>
<input type=submit name="b1" value="'.$array['b1'].'">
<input type=submit name="b2" value="'.$array['b2'].'">
<input type=submit name="b3" value="'.$array['b3'].'">
<br>
<input type=submit name="c1" value="'.$array['c1'].'">
<input type=submit name="c2" value="'.$array['c2'].'">
<input type=submit name="c3" value="'.$array['c3'].'">
<input type=hidden name=hidden value='.serialize($array).'>
</form>';
Спустя 6 минут, 35 секунд (11.11.2010 - 14:44) inpost написал(а):
$array['a1'] = isset($array['a1'])?$array['a1']:''; ??? Что это? Если существует а1, то а1 будет ровняться а1 =)))
Спустя 17 минут, 52 секунды (11.11.2010 - 15:02) kovaldm написал(а):
Забыл убрать, сначала логика была немного другой.

Спустя 39 секунд (11.11.2010 - 15:02) qwerty написал(а):
kovaldm, собственно, одни нули). и все равно value не сохраняет значение.
Спустя 1 минута, 18 секунд (11.11.2010 - 15:04) kovaldm написал(а):
Как это нули?
У меня все работает.

Спустя 3 минуты, 20 секунд (11.11.2010 - 15:07) qwerty написал(а):
все, что я изменила, это строчку Error_Reporting(E_ALL & ~E_NOTICE);. иначе ошибки лезут. и там одни 0, да)
Спустя 2 минуты, 34 секунды (11.11.2010 - 15:09) kovaldm написал(а):
Какие ошибки?
Текст ошибки/ошибок в студию.
Текст ошибки/ошибок в студию.
Спустя 3 минуты, 10 секунд (11.11.2010 - 15:13) qwerty написал(а):
Notice: unserialize() [function.unserialize]: Error at offset 5 of 48 bytes in Z:\home\localhost\www\index.php on line 19
Notice: Undefined index: a1 in Z:\home\localhost\www\index.php on line 34
Notice: Undefined index: a2 in Z:\home\localhost\www\index.php on line 35
Notice: Undefined index: a3 in Z:\home\localhost\www\index.php on line 36
Notice: Undefined index: b1 in Z:\home\localhost\www\index.php on line 38
Notice: Undefined index: b3 in Z:\home\localhost\www\index.php on line 40
Notice: Undefined index: c1 in Z:\home\localhost\www\index.php on line 42
Notice: Undefined index: c2 in Z:\home\localhost\www\index.php on line 43
Notice: Undefined index: c3 in Z:\home\localhost\www\index.php on line 44
Notice: Undefined index: a1 in Z:\home\localhost\www\index.php on line 34
Notice: Undefined index: a2 in Z:\home\localhost\www\index.php on line 35
Notice: Undefined index: a3 in Z:\home\localhost\www\index.php on line 36
Notice: Undefined index: b1 in Z:\home\localhost\www\index.php on line 38
Notice: Undefined index: b3 in Z:\home\localhost\www\index.php on line 40
Notice: Undefined index: c1 in Z:\home\localhost\www\index.php on line 42
Notice: Undefined index: c2 in Z:\home\localhost\www\index.php on line 43
Notice: Undefined index: c3 in Z:\home\localhost\www\index.php on line 44
Спустя 6 минут, 15 секунд (11.11.2010 - 15:19) kovaldm написал(а):
Понятно.
Это сериализованный массив в браузер выводится криво, а точнее в кавычках, вроде так.
Это сериализованный массив в браузер выводится криво, а точнее в кавычках, вроде так.
Спустя 6 минут, 25 секунд (11.11.2010 - 15:25) kovaldm написал(а):
Попробуйте вот так
//Форма
echo "<form action=./index.php method=post>
<input type=submit name=\"a1\" value=".$array['a1'].">
<input type=submit name=\"a2\" value=".$array['a2'].">
<input type=submit name=\"a3\" value=".$array['a3'].">
<br>
<input type=submit name=\"b1\" value=".$array['b1'].">
<input type=submit name=\"b2\" value=".$array['b2'].">
<input type=submit name=\"b3\" value=".$array['b3'].">
<br>
<input type=submit name=\"c1\" value=".$array['c1'].">
<input type=submit name=\"c2\" value=".$array['c2'].">
<input type=submit name=\"c3\" value=".$array['c3'].">
<input type=hidden name=hidden value='".serialize($array)."'>
</form>";
Спустя 2 минуты, 57 секунд (11.11.2010 - 15:28) qwerty написал(а):
Да, я уже успела попробовать с кавычками, но ругается по-прежнему на то же
Спустя 6 минут, 15 секунд (11.11.2010 - 15:35) kovaldm написал(а):
Попробуйте вот такой код:
Error_Reporting(E_ALL & ~E_NOTICE);
//Массив со значениями кнопок для первого запуска
$array['a1'] = '';
$array['a2'] = '';
$array['a3'] = '';
$array['b1'] = '';
$array['b2'] = '';
$array['b3'] = '';
$array['c1'] = '';
$array['c2'] = '';
$array['c3'] = '';
$array['id'] = 'x';
if(!empty($_POST))
{
$button=array_keys($_POST);//Получаем имя нажатой кнопки
$inarray = explode('#', $_POST['hidden']);//Получаем массив со значениями кнопок
$array['a1'] = $inarray[0];
$array['a2'] = $inarray[1];
$array['a3'] = $inarray[2];
$array['b1'] = $inarray[3];
$array['b2'] = $inarray[4];
$array['b3'] = $inarray[5];
$array['c1'] = $inarray[6];
$array['c2'] = $inarray[7];
$array['c3'] = $inarray[8];
$array['id'] = $inarray[9];
if($array['id'] == 'x')//Проверяем что было поставлено в предидущий раз
{
$array[$button[0]] = 'x';
$array['id'] = 'o';
}
else
{
$array[$button[0]] = 'o';
$array['id'] = 'x';
}
}
//Форма
echo "<form action=./index.php method=post>
<input type=submit name=\"a1\" value=".$array['a1'].">
<input type=submit name=\"a2\" value=".$array['a2'].">
<input type=submit name=\"a3\" value=".$array['a3'].">
<br>
<input type=submit name=\"b1\" value=".$array['b1'].">
<input type=submit name=\"b2\" value=".$array['b2'].">
<input type=submit name=\"b3\" value=".$array['b3'].">
<br>
<input type=submit name=\"c1\" value=".$array['c1'].">
<input type=submit name=\"c2\" value=".$array['c2'].">
<input type=submit name=\"c3\" value=".$array['c3'].">
<input type=hidden name=hidden value='".implode('#', $array)."'>
</form>";
Спустя 8 минут, 29 секунд (11.11.2010 - 15:43) qwerty написал(а):
Да, спасибо ) все работает, вы очень помогли, буду разбираться
Спустя 2 часа, 32 минуты, 2 секунды (11.11.2010 - 18:15) inpost написал(а):
kovaldm
Если name выделяешь кавычками, значит и все остальные свойства выделяй. Вообще так правильнее писать. Не выделяет - Гугл, чтобы сократить количество кода, но тогда не стоит выделять всё, а не половина на половину.
echo "<input type=submit name=\"a1\" value=".$array['a1'].">"; // Твоя запись
echo "<input type=\"submit\" name=\"a1\" value=\"".$array['a1']."\">"; // Должна быть твоей записью
echo '<input type="submit" name="a1" value="'.$array['a1'].'">'; // А так удобнее
Если name выделяешь кавычками, значит и все остальные свойства выделяй. Вообще так правильнее писать. Не выделяет - Гугл, чтобы сократить количество кода, но тогда не стоит выделять всё, а не половина на половину.
Спустя 3 часа, 8 минут, 18 секунд (11.11.2010 - 21:23) kirik написал(а):
Ну вы намутили :)
Еще задача по теме - дописать свой скрипт чтобы он выводил победителя в конце игры (ну и соответственно не давал играть дальше).
echo '<form method="post">';
for($i = 0; $i < 9; $i++) {
if(!empty($_POST['h_' . $i])) {
$_POST['c_' . $i] = $_POST['h_' . $i];
} elseif(isset($_POST['c_' . $i])) {
$_POST['h_' . $i] = $_POST['c_' . $i] = $_POST['last'];
} else {
$_POST['c_' . $i] = $_POST['h_' . $i] = '';
}
echo '<input type="submit" name="c_' . $i . '" value="' . $_POST['c_' . $i] . '" />' .
'<input type="hidden" name="h_' . $i . '" value="' . $_POST['h_' . $i] . '" />' .
((($i + 1) % 3 == 0) ? '<br />' : '');
}
echo '<input type="hidden" name="last" value="' . ((isset($_POST['last']) && $_POST['last'] == 'x') ? 'o' : 'x') . '" />' .
'</form>';
Еще задача по теме - дописать свой скрипт чтобы он выводил победителя в конце игры (ну и соответственно не давал играть дальше).
Спустя 48 минут, 50 секунд (11.11.2010 - 22:12) kirik написал(а):
Есть вариант.
Спустя 17 минут, 7 секунд (11.11.2010 - 22:29) kovaldm написал(а):
Попробую, но чет мыслей вобще нет хороших.
Спустя 31 минута, 31 секунда (11.11.2010 - 23:01) kirik написал(а):
Что бы сделать лишь бы не то что нужно, блин :)
Написал крестики-нолики человек-vs-компьютер :)
но есть пока дырка в алгоритме (можно обдурить скрипт), думаю как поправить.
Написал крестики-нолики человек-vs-компьютер :)
тут код, кому интересно
// новая игра
if(!empty($_POST) && !isset($_POST['plays'])) {
header('Location: ' . $_SERVER['PHP_SELF']);
}
// ячейки игры
$cells = array_fill(0, 9, '');
// ссылочный массив выйгрышных вариантов
$wins = array(
// горизонтальные
array(&$cells[0], &$cells[1], &$cells[2]),
array(&$cells[3], &$cells[4], &$cells[5]),
array(&$cells[6], &$cells[7], &$cells[8]),
// вертикальные
array(&$cells[0], &$cells[3], &$cells[6]),
array(&$cells[1], &$cells[4], &$cells[7]),
array(&$cells[2], &$cells[5], &$cells[8]),
// диагональные
array(&$cells[0], &$cells[4], &$cells[8]),
array(&$cells[2], &$cells[4], &$cells[6])
);
for($i = 0; $i < 9; $i++) {
if(!empty($_POST['h_' . $i])) {
$cells[$i] = $_POST['h_' . $i];
} elseif(isset($_POST['c_' . $i])) {
$cells[$i] = $_POST['plays'];
}
}
// проверяем на выйгрыш
$empty = array();
$move = false;
foreach($wins as $wi => &$win) {
$e = $x = $o = 0;
foreach($win as &$c) {
if(empty($c)) {
$e++;
$empty[$wi] = &$c;
} elseif($c == 'o') {
$o++;
$x--;
} elseif($c == 'x') {
$x++;
$o--;
}
}
if(($o > 1 || $x > 1) && $move == false) { // выигрываем сами
$empty[$wi] = 'o';
$move = true;
}
if(implode($win) === 'xxx') {
$winner = 'X';
} elseif(implode($win) === 'ooo') {
$winner = 'O';
}
}
if($move == false && !empty($_POST)) {
if(empty($empty)) {
$winner = false;
} else {
$k = array_rand($empty);
$empty[$k] = 'o';
}
}
unset($win);
echo '<form method="post">';
foreach($cells as $i => $cell) {
echo '<input type="submit" name="c_' . $i . '" value="' . $cell . '" style="width:25px" />' .
'<input type="hidden" name="h_' . $i . '" value="' . $cell . '" />' .
((($i + 1) % 3 == 0) ? '<br />' : '');
}
// Показываем выйгравшего, если есть
if(isset($winner)) {
if($winner === false) {
echo 'Ничья';
} else {
echo 'Победитель: ' . $winner;
}
echo '<br /><small>Нажмите любую кнопку чтобы сыграть заново</small>';
} else {
// $plays = (isset($_POST['plays']) && $_POST['plays'] == 'x') ? 'o' : 'x';
echo '<input type="hidden" name="plays" value="x" /> <br />';
// 'Играет: ' . $plays;
}
echo '</form>';
но есть пока дырка в алгоритме (можно обдурить скрипт), думаю как поправить.
Спустя 3 часа, 51 минута, 58 секунд (12.11.2010 - 02:53) kirik написал(а):
Спустя 14 минут, 53 секунды (12.11.2010 - 03:08) inpost написал(а):
Курящее полотенчико, почему твой сайт не работает?
Последний ответ не отображается, а пишется "ничья", хотя остаётся 2 поля свободных, один для компа, другой для меня =)
Последний ответ не отображается, а пишется "ничья", хотя остаётся 2 поля свободных, один для компа, другой для меня =)
Спустя 9 минут, 14 секунд (12.11.2010 - 03:17) kirik написал(а):
Цитата (inpost @ 11.11.2010 - 19:08) |
Последний ответ не отображается, а пишется "ничья", хотя остаётся 2 поля свободных, один для компа, другой для меня =) |
Да, эт поправил

Цитата (inpost @ 11.11.2010 - 19:08) |
почему твой сайт не работает? |
Лень бложек вести

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