Сложная идея - как создать автомобильные гонки для моих плееров игры RPG

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

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

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

1
задан Dave Sherohman 25 April 2010 в 12:52
поделиться

3 ответа

Но эта идея действительно не оптимальна , и она будет жестоко отставать от последнего человека.

Что заставляет вас так думать? «Получите гонку, узнайте статистику персонажей участников, получите статистику автомобилей участников, изучите статистику, чтобы выбрать победителя» - это не большая вычислительная нагрузка. Если вы не запускаете свой сервер на действительно древнем оборудовании и разделяете его со 100 другими приложениями, браузеру пользователя потребуется больше времени, чтобы установить сетевое соединение с вашим сервером, чем вам, чтобы определить результаты гонки. .

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

Всегда помните Правила Клуба оптимизации .

2
ответ дан 3 September 2019 в 01:02
поделиться

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

Есть вопрос об асинхронной обработке с PHP здесь и еще один здесь

Основная идея заключается в том, что страница, которую выполняет последний участник, быстро возвращается (возможно, просто с сообщением, чтобы они знают, что гонка продолжается), но обработка продолжается на сервере.

0
ответ дан 3 September 2019 в 01:02
поделиться

Сложный ответ - как я представляю себе эту игру.

  1. пользователь нажимает кнопку «создать гонку», и он попадает в игровое лобби.
  2. другой пользователь видит список гонок, доступных в настоящее время, нажимает кнопку «присоединиться к гонке»
  3. каждый пользователь, кроме создателя, должен установить флажок «готов». Это можно сделать с помощью ajax. Вы также можете использовать этот фоновый запрос для расчета статистики этого пользователя и обновления базы данных.
  4. каждый пользователь также будет получать ajax-запрос каждую секунду или реже, чтобы узнать, кто еще готов, началась ли игра и т. Д.
  5. создатель игры видит, что все готовы, и нажимает «Гонка!» (все на ajax, вы могли бы дать маленькую гоночную машину, которая медленно движется по экрану, чтобы показать, что все обрабатывается) запрос процесса, который запускает все сложные вычисления , должен выполняться здесь, пока пользователи загипнотизированы эта маленькая гоночная машинка (или просто текст с надписью «Гонки ...»). обновить базу данных, возможно, таблицу с результатами.
  6. на этом гонка окончена, создатель получает ответ ajax от сервера. Каждый из других пользователей, чьи браузеры проверяли сервер каждую секунду или около того, теперь получают ответ с сервера с результатами.

Надеюсь, все это имеет смысл. Если вы еще не используете библиотеку JavaScript, я рекомендую вам это сделать, поскольку они делают кроссбраузерный ajax таким простым.

0
ответ дан 3 September 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: