Уроки по созданию браузерной игры
| |
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. Тоесть можно написать простенькую "Си" программу демон, в которую при начале каждого боя будет поступать информация о нём(что такой бой начался). И это программа будет проверять через заданное время статус боя , и если нужно будет его завершать. Да - с помощью крона это сделать намного проще, но с демоном это решение будет гибким и в дальнейшем можно расширить. Ну а если игра будет иметь успех, то мы сталкнёмся с проблемой производительности , и основную часть игры можно будет перенести в "Си" прграмму(в разы будет производительнее).
|
|
| |
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() отключена. Вот так будет значительно проще..... Добавлено (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 |
участник
Сейчас нет на сайте
| все вы извращенцы подсказывать не буду, иначе не будете развиваться. Можно запросто обойтись безо всяких демонов и т.п. вещей. Демоны вообще на мой взгляд это крайняя мера. Почитайте книжки по теории программирования и алгоритмизации, поверьте, эти теории вполне успешно можно применять на практике и получать хорошие результаты. Добавлено (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 |
уже был
Сейчас нет на сайте
| Доброго времени суток Достаточно долго искал по интернетам достойное решение следующей проблемы: Пользователь запускает некоторый процесс (для простоты - посылает ресурсы другому игроку в игре), причём результат должен проявиться не сразу, а, например, через 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 |
уже был
Сейчас нет на сайте
| Было-бы шикарно увидеть пользование МСКЛ базой... Может я чёто не то скачал но блин у меня даже ярлыка нету запуска этой базы... или как её ваще ющать?
|
|
| |
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 |
Гений
Сейчас нет на сайте
| Спасибо исправил А теперь вот что 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, БД уже существует.
|
|
| | |
In_Search | Дата: Пятница, 04 Июня 2010, 20:30 | Сообщение # 140 |
участник
Сейчас нет на сайте
| Помогите пажалуйста,я вижу,что я не один такой.В панели XAMPP Control Panel,кнопка Admin напротив MySQL неактивна(тоесть не нажимаеться),как это исправить?Подскажите пожалуйста.(если что с меня +) Да и когда ввожу адрес "http://localhost/phpmyadmin/",(альтернативный вариант кнопки Admin) выходит ВОТ такая страница,"В доступе отказано",скажите, может я неправильно что-то сделал? А ладно,сам разобрался .
Сообщение отредактировал In_Search - Суббота, 05 Июня 2010, 14:32 |
|
| |
|