Всем привет. На днях загорелся идеей создать браузерную онлайн игру с элементами real-time. Но мне, к сожалению не понятен алгоритм подсчёта, да и ни когда не сталкивался с этим. Сейчас всё объясню на примере: Допустим, у нас есть игрок. Он что-либо начинает делать (например, строить здание) и через какое-то время (время на постройку берётся, например, из БД) оно будет построено. И как всё это посчитать? Какой примерный алгоритм и какая БД должна быть? Больше волнует как я должен записывать данные и как считывать. Буду использовать - PHP, MySQL + JS (если потребуется). Пожалуйста, объясните. Если нужно что-либо описать поподробней - напишу.
Сообщение отредактировал dima9595 - Понедельник, 30 Июня 2014, 10:14
с php конечно поизголяться придется для реал-тайма, но в принципе реализуемо, при начале строительства пишешь в базу время начала и рассчитанное время окончания, аяксом периодически дергаешь сервер и сравниваешь текущее время на сервере со временем завершения строительства, ну и при обновлении страницы тоже сравниваешь это время, а пользователю можно и простой счетчик с обратным отсчетом на джаваскрипте повесить, которому при загрузке странице отдаешь остаток времени до завершения Разработка и продвижение сайтов. Дизайн
А не сильная ли нагрузка будет на сервер? Есть ли ещё способы?
WebSocket. Только это никому не нужно. Такие вещи делаются, как описал lvovand. Хранится время начала постройки в БД, аналогично храним, сколько по времени нужно строить. Обновляем остаток в двух случаях: 1. Пользователи хотят видеть прогресс(если у нас оставшееся время отражается где-нить далеко не на главной странице, смысл дергать сервер постоянно и проверять остаток? Когда юзер зайдет посмотреть, сколько осталось- тогда и покажем) 2. Переодически проверяем, завершилось или нет. Тут период нужно подобрать по времени постройки. Если Дом строится в течение 10 дней, то можно спокойно проверять на завершенность раз в минуту- такая задержка будет незаметна.
Делать либо аяксом, либо веб-сокеты, либо планировщик. Я бы выбрал первый вариант, ибо дешево и сердито, да и работать будет.
Vinchensoo, понятно. Спасибо. Теперь появился ещё 1 вопрос: Допустим, за постройку здания требуется очки работы. Я хотел что бы они восстанавливались раз в 5 минут. Лучше же воспользоваться планировщиком, или есть ещё способы!?
Допустим, за постройку здания требуется очки работы. Я хотел что бы они восстанавливались раз в 5 минут. Лучше же воспользоваться планировщиком, или есть ещё способы!?
Ну, опять же, способ-то не один. Либо планировщик, либо при любом действии, связанном с использованием очков, мы высчитываем, сколько добавить и добавляем. Но этот способ ниразу не тривиальный с точки зрения логики и поисков ошибок, если возникнут.
Я не знаю, как это делается на пхп, на джаве я бы взял планировщик и задал ему событие, раз в 5 минут обновлять данные по всем очкам работы. Вот.
dima9595, я еще что-то затупил немного, прошу прощения, есть еще более каноничный способ, если вы более-менее разбираетесь в базах данных. Можно сделать триггер. Но тут вопрос логики: должны ли бонусы начислятся только за время работы сервера или постоянно, даже если он в оффлайне. Но способ, наверное, наиболее подходящий.
Допустим, за постройку здания требуется очки работы. Я хотел что бы они восстанавливались раз в 5 минут. Лучше же воспользоваться планировщиком, или есть ещё способы!?
Для этого используется cron. Более оптимальных способов, насколько мне известно, нет.
Более оптимальных способов, насколько мне известно, нет.
Тригеры норм. У нас на некоторых проектах по 50-70% бизнес-логики написано на хранимых процедурах. Но у нас- не игры. Cron- это вроде как раз планировщик? Я далек от мира пхп)
Например, у них на серверах. Я лично там не работал, но много друзей и знакомых работает) В мире энтерпрайза- это нормально, взять оракл и писать логику на хранимых процедурах) А так- ссылки ничего не дадут, это же не опенсорс, к тому же, заказная разработка. Но это уже не по теме топика
Всем привет. На днях загорелся идеей создать браузерную онлайн игру с элементами real-time. Но мне, к сожалению не понятен алгоритм подсчёта, да и ни когда не сталкивался с этим. Сейчас всё объясню на примере: Допустим, у нас есть игрок. Он что-либо начинает делать (например, строить здание) и через какое-то время (время на постройку берётся, например, из БД) оно будет построено. И как всё это посчитать? Какой примерный алгоритм и какая БД должна быть? Больше волнует как я должен записывать данные и как считывать. Буду использовать - PHP, MySQL + JS (если потребуется). Пожалуйста, объясните. Если нужно что-либо описать поподробней - напишу.
Алгоритм. Создается БД - Temp Build к примеру- она нужна, чтобы в ней появился обратный отсчет. На примере зданий - все здания имеют сначала уровень 0. и условие такое в build.php.. что уровень здания X=+1 Алгоритм простой. По истечению времени стройки, уровень здания X повышается на 1 Помогаю чем могу и прошу взаимной помощи) DCH - сайт разработчиков игр(новый проект)