2012-01-27 2 views
2

Правильно, я пытаюсь создать систему, в которой пользователь может что-то сделать, но затем должен подождать, пока все остальные пользователи в таблице mysql не сделают свой ход , т.е.Возможные способы создания пошаговой системы с использованием PHP/MySQL

user1 делает ход, user2 и 3 должны ждать user2 делает шаг, пользователь 1 и 3 должны ждать user3 делает шаг, пользователь 1 и 2 должны ждать user1 делает шаг ...

Один из способов Я думал о том, чтобы дать каждому из пользователей число (от 1 до общего количества игроков, скажем, 6), а затем, когда игрок совершает ход, установите их число на максимальное число (6) и уменьшите всех остальных номер один, поэтому тот, у которого минимальное число, является единственным, кто может играть.

Это моя единственная идея, есть ли простой или альтернативный способ?

+0

Я думаю, что программисты.stackexchange.com - лучшее место для этого вопроса. –

+0

Согласовано с Тоби; из stackoverflow. [meta] (http://bit.ly/zrmGDQ): «Вопросы о переполнении стека почти все имеют исходный код в вопросах или ответах. Это намного реже (хотя, конечно, ОК) для вопроса программистов, который должен содержать исходный код." – mzhang

ответ

1

Мое предложение было бы просто сохранить дату последнего перемещения как дату. Когда вам нужно проверить, может ли пользователь двигаться, просто выберите из таблицы всех других игроков, где последняя дата перемещения меньше или равна последней дате перемещения текущего игрока. Если количество строк не равно 0, то игрок еще не может двигаться.

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

0

У вас может быть таблица со столбцом hasMoved tinyint(1) required default 0 и запрос для where hasMoved == 0; если запрос возвращает значение null, все игроки переместились.

(Примечание: это основано на «должен ждать для всех остальных пользователей», а не для строгого порядка ходов - т.е. «A» должен двигаться перед «B» должны двигаться до того «C» и т.д.)

Кроме того, запросы с использованием этого метода несколько медленны и (для меня) кажутся излишне ресурсоемкими - возможно, подумайте об использовании Ajax?

0

Введите номер последовательности игр, который начинается с нуля. Имейте «последний перемещенный» номер для каждого игрока. Когда игрок перемещается, установите их «последний перемещенный» номер, равный порядковому номеру игры. Как только каждый игрок переместится, увеличьте порядковый номер игры.

Возможно, вы захотите использовать тайм-аут, иначе игрок, который не двигается, может задержать других игроков на неопределенный срок.

0

Сначала я определял $ sequence, вычисляя скорость. Затем сравнивая скорости, чтобы определить порядок. Затем используйте заказ для отправки уведомлений для их перемещения. Используйте временную метку, чтобы гарантировать, что пользователь не займет больше одного дня или даже долго, для этого вам понадобится задание cron.

Имейте переменную или массив, удерживая первую n последней последовательности, чтобы вы могли легко перемещать последнего перемещенного игрока на задний план без смешивания заказов uP.

Проверьте страницу порядка игроков и не разрешайте действие, если оно не равно 1 или 0. Убедитесь, что вы дезинфицируете входные данные, поэтому никаких манипуляций не существует. Затем вставьте форму, графику и игровые уравнения.

0

Вы можете сохранить дату-время последнего хода каждого пользователя. Поэтому, когда вы DESC сортируете эту таблицу по этому столбцу даты, вам нужно будет получить только первую строку результата, которая будет содержать идентификатор разрешенного для перемещения игрока перемещения.

1

Ваше предлагаемое решение кажется немного окольным:

  • Вы обновляя + чтение каждому игроку каждый ход, когда минимальная информация, необходимая для поддержания является , чей ход это.
  • Вы теряете информацию о заказе игрока, когда кодируете информацию о следующем повороте.

Раствор высокого уровня:

  1. Создать games таблицу, по одной строке за игру, с колонной, как INT currentTurn
  2. Создать gameUsers таблицу на основе за игрой, связаны к его игре в games
  3. ли присвоить каждому из п пользователей в gameUsersINT playerOrder в диапазоне [1-п]
  4. только принимает переход от playerN если playerN == "SELECT playerID FROM gameUsers WHERE playerOrder = currentTurn"
  5. После успешного переезда: "UPDATE games SET currentTurn = currentTurn + 1 WHERE game = thisGame"

я считаю выше структура таблицы является хорошим объектно-ориентированное представление фактическая игровая модель. Вы можете занести другие вещи в игру в games, как победитель, длина, дата и т. Д. Простите pseudoSQL.

Смежные вопросы