Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > камень, ножницы, бумага для двоих


Автор: nepster 26.9.2013, 23:52
Задача сделать игру - камень, ножницы, бумага.

Следовательно принцип такой:
я создаю заявку на игру, и жду. 
ко мне заходит 2 игрок и начинается игра.

Хочу получить советы по проектированию и структуре базы данных и реализации на php/ 

Автор: Another 27.9.2013, 01:26
Первая таблица - Игры.
Структура - ID | Пользователь 1(ID) | Пользователь 2(ID) |
Пользователь 1 - отправил заявку, пользователь 2 - NULL
Если не NULL то подключиться к игре невозможно.

Вторая таблица - пользователи. 

Третья таблица - лог игр. Структура - ID | ID игры | Пользователь 1 (что выбрал) | Пользователь 2 (что выбрал) | Этап (если нужно  несколько этапов)

Далее уже остается только php.
Первый пользователь выбирает заявку, заходит в игру и обновляется ячейка Пользователь 2(ID).
Далее он выбирает действие (1,2 или 3 (камень, ножницы или бумага)), ищет в бд этап 1 с ID игры, если находит то обновляет ячейку, если нет то создает запись.

Там же и проверки что бы знать куда писать (приглашенный или пригласивший(если ID совпадает с...))

Принцип такой, я думаю.

Автор: ksnk 27.9.2013, 07:26
Цитата(nepster @  26.9.2013,  23:52 Найти цитируемый пост)
я создаю заявку на игру, и жду. 
ко мне заходит 2 игрок и начинается игра.

Откуда возьмется второй игрок? Это может быть случайный посетитель сайта, увидевший надпись "игра ждет второго участника", а может быть знакомый, которому заслана ссылка по скайпу. 

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

Нужна ли база? Для сохранения состояния такой  игры достаточно ключика в мемкэше. Вот результаты сохранять для истории - база нужна.

Автор: georgiy11 27.9.2013, 08:37
Node.js и без БД, по соединениям, если конечно не нужна статистика.

Автор: nepster 27.9.2013, 14:39
Изначально планировка такая:

Пользователь заходит на сайт (сайт игр). Регистрируется. К примеру у нас есть 10 пользователей на сайте и несколько игр. Будем приводить пример на "Камень ножницы бумага".

Например я захожу в игру КНЖ, создаю новую заявку и ожидаю второго игрока. 

примерная таблица "заявки"
Код

id 
тип игры, возможно игр будет несколько 
пользователь, который создал заявку
время создания заявки
для скольки пользователей игра, для 2, 3 или 4 
пользователь 2 
пользователь 3 
пользователь 4
метка: заявка в ожидании, режим игры, игра закончена 
 

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

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

Теперь вопрос по логам: по сути если вести логи всех игр, это будет полный завал базы бесполезной инофрмацией. 
Представте 100 человек играет в КМЖ и по серверу атакая с воздуха бесполезной информацией, кто чтомпоставил. 

Поэтому договариваюсь так, когда начинается игра,  мы создаем временную таблицу в которой и будет эта статистика, а после игры мы запишим в основную статистику, просто сколько раз выиграл пользователь 1 и сколько раз выиграл пользователь 2, а временную талицу удалим после окончания игры. 


Итак в идеале у нас выходит:

Я захожу в КМБ, создаю заявку и указываю, что играем до 10 например. (кто наберет 10 очков, тоесть выиграет 10 раз считается победителем игры)

Заявка создана, ожидаем 2 пользователя или 3 или 4. (допустим могут играть от 2 до 4)

Все пользователи на месте, 1 пользователь подтверждает игру 

Начинается игра, создана временная таблица, идет игра. 

К примеру пользователь 1 набирает 10 очков и выигрывает. Игра закончена. 

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

Получается например они за час сыиграли 200 раз. Вместо 200 записей в базе, разместим 1 запись для общей статистики. Временная таблица нужна, что бы пользователи видели статистику во время игры.  

Автор: Elfet 2.10.2013, 11:47
Ну нет.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//камень-ножницы-бумага-для-двоих-id52449eecae2015666b000000#findElement_E7045_524bdd8fae20154805000320_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)