|
|
|
| Здравствуйте. Такой нескромный вопрос, хочу реализовать шашки на PHP, какие данные нужно хранить в БД для двух реальных игроков что бы всё правильно реализовать? Игровое поле в виде двумерного массива это понятно, а так же чей сейчас ход, а ещё7 | |
|
|
|
|
|
|
|
для: pavluxa09
(16.07.2012 в 20:29)
| | 1. Можно начать с того что у вас есть, дополняя базу данных таблицами по мере надобности. Т.е. потребуется история игр или турнир - добавите таблицы позже
2. Кроме того, вам не обязательно хранить все игровое поле, вам достаточно хранить координаты шашек, количество которых (а, следовательно, и записей) будет убывать по мере прохождения партии. | |
|
|
|
|
|
|
|
для: pavluxa09
(16.07.2012 в 20:29)
| | А я бы еще хранил координаты шашек не в двух координатах, а одним целым числом от 1 до 64. Например 32 - 4ая строка, 8ой столбец, 19 - 3я строка, третий столбец и т.д. И всю партию можно хранить в 2ух массивах, или одном двумерном. + в нулевом элементе массива можно установить флаг хода. В результате, всю партию можно хранить в одном текстовом поле в виде сериализованного массива (вы же врядли будете организовывать поиск по позициям шашек на доске? значит допустимо.). + 2 поля с ID игроков, + возможно, timestamp начала партии и последнего хода. + id самой партии. | |
|
|
|
|
|
|
|
для: Sfinks
(17.07.2012 в 10:26)
| | я уже устал говорить, да кто бы меня слушал
достаточно одномерного массива
поиск будет нужен для проверки хода, ну апро дамку я вообще молчу | |
|
|
|
|
|
|
|
для: Valick
(17.07.2012 в 10:48)
| | CREATE TABLE IF NOT EXISTS `XeronCheckers` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '№',
`createDate` datetime NOT NULL COMMENT 'Дата создания',
`hitBackAllowed` enum('0','1') NOT NULL COMMENT 'Разрешен ли удар назад?',
`betAmount` decimal(11,2) unsigned NOT NULL COMMENT 'Сумма ставки',
`betCurrency` enum('USD','RUB') NOT NULL COMMENT 'Валюта ставки',
`serverID` bigint(20) unsigned NOT NULL COMMENT '№ сервера',
`clientID` bigint(20) unsigned DEFAULT NULL COMMENT '№ клиента',
`availableDate` datetime DEFAULT NULL COMMENT 'Дата готовности',
`serverAvailable` enum('0','1') DEFAULT NULL COMMENT 'Готов ли сервер?',
`clientAvailable` enum('0','1') DEFAULT NULL COMMENT 'Готов ли клиент?',
`startDate` datetime DEFAULT NULL COMMENT 'Дата начала',
`playGround` tinyblob COMMENT 'Игровое поле',
`turnDate` datetime DEFAULT NULL COMMENT 'Дата последнего хода',
`whoseTurn` enum('1','2') DEFAULT NULL COMMENT 'Чей ход: 1 - сервер, 2 - клиент',
`finishDate` datetime DEFAULT NULL COMMENT 'Дата окончания',
`whoseWinner` enum('0','1','2') DEFAULT NULL COMMENT 'Победитель: 0 - ничья, 1 - сервер, 2 - клиент',
`status` enum('0','1','2','3') NOT NULL COMMENT 'Статус: 0 - ожидание клиента, 1 - ожидание готовности, 2 - в процессе, 3 - окончена',
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Игра "Шашки"' AUTO_INCREMENT=1 ;
Вот такая у меня получается база данных, где playGround - двумерный массив игрового поля у которого слева находятся шашки сервера, а справа шашки клиента.
НА скрипт при ходе передаётся два параметра: Координата от куда передвинуть шашку и куда передвинуть. Как организовать проверку по двумерному массиву? что бы эти две координаты находились на одной из диагоналей ? | |
|
|
|
|
|
|
|
для: pavluxa09
(17.07.2012 в 16:18)
| | Слегка переделал скрипт, теперь в playGround храниться одномерный массив, у которого 0 - пустая ячейка, 1 - пешка сервера, 2 - пешка клиента, 3 - дамка сервера, 4 - дамка клиента. Как реализовать проверку хода? На скрипт приходит переменная FROM указывающая номер элемента от куда передвинуть шашку, и TO - куда передвинуть её. | |
|
|
|
|
|
|
|
для: pavluxa09
(17.07.2012 в 17:07)
| | кто-нибудь,как вывести БД с помощью table?
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=87130 | |
|
|
|
|
|
|
|
для: odindvatri
(17.07.2012 в 17:13)
| | UP | |
|
|
|
|
|
|
|
для: pavluxa09
(17.07.2012 в 20:02)
| | # playGround - игровая доска:
# 0 - пустое место;
# 1 - пешка сервера;
# 2 - пешка клиента;
# 3 - дамка сервера;
# 4 - дамка клиента.
$playGround = array(
array( 1, 0, 1, 0, 1, 0, 1, 0 ),
array( 0, 1, 0, 1, 0, 1, 0, 1 ),
array( 1, 0, 1, 0, 1, 0, 1, 0 ),
array( 0, 0, 0, 0, 0, 0, 0, 0 ),
array( 0, 0, 0, 0, 0, 0, 0, 0 ),
array( 0, 2, 0, 2, 0, 2, 0, 2 ),
array( 2, 0, 2, 0, 2, 0, 2, 0 ),
array( 0, 2, 0, 2, 0, 2, 0, 2 )
);
function MoveObject( &$playGround, $iUserID, $iFromX, $iFromY, $iToX, $iToY ) {
# Определение размера доски :
$iGroundSize = count( $playGround );
# Проверка внешних данных :
if( $iUserID != 1 && $iUserID != 2 )
return -1;
if( $iFromX < 0 || $iFromX >= $iGroundSize || $iFromY < 0 || $iFromY >= $iGroundSize )
return -2;
if( $iToX < 0 || $iToX >= $iGroundSize || $iToY < 0 || $iToY >= $iGroundSize )
return -3;
# Пренадлежит ли перемещаемая шашка текущему игроку ?
if( $playGround[$iFromY][$iFromX] != $iUserID && $playGround[$iFromY][$iFromX] != $iUserID + 2 )
return -4;
# Находится ли место перемещения на диалогонале с перемещаемой шашкой?
if( abs( $iFromX - $iToX ) != abs( $iFromY - $iToY ) )
return -5;
return 1;
}
Помогите дальше дописать | |
|
|
|
|