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

Форум MySQL

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

 

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

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

тема: Шашки между игроками
 
 автор: pavluxa09   (16.07.2012 в 20:29)   письмо автору
 
 

Здравствуйте. Такой нескромный вопрос, хочу реализовать шашки на PHP, какие данные нужно хранить в БД для двух реальных игроков что бы всё правильно реализовать? Игровое поле в виде двумерного массива это понятно, а так же чей сейчас ход, а ещё7

  Ответить  
 
 автор: cheops   (17.07.2012 в 07:56)   письмо автору
 
   для: pavluxa09   (16.07.2012 в 20:29)
 

1. Можно начать с того что у вас есть, дополняя базу данных таблицами по мере надобности. Т.е. потребуется история игр или турнир - добавите таблицы позже
2. Кроме того, вам не обязательно хранить все игровое поле, вам достаточно хранить координаты шашек, количество которых (а, следовательно, и записей) будет убывать по мере прохождения партии.

  Ответить  
 
 автор: Sfinks   (17.07.2012 в 10:26)   письмо автору
 
   для: pavluxa09   (16.07.2012 в 20:29)
 

А я бы еще хранил координаты шашек не в двух координатах, а одним целым числом от 1 до 64. Например 32 - 4ая строка, 8ой столбец, 19 - 3я строка, третий столбец и т.д. И всю партию можно хранить в 2ух массивах, или одном двумерном. + в нулевом элементе массива можно установить флаг хода. В результате, всю партию можно хранить в одном текстовом поле в виде сериализованного массива (вы же врядли будете организовывать поиск по позициям шашек на доске? значит допустимо.). + 2 поля с ID игроков, + возможно, timestamp начала партии и последнего хода. + id самой партии.

  Ответить  
 
 автор: Valick   (17.07.2012 в 10:48)   письмо автору
 
   для: Sfinks   (17.07.2012 в 10:26)
 

я уже устал говорить, да кто бы меня слушал
достаточно одномерного массива
поиск будет нужен для проверки хода, ну апро дамку я вообще молчу

  Ответить  
 
 автор: pavluxa09   (17.07.2012 в 16:18)   письмо автору
 
   для: 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 в 17:07)   письмо автору
 
   для: pavluxa09   (17.07.2012 в 16:18)
 

Слегка переделал скрипт, теперь в playGround храниться одномерный массив, у которого 0 - пустая ячейка, 1 - пешка сервера, 2 - пешка клиента, 3 - дамка сервера, 4 - дамка клиента. Как реализовать проверку хода? На скрипт приходит переменная FROM указывающая номер элемента от куда передвинуть шашку, и TO - куда передвинуть её.

  Ответить  
 
 автор: odindvatri   (17.07.2012 в 17:13)   письмо автору
 
   для: pavluxa09   (17.07.2012 в 17:07)
 

кто-нибудь,как вывести БД с помощью table?
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=87130

  Ответить  
 
 автор: pavluxa09   (17.07.2012 в 20:02)   письмо автору
 
   для: odindvatri   (17.07.2012 в 17:13)
 

UP

  Ответить  
 
 автор: pavluxa09   (17.07.2012 в 21:38)   письмо автору
 
   для: 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;
}

Помогите дальше дописать

  Ответить  
Rambler's Top100
вверх

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