Делаю онлайн игру (да да :)). Есть парочка вопросов, скоере теоритических

Spear

почемучка
Делаю онлайн игру, Есть парочка вопросов, скорее теоритических

Всем привет. Может быть кто-то помнит, примерно пол года назад я создавал подобную темку, задавал несколько вопросов. С того момента было сделано: регистрация, авторизация, чат (со всеми нужными фичами), бои (подача заявок, бой, таблица опыта и прочее. вообщем основа(!) боевой системы), панель настроек персонажей и прочее прочее.
Пока что, правда, даже бета-тест не запускал на общее обозрение - как бы там нибыло, времени у меня было мало и сделана толкьо основа. Вот, это я написал чтобы не думали что все советы уходят в пустую и я зпбросил то, что начал.

И тем е менее огромное кол-во рабыт ещё не сделано, а как реализовать некоторые вещи я не представляю.
То есть представляю но смутно.

Вобщем, не буду тянуть, - вопрос:

как бы это смешно не звучало, в игре ещё не сделана навигация по игровому миру.
Структура которого таковая:

несколько городов (в начале - 2, по мере роста популярности их кол-во будет расти, конечно, думаю, в первый год появится максимум 1 новый город).
Каждый город поделен на районы (около 10 районов на крупный город, 2-3 на мелкий).
В каждом районе - улицы (около 10 на район, зависит от карты).
На каждой улице уже привичные магазины и почие строения.

Собсно вопрос такой - как, черт возьми, это сделать? :( я довольно долго думал, но ничего хорошего не выдумал.

Теперь подробнее о навигации:

игрок сможет переходить с улицы на улицу - возможно 4 варианта перемещения - влево, вправо, вперед, назад. Перемещение будет занить некоторое время, до 5 секунд.

далее - районы. Нужно как-то хранить информация о центральной (дефолтной) улице района. Это нужно для того случая, когда игрок не хочет топать из района в район пешком (через десяток улиц) а воспользуется другими средствами передвижения. Например, нужно попасть из района 1 в район 3 - переместить игрока надо будет в какю-то конкрутную для каждого района улицу. Время передвижения уже будет варьароваться, тут надо будет что-то поинтереснее придумать.

ещё круче - перемещение между городами. Схема та же, + нужно хранить дефолтный (центральный) район города, куда будет попадать игрок (а уже в этом районе выбирать дефлтную улицу). Время - еще больше.

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

вторая часть вопроса - как лучше хрантиь информацию о местоположении юзера?

---
теперь вот приблизительно что я надумал:

в бд есть таблица улиц, схема такая:
id (уник. номер улицы)
cid (номер города, в котором эта улица)
aid (area id - номер района, на котором эта улица)
name (имя, название улицы)
тут же ещё может быть несколько полей, например означающих какой уровень персонажа должен иметь игрок, чтобы попасть сюда.

вторая таблица - возможные варианты перемещений.
id (улицы, с которой мжно перейти)
id улицы, на которую можно перейти
сторона (влево, вправо, вперед, назад).
по этой таблице будет формироваться панелька навигации для каждой улицы. Пугает объем таблицы:
допустим, 3 города * 10 районов * 10 улиц в районе * 4 (колво вариантов перехода с каждой улици) - 1200 записей в таблице... не много, конечно, но в неё будут сотни тысяч запросов.. хотя да, зря волнуюсь, проехали.

Итак это было касательно БД. Теперь мне же нужно ещё для каждой улицы иметь свой (в большинстве члучаев - уникальный) ХТМЛ код - картинка улицы + ссылки на строения на этой улице.
Есть два варианта -
1. хранить хтмл в таблице улиц (скорее всего код будет вида
<IMG src="images/area/ХХХ.jpg" useMap=#mapХХХ border=0>
<MAP id=MAINMAP name=mapXXX>
<AREA shape=RECT alt=НАЗВАНИЕ ЗДАНИЯ coords=КООРДИНАТЫ ССЫЛКИ href="собсно ссылка">
</MAP>)

2. для каждой уилцы создавать свой файл, например 'sys/area/НОМЕР_УЛИЦЫ.php';

но я не знаю - делают ли так все? То есть добавить ккакое-то здание на улицу - придется возиться с ХТМЛ кодом или РНР... вообщем незнаю - просто
мне интересно, как это делается. Я знаю что на форуме есть несколько человек, разработавших онлайн игры, Я ОЧЕНЬ НАДЕЮСЬ что вас не затруднит раскрыть мне секрет, как же все-таки это делается.

Буду с нетерпением ждать ответа. Заранее благодарю всех, кто сможет помочь любыми советами!
 

Alexandre

PHPПенсионер
Собсно вопрос такой - как, черт возьми, это сделать?
1) флеш
2) нарезать кучу гифов

игрок сможет переходить с улицы на улицу - возможно 4 варианта перемещения - влево, вправо, вперед, назад. Перемещение будет занить некоторое время, до 5 секунд.
AJAX или учи флеш.
Вообще большинство игр - флешовые, так что - учи флеш.

-~{}~ 28.04.06 11:14:

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

MuXaJIbI41981

Новичок
Spear можно поинтересоваться на что твоя игра похожа. Это очередной клон БК?
 

Dreammaker

***=Ф=***
Насчёт варианта с БД вполне приемлимо на первый взгляд.
Единственное, что нужно не забывать, что потребуется ещё одна таблица для зданий (чтобы не штамповать описания для каждого здания отдельно, ведь магазины могут быть в разных районах, но при этом картинки расположение на мапе аналогичные, свойства доступа будут аналогичные и т.д.)

Ну а насчёт второго вопроса: использовать карту изображений. Насколько я помню в той же Территории по описанию на которую похожа твоя игра сделано так (хотя могу ошибаться). Плюс ещё в нескольких играх видел использование мапов.

Кроме того, если будет время :) То можно поизвращаться и сделать онлайн редактор карт, на том же аяксе или подобной технологии.

Алгоритм видится примерно такой.
1) Заранее рисуется фон общий для всех улиц (/несколько фонов).
2) Захожишь в редактор выбираешь из превьюх фон.
3) В выпадающем меню Выбираешь тип улицы (перекрёсток, прямая и т.д., тоже заготовленные картинки)
4 )В рамочке подгружается несколько превьюх для выбраного типа улицы. (+ возможно предлагается загрузить свой вариант).
5) Выбираешь превьюху - в центральную часть окна подгружается фон с наложенной на него картинкой улицы (их можно двигать как слои).

6) Аналогично поступаем и со зданиями. Двигаем их размещаем как хочется.

Затем ок и опа через гд генерится нужная картинка улицы.. + в БД заносятся нужные изменения. Навероне всё это проще вручную сделать, но прикольно.

Бред, конечно :)) Но было бы время сам попробовал бы что-то подобное прописать Интересно было бы продумать пути реализации.. :)
 

Alexandre

PHPПенсионер
Dreammaker редактор мапа надо делать на локале, а потом информацию сливать в БД. Нечего трафик отладкой загружать.
 

Spear

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

MuXaJIbI41981
нет, точно не клон БК - меня от всех этих фентези, мечей, гномов и прочего гэ аж выворачивает. Ну да, бой приблизительно будет такой же, хотя по такому принципу можно назвать все игры клонами бк.

Ну а насчёт второго вопроса: использовать карту изображений
ээ... второй вопрос звучал "как мне лучше хранить инфу о местоположении юзера" :)

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

вот так иперемещается все)
а вот как мне теперь узнать что на улице номер 100001, например, фон - такой-то (гофовый), а <MAP>'ы на ней используются такие-то.

То есть как я понял хранить РНР файл со структурой каждой улицы не стоит? то есть структура папок такая:

areas/
areas/city_01/
areas/city_01/street_100001.php

а там уже
<IMG src="images/area/ХХХ.jpg" useMap=#mapХХХ border=0>
<MAP id=MAINMAP name=mapXXX>
<AREA shape=RECT alt=НАЗВАНИЕ ЗДАНИЯ coords=КООРДИНАТЫ ССЫЛКИ href="собсно ссылка">
</MAP>
 

EugeneVC

Новичок
у меня в игре комнаты в базе лежат в 2 таблицах,

1 таблица room - тут название, описание комнаты
2 таблица exits - тут выходы для комнаты в формате
room_current direction room_go
всего 6 выходов.

PS: совет посмотри как хранятся комнаты в различных MUD
 

Dreammaker

***=Ф=***
Alexandre, если игра сидит на гигабитном канале я думаю несколько картинок особо не загрузят канал :) И если дома трафик бесплатный. И ещё, если подумать, что у игры могут быть удалённые работники, то для нескольких человек разнесёных по городам и сёлам бывшего СССР, был бы удобен такой редактор. Сидят себе несколько человек и клепают улицы, районы города. А потом модератор карт заходит просмотрел их результат и допустил. Хотя это опять оффтоп.

Spear
>То есть как я понял хранить РНР файл со структурой каждой улицы не стоит?
Думаю не стоит.
Координаты мапа можно хранить в базе, там же и адресс картинки карты. Потом вытягиваешь данные генеришь хтмлину и выдаёшь юзеру.

Насчёт МУДов - хороший совет.. Код открытый у многих и к тому же поверенный временем.. :)

update: Единственный момент в пользу хранения готовых карт - это кешировать их. вот этот момент можно продумать.
 

Andreika

"PHP for nubies" reader
наймусь улицеклепаталем в онлайн игру! не гербалайф
 

EugeneVC

Новичок
Dreammaker

у меня очень много народу жалуестя что игра жрет траффа 5 мег в час! типа модем и все такое!

а другой мой игродел говорит, что ТРАФИК он не экономит, так как, если у людей есть бабки, то они на хорошем канале, а другие ему не нужны!

PS: пока я сам плач за траффик, буду писать игру легкую!
 

Mozart

Новичок
Автор оригинала: EugeneVC
Dreammaker

у меня очень много народу жалуестя что игра жрет траффа 5 мег в час! типа модем и все такое!

а другой мой игродел говорит, что ТРАФИК он не экономит, так как, если у людей есть бабки, то они на хорошем канале, а другие ему не нужны!

PS: пока я сам плач за траффик, буду писать игру легкую!
Появился вопрос - что за игра такая с 5 мегами траффика? На сколько я знаю, всем известная Линейка жрет меньше (не считая пиковых состояний в игре).
 

Spear

почемучка
Народ, ну ё-мое, где модеры? зачем оффтоп разводить??

-~{}~ 30.04.06 00:17:

Andreika
Mozart
EugeneVC
или по теме, или вообще не пишите,
просто аж взбесило
 

Andreika

"PHP for nubies" reader
Spear
хочу напомнить тебе, мой монохромный друг, что мы находимся в оффтопе и следовательно его и разводим

а ты занимаешся откровенной фикней + сам не понимаешь что спрашиваешь или объяснить не можешь нормально
 

Spear

почемучка
а ты занимаешся откровенной фикней
что именно из того чем я занимаюсь - фигня?

сам не понимаешь что спрашиваешь или объяснить не можешь нормально
я понимаю что справшиваю, но вот объяснить, наверное, все-таки не могу нормально.
Буду по-этапно.

Вообщем решил я делать так:
каждая локация (улица, магазин) будет иметь порядковый номер и храниться в таблице такой структуры:
id - номер
type - улица, магазин (или любое здание)
status - открыто\закрыто
name - название
description - описание
dist - район, в котором находится (стоит ли указывать?)
city - город, в котором находится (стоит ли указывать?)
+ парочку полей, ограничивающих перемещение в эту локацию.

Далее - если это здание, то в зависимости от типа здания запускается фалик.. ну например если банк, то bank.php, если магазин то store.php и так далее.

А вот если это улица то... вот тут незнаю что делать. Все ещё стоит вопрос о том, где хранить ХТМЛ кодкаждой улицы. Опять же вариантов всего, получается, 2 - ХТМЛ в базе или инклудить ХТМЛ файлы.. то есть вприцнипе один хрен - что так что так подключается статика.
Тут проблема номер разЪ - любой фон (всмысле улицы) будет иметь два варианты - дневной и ночной. Так что тут уже просто ХТМЛ не сдлеаешь.
Думал вот что - может сделать ещё отдельную таблицу улиц, в ней будут поля отвечающие за файл картинки днем, ночью, + поле с ХТМЛ кодом?

А может есть какой-то более сложный в реализации но удобный в использовании способ генерации улицы? Например будет ведь таблица связей всех локаций, можно будет получить номера всех локациЙ, на которые можно попасть из этой улицы... может как-то автоматически отрисовавыть MAP html код для каждой улицы:?
 

Dreammaker

***=Ф=***
> может как-то автоматически отрисовавыть MAP html код для каждой улицы
А как по-другому? :) Если игра заработает в промышленных масштабах, то со временем заманаешься переделывать улицы (особенно если они однотипные, а меняются только какие-то элементы). Хоть как-то оно и немного, но вдруг захотелось поменять картинку здания на тридаци улицах :) Уже время..

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

Относительно фона для времени суток. Можно автоматом, в зависимости от времени суток выдавать фон улицы как бекграунд таблицы (слоя), а здания накладывать как слои на эту таблицу (слой).

А пути генерации кода мапа - это уже просто механизм. Когда ты представишь как оно у тебя работать должно до конца, то по идее и придумать алгоритм генерации такого кода не сложно будет.
 

Spear

почемучка
вообщем изучаю навигаюцию различных игр,
самая сложная - в Территории.
Как там ведется учет местоположения непонятно совершенно, ясно одно - система очень гибкая. Будем думать.

В Территории, похоже, все здания, районы и города хранятся так как это хотел сделать я (постом выше) - то есть все в одной таблице. Уже при обработке текущего местоположения движок вычисляет - надо ли сделать просто инклуд какого-то файла, или сделать редирект на него, или вывести в окне навигации какой-то ХТМЛ код. Вообщем голову сломаешь пока додумаешься.

-~{}~ 02.05.06 01:00:

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

-~{}~ 02.05.06 02:00:

Хотел вот что спросить.. вообщем планируется сложная система квестов, поэтому иногда для некоторых персонажей нужно будет немного видоизменять ту часть кода, которая отвечает за навигацию.. таким образом по-моему ничего не остается кроме как по 1 РНР файлу на каждую улицу? :( Есть варианты?
 

Andreika

"PHP for nubies" reader
хорошо хоть что есть уже моделлер и дизайнер
они? http://www.forum.ssauclub.ru/txt/index.php/t1649.html

Хотел вот что спросить..
вот понимаешь ли - ответить те на этот вопрос = спроектировать те игру, да еще и с учетом того, что ты там се придумал, но не говоришь или придумаешь потом
 

Spear

почемучка
не, не они ) своих я нашел в реале :)

вот понимаешь ли - ответить те на этот вопрос = спроектировать те игру, да еще и с учетом того, что ты там се придумал, но не говоришь или придумаешь потом
ну я же не прошу проектировать мне весть проект, кучу умений, боевую систему и экономику :) Просто я не знаю как делать то, о чем спросил, собсно для этого, по-моему, и сделан форум. Если сможешь помочь - буду очень благодарен. Не можешь - не стоит засорять топик
 

Alexandre

PHPПенсионер
...вообщем планируется сложная система квестов, поэтому иногда для некоторых персонажей нужно будет немного видоизменять ту часть кода, которая отвечает за навигацию.. таким образом по-моему ничего не остается кроме как по 1 РНР файлу на каждую улицу? Есть варианты?
у тебя вообще идея подключения модулей не правильная. поиск по форуму по слову MVС.

А вот если это улица то... вот тут незнаю что делать. Все ещё стоит вопрос о том, где хранить ХТМЛ кодкаждой улицы. Опять же вариантов всего, получается, 2 - ХТМЛ в базе или инклудить ХТМЛ файлы.. то есть вприцнипе один хрен - что так что так подключается статика.
Тут проблема номер разЪ - любой фон (всмысле улицы) будет иметь два варианты - дневной и ночной. Так что тут уже просто ХТМЛ не сдлеаешь.
Думал вот что - может сделать ещё отдельную таблицу улиц, в ней будут поля отвечающие за файл картинки днем, ночью, + поле с ХТМЛ кодом?
ХТМЛ - вообще должен быть абстрактным на объект конкретного типа. и хранить его не надо - а необходимо формировать под каждый объект.

и вобще у тебя подход с ХТМЛ - не верный.
 

Spear

почемучка
поиск по форуму по слову MVС
http://phpclub.ru/talk/search.php?s=&action=showresults&searchid=1082470&sortby=lastpost&sortorder=descending

-~{}~ 02.05.06 16:59:

что я хотел сказать - по поиску MVС находится только этот топик. Может лучше объясните как правильно, а не будете посылать в поиск, в котором нет нифига?:(

-~{}~ 03.05.06 06:10:

такс. Вообщем кой-чего надумалось и уже реализую. Но всеравно вопрос о генерации <area> для <map> пока не решен, поэтому если кто-нибудь сможет подсказать - буду благодарен.

-~{}~ 04.05.06 08:44:

вообщем ни до чего так и не дошел, в плане генерации кода <map ...> <area....>

Может все-таки кто-нибудь знает как это делают?
Что я имею на данный момент:
находяс на улице (то есть в локации с типом "улица") получаю набор числовых иденификаторов находящихся на ней объектов + их названия.
например
34 - "Банк 'ROT'"
35 - скотобойня :)
36 - Церковь "Не верю"
(названия на зоду придумались)

нужно сгенерировать код <area> для каждого объекта на улице. Вопрос соотвествующий - где лучше хранить КООРДИНАТЫ, по которым будут генирироваться ссылки?
Может создать вообще отдельную таблицу, структуры, например "street_uotput":
street_id | object_id (на который ссылаемся) | link_type (примая ссылка, попап и вообще сторонняя (для рекламы прямо на игрорвом поле, например)
ну и тут, соостветственно, уже убдет понятно что да как делать - 2 минуты работы.

но делается ли это вообще так или нет?

-~{}~ 05.05.06 21:04:

ап...
 
Сверху