Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
1

проста онлайн игра для двоих игроков

27.09.2013, 00:51. Просмотров 1951. Ответов 6
Метки нет (Все метки)

Задача сделать игру - камень, ножницы, бумага.

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

Хочу получить советы по проектированию и структуре базы данных и реализации на php/
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2013, 00:51
Ответы с готовыми решениями:

Как создать простейшую онлайн браузерной игру для двоих
Добрый день, уважаемые форумчане! Подскажите, пожалуйста, как создать многопользовательскую...

Игра на двоих
Есть тема, сделать игру на двоих, типа шашек или шахмат, с очередностью ходов. Чтобы можно было...

Как узнать, сколько онлайн игроков на всех игровых серверах в таблице
Имеется таблица вида: id, ip, port В ней хранятся игровые серверы. Далее. Я могу получить...

Игра для двоих игроков
Здравствуйте! Хочу сделать приложение во флеше для двоих игроков, играющих удаленно друг от друга...

Онлайн игра на двоих
Здравствуйте! Есть игра , позволяющая играть двум игрокам с одного компьютера. А как сделать так...

6
romchiksoad
1952 / 791 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
27.09.2013, 22:28 2
nepster, ну, если ресурсы не жмут, то можно так:
1) таблица для заявок. Поля: id uid1 uid2 confirm wid moves
2) при создании заявки добавляется строка в эту таблицу и пишется uid1( первый игрок )
3) при приеме заявки( в ссылке должен быть id из этой таблицы( или еще где-то ), в общем нужно как-то идентифицировать с кем и по какой заявке играть хотим )
4) для uid1 после подачи заявки ставим периодическое обновление статуса заявки с сервера. Если confirm равен 0, то еще не приняли заявку, если 1, то приняли и показываем uid1 вопрос: хочет ли он с ним играть: да - обновляем это поле и ставим в него 2, после чего загружаем форму с игрой и ждем второго игрока. Он добавиться автоматически после первого же обновления данных между ним и сервером. продолжительность зависит от того какую периодичность обновления мы выберем
5) сама игра будет состоять из формы, к примеру с input type="radio" * "Количество вариантов хода" и кнопкой "ход"
6) moves хранит в себе все ходы сделанные игроками и представляет собой сериализованный массив, т.е. строку, вида:
PHP
1
2
3
4
5
6
$moves = array(
    array( uid1 => mid, uid2 => mid ),
    array( uid1 => mid, uid2 => mid ),
    array( uid1 => mid, uid2 => mid ),
    array( uid1 => mid, uid2 => mid ),
);
где mid это value из radio формы ( лучше, если int, дальше рассматривается случай с int )
7) при каждом запросе на сервер мы получаем этот массив из БД, десириализуем его и смотрим, что в нем. Нас всегда интересует последний элемент массива, по этому сразу идем туда:
$last_move = end( $unserialized_moves );
8) имеем такой массив с ходами:
PHP
1
2
3
4
5
6
7
8
9
10
$points = array();
$points[0] = array(//rock
    'draw', 'win', 'lose'
);
$points[1] = array(//scissors
    'lose', 'draw', 'win'
);
$points[2] = array(//paper
    'win', 'lose', 'draw'
);
Проверять так:
PHP
1
2
3
4
5
6
7
8
9
switch ( $points[mid1][mid2] ) {//ходы игроков полученные из последнего элемента массива
    case 'draw'://return to game
        break;
    case 'win'://uid1 win
        //Отправляем запрос на апдейт поля wid, в которое пишем uid1 и сообщаем, что игра закончена
        break;
    case 'lose'://uid1 lose
        //Отправляем запрос на апдейт поля wid, в которое пишем uid2 и сообщаем, что игра закончена
}
Объяснить мне сложно как это работает В общих чертах, логика такая:
В массиве $points содержаться комбинации игры
0, 1, 2 - это указатели на камень, ножницы бумага( value из radio ) и каждый из этих элементов содержит в себе массив, в котором таким же образом упорядочены исходы игры и ключами являются теже value radio, только в значениях у них прописано, что будет если.. К примеру, если первый игрок выбрал камень ( value radio = 0 ), а второй игрок выбрал бумагу( value radio = 2 ) и мы подставим эти значения в $points. то на выходе получим результат хода... Объяснить сложнее, чем сделать...)) но, надеюсь, все понятно)
Далее мы можем вести статистику по количеству игр, побед и, соответственно, проигрышей( разница кол-во игр минус кол-во побед )
Кол-во побед можно узнать сделав запрос count с where wid=uid
Может и еще, что можно придумать со статистикой, но, думаю, этого достаточно будет

Добавлено через 9 минут
Ах да, чуть не забыл) при каждом обращении к скрипту нужно добавлять или обновлять содержимое массива $moves и сохранять его сериализованную версию в таблице БД, забыл сразу написать) а определить, что не все походили можно путем определения кол-ва элементов в последнем массиве $moves.
1
nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
28.09.2013, 00:11  [ТС] 3
Смотрите пока алгоритмы давайте опустим. Вначале пройдемся по теории:


Изначально планировка такая:

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

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

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

HTML5
1
2
3
4
5
6
7
8
9
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 запись для общей статистики. Временная таблица нужна, что бы пользователи видели статистику во время игры.



Как вам такой вариант. По интерфейсу, конечно же организую красивесько все на jquery + html5+ css3
Нужно решить вопрос по взаимодействие клиент-сервер, копал в сторону кометов. FLASH сразу выкидываю, как флеш игры так и комет через флеш, вообще хочу похаранить данную технологию.
0
romchiksoad
1952 / 791 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
28.09.2013, 00:43 4
Цитата Сообщение от nepster Посмотреть сообщение
Нужно решить вопрос по взаимодействие клиент-сервер, копал в сторону кометов. FLASH сразу выкидываю, как флеш игры так и комет через флеш, вообще хочу похаранить данную технологию.
Что за "кометы"? Мне не понятно в этом контексте.
Я считаю, что вести все эти "логи" вообще не имеет смысла. Для Вашей идеи нужно полностью пересмотреть структуру БД. Нужно подумать немного.
0
nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
28.09.2013, 01:23  [ТС] 5
comet - постоянное соединение клиент-сервер. Как пример на сайте onlineigry.com. Там это реализовано через флеш, тоеть сами игры написанны на php+js, а вот открытие сокетов соединения с помощью флеш, тут нужно отойти от флеша.

Вообще если будет кому-то интрересно, можно попробовать открыть опен сорс проект и написат ьпару таких вот игр. Собственно будет интересно + опыт, ну и получим скрипты.
0
romchiksoad
1952 / 791 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
28.09.2013, 02:45 6
nepster, ах вот Вы о чем
0
nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
28.09.2013, 13:55  [ТС] 7
Ну в общем буду разбираться, если будет интересно, пишите в лс.
0
28.09.2013, 13:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2013, 13:55

Переделать игру для двоих игроков
Здравствуйте, пишу проект текстовую игру на летнюю практику. Показал его не доделанный...

Какие есть игры на двоих и более игроков?
Какие есть игры на двоих игроков? На одной клавиатуре! Подскажите если кому не трудно!(Не...

Как сделать сервер для игры 3D на домашнем ПК хотя бы для трех игроков онлайн
Уважаемые программисты я изучаю игровой движок Quest3d .У меня есть желание сделать онлайн игру....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.