Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844

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

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

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

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

Хочу получить советы по проектированию и структуре базы данных и реализации на php/
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2013, 00:51
Ответы с готовыми решениями:

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

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

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

6
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
27.09.2013, 22:28
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  [ТС]
Смотрите пока алгоритмы давайте опустим. Вначале пройдемся по теории:


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

Пользователь заходит на сайт (сайт игр). Регистрируется. К примеру у нас есть 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
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
28.09.2013, 00:43
Цитата Сообщение от nepster Посмотреть сообщение
Нужно решить вопрос по взаимодействие клиент-сервер, копал в сторону кометов. FLASH сразу выкидываю, как флеш игры так и комет через флеш, вообще хочу похаранить данную технологию.
Что за "кометы"? Мне не понятно в этом контексте.
Я считаю, что вести все эти "логи" вообще не имеет смысла. Для Вашей идеи нужно полностью пересмотреть структуру БД. Нужно подумать немного.
0
 Аватар для nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
28.09.2013, 01:23  [ТС]
comet - постоянное соединение клиент-сервер. Как пример на сайте onlineigry.com. Там это реализовано через флеш, тоеть сами игры написанны на php+js, а вот открытие сокетов соединения с помощью флеш, тут нужно отойти от флеша.

Вообще если будет кому-то интрересно, можно попробовать открыть опен сорс проект и написат ьпару таких вот игр. Собственно будет интересно + опыт, ну и получим скрипты.
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
28.09.2013, 02:45
nepster, ах вот Вы о чем
0
 Аватар для nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
28.09.2013, 13:55  [ТС]
Ну в общем буду разбираться, если будет интересно, пишите в лс.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2013, 13:55
Помогаю со студенческими работами здесь

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

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

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

Игра для нескольких игроков
Можно ли создать игру для нескольких игроков в lazarus?Если да,то как?

Игра для двух игроков
Здравствуйте! Меньше месяца учусь программированию на С++ и раньше дел с подобным не имел. Для того чтобы узнать свои возможности...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru