|
|
|
| Здравствуйте, уважаемые пользователи форума! Пишу игру дурак на PHP между людьми. Но не как не могу понять самой сути этой игры, в результате игра пишется очень медленно и по сто раз переписывается.
Сейчас я пишу интерфейсы к которым будет обращаться AJAX сообщая действия от игроков. Запланированы следующие интерфейсы:
1. Сделать ход (подкинуть карту). Принимает № карты которой атаковать.
2. Отбиться. Принимает № карты которой отбиться.
3. Пропустить ход. Если пропускает тот кто отбивается, то он решил взять.
4. Перевести. Принимает № карты которой перевести.
Необходимо продумать логическую часть данных интерфейсов. Помогите пожалуйста. | |
|
|
|
|
|
|
|
для: p.pavluxa
(08.08.2012 в 20:46)
| | У вас два игрока играют или игра ведется против компьютера? | |
|
|
|
|
|
|
|
для: cheops
(08.08.2012 в 22:09)
| | Два игрока. То есть всё сводиться с кому что игроки на скрипт передают что они ходтят сделать. А он уже должен решать можно ли им это действие делать в данный момент времени, если да то какие последствия. Вовремя остановить партию. И закончить игру. Вот всю цепочку этой логики нужно к этим четырём интерфейсам написать. Помогите её составить, пожалуйста. | |
|
|
|
|
|
|
|
для: p.pavluxa
(09.08.2012 в 11:45)
| | Время ответа игрока как-нибудь ограничено? Или над ходом каждый игрок может думать произвольное количество времени. Какие инструменты вам доступны? Есть ли возможность задействовать cron? | |
|
|
|
|
|
|
|
для: cheops
(09.08.2012 в 12:42)
| | Время хода игрока ограничено 1 минутой, ну до того я ещё дойду, для этого я храню в базе данных дату последнего действия, и потом уже выбираю список из игр у которых эта дата превышает 1 минуту с вычетом текущей даты, и делается решение. Сейчас это не столь важно.
Задействовать крон не нужно, так как пользователи играющие в игру каждую секунду запрашивают состояние игры у сервера (php скрипта), поэтому cron это будет лишнее.
У меня имеется следующая структура базы данных :
CREATE TABLE IF NOT EXISTS `Durak` (
`iID` int(11) NOT NULL AUTO_INCREMENT COMMENT '№',
`aUsersIDs` tinytext NOT NULL COMMENT 'Подключенные пользователи',
`sTimerDate` datetime DEFAULT NULL COMMENT 'Дата отсчета таймера',
`aUsersData` tinytext COMMENT 'Данные игроков (карты в виде двумерного массива)',
`aCardsPack` tinytext COMMENT 'Колода карт',
`iTrumpCard` tinyint(2) DEFAULT NULL COMMENT 'Козырная карта',
`iWhoseTurn` tinyint(1) DEFAULT NULL COMMENT 'Позиция игрока который ходит',
`iProtectUser` tinyint(1) DEFAULT NULL COMMENT 'Позиция защищающегося игрока',
`aAttackCards` tinytext COMMENT 'Атакующие карты',
`aProtectCards` tinytext COMMENT 'Защищающие карты'
PRIMARY KEY (`iID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Столы игры "Дурак"' AUTO_INCREMENT=1 ;
|
Остаётся продумать логическую цепочку четырёх интерфейсов (к которым ajax будет обращаться когда игрок делает какое то действие). Вот с этим у меня и затруднения.
Ну например интерфейс №1 атаковать картой: атаковать не может игрок который должен отбиваться; если на столе нет карт (массивы aAttackCards и aProtectCards пусты), то атаковать можно любой картой, иначе достоинство карты которой атакуют должно находиться на столе. Далее забираем карту у игрока и добавляем её в список атакующих карт aAttackCards. Далее принимаем решение, если на столе больше 1 неотбитой карты (это значит что игрок который отбивался пропустил ход и тем самым решил загребстись) то оставляем ход текущему игроку до тех пор пока он не вызовет события SKIP (пропустить ход), иначе передаём ход отбивающему игроку.
Ну опять же тут написано не полностью, вот эту полную цепочку нужно составить. Помогите пожалуйста. | |
|
|
|
|
|
|
|
для: p.pavluxa
(09.08.2012 в 13:07)
| | Теме UP | |
|
|
|