Суббота, 23 Ноября 2024, 14:44

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Уроки по созданию браузерной игры
B1zDelKinДата: Пятница, 21 Мая 2010, 13:08 | Сообщение # 121
частый гость
Сейчас нет на сайте
Quote (1nferno)
я веду к тому что все скрипты выполняются после какого либо нажатия на ссылку пользователем, соответственно если оба пользователя будут в оффлайне - кем будет вестись запись боя(завершение его например)

С чего Вы вообще это взяли?

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

А можно так, чтобы я просто подумал о ком нить из них и оно в базу записалось?

То есть решение :

"1 - каждый участник имеет в бою таймер раунда и по его истечению проверяется "кто ударил", и в зависимости это этого устанавливается продолжение боя ака "ничья", если оба не ударили, "победа", если не ударил соперник, "проигрыш", если не ударили Вы (первая линия контроля)
2 - если оба в оффе, то ессно таймеров нет, и тогда функцию завершения боя берет на себя доступный Вам шедулер (скорее всего это будет cron), который с выбранным Вами интервалом будет завершать бои, где текущее время раунда > допустимого времени раунда"

Вас не устраивает?

Если достигните успеха в области математической экстрасенсорики... обещайте поделиться!

1nfernoДата: Понедельник, 24 Мая 2010, 16:16 | Сообщение # 122
был не раз
Сейчас нет на сайте
Вот только не надо тут язвить, B1zDelKin, .
Я не утверждаю ,что все что я говорю это факт. Просто хочу разобраться.

Quote
Quote (1nferno)
я веду к тому что все скрипты выполняются после какого либо нажатия на ссылку пользователем, соответственно если оба пользователя будут в оффлайне - кем будет вестись запись боя(завершение его например)

С чего Вы вообще это взяли?

если это не так, тогда не могли бы кратко объяснить ка работают PHP скрипты.
По моему представлению пользователь запрашивает страницу (index.php например) интерпретатор на сервере обрабатывает этот скрипт , выполняет его код и выводит пользователю страницу.

Про

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

А можно так, чтобы я просто подумал о ком нить из них и оно в базу записалось?

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

Да... это будет сложновато , так как надо предусмотреть все места куда воткнуть этот скрипт на проверку окончания боя.
Я думал о cron'е но считаю что это не правильно...

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

Недавно нашёл неплохую альтернативу - cgi.
Тоесть можно написать простенькую "Си" программу демон, в которую при начале каждого боя будет поступать информация о нём(что такой бой начался). И это программа будет проверять через заданное время статус боя , и если нужно будет его завершать.

Да - с помощью крона это сделать намного проще, но с демоном это решение будет гибким и в дальнейшем можно расширить. Ну а если игра будет иметь успех, то мы сталкнёмся с проблемой производительности , и основную часть игры можно будет перенести в "Си" прграмму(в разы будет производительнее).

smile

B1zDelKinДата: Среда, 26 Мая 2010, 11:04 | Сообщение # 123
частый гость
Сейчас нет на сайте
То есть.... cron которым пользуются все и вся для данной цели это "не то"... а демон на Си (уверен Вы имели в виду нечто по серьезнее типа сишарпа) - это выход?)

Подход мне нравится) правда есть одно НО

Quote
Недавно нашёл неплохую альтернативу - cgi.


Сообщение отредактировал B1zDelKin - Среда, 26 Мая 2010, 11:10
1nfernoДата: Пятница, 28 Мая 2010, 19:13 | Сообщение # 124
был не раз
Сейчас нет на сайте
Хммм...
Си(Си++) помоему тоже вполне серьёзно... =))) (вообщем не важно на чём написан будет демон)
Повторяю : для решения проблем с боем - проще cron , но для всего остального ( ну например Движение NPC по локациям (конечно если прикинуть на кроне+ PHP тоже это можно будет сделать ) да малоли чего ещё в игре придётся наворотить) лучше вариант с демоном.

Quote
Подход мне нравится) правда есть одно НО
Quote
Недавно нашёл неплохую альтернативу - cgi.

Ну подскажите тогда .... чем плох этот CGI (FastCGI) и как можно по другому реализовать взаимодействие PHP скриптов и Демона.

Добавлено (28.05.2010, 17:20)
---------------------------------------------
Сам нашёл....

Quote
PHP поддерживает одну операцию выполнения: обратные апострофы (``). Обратите внимание, что это не одинарные кавычки! PHP пытается выполнить содержимое внутри обратных апострофов как команду оболочки; возвращается вывод (т.е. он не просто выдаётся на выходе; он может быть присвоен переменной).

Code
$output = `ls -al`;
echo "<pre>$output</pre>";

Примечание: операция (``) не работает, если включён безопасный режим/safe mode или если shell_exec() отключена.

Вот так будет значительно проще..... biggrin

Добавлено (28.05.2010, 19:13)
---------------------------------------------
Но вот назрел новый вопрос...
Нам нужно какимто образом принудительно перезагрузить страницу пользователя(например на него ктото напал).
Каким образом это можно сделать ??? (допустим перезагрузить страницу при изменении значения в БД).

IcebergДата: Пятница, 28 Мая 2010, 21:17 | Сообщение # 125
был не раз
Сейчас нет на сайте
1nferno,
Самый деревянный способ - бесконечный цикл принудительной проверки, а-ля "не напал ли кто-то на меня".
1nfernoДата: Пятница, 28 Мая 2010, 21:41 | Сообщение # 126
был не раз
Сейчас нет на сайте
Хмм а на чём это можно сделать?
JavaScript?
LucasitoДата: Пятница, 28 Мая 2010, 22:47 | Сообщение # 127
участник
Сейчас нет на сайте
все вы извращенцы smile подсказывать не буду, иначе не будете развиваться. Можно запросто обойтись безо всяких демонов и т.п. вещей. Демоны вообще на мой взгляд это крайняя мера. Почитайте книжки по теории программирования и алгоритмизации, поверьте, эти теории вполне успешно можно применять на практике и получать хорошие результаты.

Добавлено (28.05.2010, 22:47)
---------------------------------------------
Блин, я оказывается на прошлой странице уже подсказал :)))



Скриншоты. Приглашаем бета-тестеров!
Помог? Ставь "+" мне в репу :)
1nfernoДата: Суббота, 29 Мая 2010, 01:34 | Сообщение # 128
был не раз
Сейчас нет на сайте
Lucasito, ты про крон ???
дак мы его уже обсудили =)))
LucasitoДата: Суббота, 29 Мая 2010, 11:13 | Сообщение # 129
участник
Сейчас нет на сайте
Quote (1nferno)
Lucasito, ты про крон ??? дак мы его уже обсудили =)))

крон - это решение "в лоб", очень даже неудачное. При большом кол-ве игроков во время запуска подлагивать будет, или нужно сервак брать с очень большим запасом мощности. Даже через демона лучше решение.



Скриншоты. Приглашаем бета-тестеров!
Помог? Ставь "+" мне в репу :)
kio_homeДата: Воскресенье, 30 Мая 2010, 01:17 | Сообщение # 130
уже был
Сейчас нет на сайте
Доброго времени суток smile
Достаточно долго искал по интернетам достойное решение следующей проблемы:
Пользователь запускает некоторый процесс (для простоты - посылает ресурсы другому игроку в игре), причём результат должен проявиться не сразу, а, например, через 15 минут. Информация о времени завершения записывается в БД и пользователь со спокойной душой уходит спать. Игрок, которому отправили ресурсы, в ближайшие пару лет в игру заходить не собирается. Внимание вопрос: по какому событию лучше всего обработать приход ресурсов?
Насколько я понимаю есть несколько решений:
1. Запустить cron или любое другое приложение на сервере которое будет через какой-либо промежуток времени дёргать php скрипт, который в свою очередь всю эту байду будет обрабатывать. (в этом решении меня смущают непонятки с выбором интервала времени, тк если взять маленький интервал очевидно всё повиснет (в логике моего рассуждения при каждом вызове скрипта мы можем обрабатывать события с временем <= настоящему, иначе при следующем вызове скрипта могут добавиться с "временем смерти" более ранним и повлиять на ход событий нами уже выполненных), а при большом интервале пользователю придётся ждать пока наш скрипт обработает событие, что по логике игры нонсенс + я не нашёл нормального программного решения дёргалки, но это меня меньше всего смущает)
2. Запускать скрипт при любом косвенном или прямом упоминании о любом из этих игроков или о данной операции конкретно. В некоторый момент это всё равно сводится к первому варианту, тк при отсутствии онлайна игроков (а нам интересна именно эта ситуация и отсутствие конфликтов с ситуацией, когда игроки присутствуют) вызываться скрипт чаще всего будет при подведении статистики.
3. Написать приложение, которое с некоторой периодичностью будет подключаться к нашей БД и выполнять все необходимые манипуляции (более элегантное решение варианта 1, но при этом вопрос об интервалах сохраняется).
Написал немного сумбурно, но я думаю, что суть вопроса ясна.
Если кто сталкивался с данной проблемой, не могли бы вы тут или в ЛС оставить некоторые комментарии.
Если решение варьируется в зависимости от количества таких событий будем считать, что событий, одновременно хранящихся в БД с совпадающем "временем смерти", около 10^4, пользователей около 5*10^4, минимальный интервал времени - секунда.


Сообщение отредактировал kio_home - Воскресенье, 30 Мая 2010, 01:21
LucasitoДата: Воскресенье, 30 Мая 2010, 02:14 | Сообщение # 131
участник
Сейчас нет на сайте
У нас в игре использован 2 вариант. Но при подведении статистики игроки не обновляются. Это уже перебор. А вот при просмотре профиля игрока-уже обновляется. Пришлось конечно с алгоритмами попарится, зато не нужно парится с интервалами и излишней загрузкой сервера.


Скриншоты. Приглашаем бета-тестеров!
Помог? Ставь "+" мне в репу :)
1nfernoДата: Вторник, 01 Июня 2010, 14:23 | Сообщение # 132
был не раз
Сейчас нет на сайте
Опять же...
Задача kio_home, решается программой(демоном) =)))
RenegateДата: Среда, 02 Июня 2010, 08:35 | Сообщение # 133
уже был
Сейчас нет на сайте
Было-бы шикарно увидеть пользование МСКЛ базой... Может я чёто не то скачал но блин у меня даже ярлыка нету запуска этой базы... или как её ваще ющать? dry
maker-rusДата: Среда, 02 Июня 2010, 13:29 | Сообщение # 134
Гений
Сейчас нет на сайте
блин вот что у меня пишет MySQL
Quote
Ошибка

SQL-запрос:

/* */ CREATE TABLE `enemy` (
id_enm bigint( 20 ) unsigned NOT NULL AUTO_INCREMENT ,
name_enm CHAR( 32 ) ,
atk_enm INT,
life_enm INT,
def_enm INT,
lov_enm INT,
exp_enm INT,
path_enm CH AR( 32 ) ,
PRIMARY KEY ( `id_enm` )
) TYPE = MYISAM

Ответ MySQL: Документация
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CH AR(32),
PRIMARY KEY (`id_enm`)
) TYPE=MyISAM' at line 10

AssasinДата: Среда, 02 Июня 2010, 13:29 | Сообщение # 135
web-coder
Сейчас нет на сайте
Renegate Если запущен локальный сервер, то в адресной строке браузера нужно ввести путь:
http://localhost/phpmyadmin/ - xampp
http://localhost/Tools/phpmyadmin/ - Denwer
AssasinДата: Среда, 02 Июня 2010, 13:31 | Сообщение # 136
web-coder
Сейчас нет на сайте
maker-rus, а если включить логику и попробовать исправить CH AR на CHAR
maker-rusДата: Среда, 02 Июня 2010, 13:38 | Сообщение # 137
Гений
Сейчас нет на сайте
Спасибо исправил biggrin
А теперь вот что

Quote
SQL-запрос:

CREATE DATABASE testgame DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci

Ответ MySQL: Документация
#1007 - Can't create database 'testgame'; database exists


Тут же кодировку надо менять???
AssasinДата: Среда, 02 Июня 2010, 13:49 | Сообщение # 138
web-coder
Сейчас нет на сайте
Не помешало б знание англ. языка.
Quote (maker-rus)
Can't create database 'testgame'; database exists

Невозможно создать БД testgame, БД уже существует.
maker-rusДата: Среда, 02 Июня 2010, 13:52 | Сообщение # 139
Гений
Сейчас нет на сайте
Аааа biggrin эт значить я тупой! smile cool
In_SearchДата: Пятница, 04 Июня 2010, 20:30 | Сообщение # 140
участник
Сейчас нет на сайте
Помогите пажалуйста,я вижу,что я не один такой.В панели XAMPP Control Panel,кнопка Admin напротив MySQL неактивна(тоесть не нажимаеться),как это исправить?Подскажите пожалуйста.(если что с меня +)
Да и когда ввожу адрес "http://localhost/phpmyadmin/",(альтернативный вариант кнопки Admin) выходит ВОТ такая страница,"В доступе отказано",скажите, может я неправильно что-то сделал?

А ладно,сам разобрался dry .

Сообщение отредактировал In_Search - Суббота, 05 Июня 2010, 14:32
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг