Создание инвентаря персонажа
| |
SoWa | Дата: Четверг, 22 Июля 2010, 00:34 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Доброго времени суток! Занимаюсь разработкой браузерки. Дошло у меня дело до создания инвентаря и возникла проблема: а как его грамотно и оптимально сконструировать? В 2 уроках по созданию браузерок подглядывал концепции - не впечатлило. Итак, из чего я исхожу: Есть несколько типов предметов со своими id: 1-оружие, 2-броня, 3-пойло, 4-ресурс, 5-шлак. id предмета формируется из id группы и порядкового номера. Но это и не важно. Предметы обладают так-же какими-то характеристиками и уникальными id и все хранятся в таблицах. Очень важно для меня учитывать количество одинаковых предметов в инвентаре. Так же важно, что инвентарь не фиксированной длины, т.е. в нем может быть 2 предмета по 50кг или 100 предметов по 1кг, или 1000 предметов по 0.1кг(с тысячей я погорячился, по для примера :)) Мое предположение концепции: Таблица для инвентаря: CREATE TABLE `PlayerBackpack` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11), `Gold` int(11) COMMENT 'Золото', `Weapon` int(11) COMMENT 'Надетое оружие(ид)', `Armor` int(11) COMMENT 'Надетая броня(ид)', `BCKP` varchar(200) COMMENT 'Через запятую ИД вещей', `Count` varchar(200) COMMENT 'Через запятую количество вещей', PRIMARY KEY(`id`) ) В Items через разделитель держать id предметов персонажа, а в Count через разделитель на соответствующих местах количество. Так как серверная часть игры на PHP, то не составит труда получать эти две стоки, разделять их функцией explode, и получать пару вещь-количество. Возможно вы предложите лучшую концепцию?
ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю. Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
|
|
| |
Pavel123 | Дата: Суббота, 24 Июля 2010, 21:45 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| Нужна 3d модель?
Делаю спрайты к 2d играм:> ЗАХОДИТЕ НА САЙТ game-maker.ru!!! Я улыбчивый и злой монстр.
|
|
| |
SoWa | Дата: Суббота, 24 Июля 2010, 22:06 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Мм? Нет, спасибо, это не очень относится к теме А что по сути темы: я остановился на этой концепции инвентаря - написав её и парочку других сравнил производительность и объем хранимых данных. Эта самая оптимальная.
ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю. Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
|
|
| |
lvovand | Дата: Суббота, 24 Июля 2010, 22:07 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| SoWa, строки могут подвесить базу или Apache при большом онлайне,и неудобно изменить что-то в инвентаре, лучше числами обходиться, в таблице инвентаря, например, есть id записи, id вещи, кол-во вещей и id персонажа, и манипулируешь уже записями, фильтруя по id персонажа, а надетые вещи - либо статус сделать типа 0 - в рюкзаке, 1 - одета, либо таблицу отдельно сделать с надетыми вещами и связать через id персонажа
Разработка и продвижение сайтов. Дизайн
|
|
| |
SoWa | Дата: Воскресенье, 25 Июля 2010, 00:07 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Если я правильно понял идею, то это будет примерно так: CREATE TABLE `PlayerBackpack` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11), `item_id` int(4), `item_count` int(4), PRIMARY KEY(`id`) ) Тогда предположим, что есть 2 игрока, у каждого есть по яблоку. Тогда в БД будет содержаться 2 строки: id=>1 user_id=>0001 item_id=>"apple" item_count=>1 id=>2 user_id=>0002 item_id=>"apple" item_count=>1 А если у каждого по несколько разных фруктов: id=>1 user_id=>0001 item_id=>"apple" item_count=>1 id=>2 user_id=>0001 item_id=>"grape" item_count=>1 id=>3 user_id=>0001 item_id=>"orange" item_count=>1 id=>4 user_id=>0002 item_id=>"strawberry" item_count=>1 id=>5 user_id=>0002 item_id=>"lime" item_count=>1 id=>6 user_id=>0002 item_id=>"cherry" item_count=>1 Вот меня пугает, как БД разрастется. Строками бы хранилось id=>1 user_id=>0001 BCKP=>"apple,grape,orange" Count=>"1,1,1" id=>2 user_id=>0002 BCKP=>"strawberry,lime,cherry" Count=>"1,1,1" Ориентировочное количество предметов в инвентаре у каждого персонажа порядка 10-30 Итого, на 1 пользователя 10-30 записей в БД. Вот и вопрос: что для БД будет быстрее - выбрать из огромной таблицы одну запись, или выбрать из маленькой две, но громоздких.
ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю. Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
|
|
| |
lvovand | Дата: Воскресенье, 25 Июля 2010, 11:10 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| ну даже взять по 30 предметов у скажем 10000 персонажей, получаем 300000 записей, чтобы не разрасталась ненужные записи удаляешь, а также все числовые поля (id персонажа, id вещи) делаешь индексными, и со скоростью будет норм. можно сделать таблицу для инвентаря для каждого персонажа такого плана (id персонажа, id вещи1, кол-во вещей1, id вещи2, кол-во вещей2) и т.д. т.е. если 30 вещей, то 60 полей для вещей + поле для персонажа, тогда таблица разрастаться так шибко не будет и со строками возиться не надо. со строками больше гемора вот например apple,grape,orange, - 1,1,1, если не стало грейпа, то тебе надо либо строку 1,1,1 переделать в 1,0,1, либо изменять количество переменных, с числами в этом плане проще, обратился по id и вперед. Можно накатать какой-нибудь скрипт для теста и закинуть в базу пару сотен тысяч записей, тогда наглядно видно будет. По своему опыту скажу, админю сайт, где база пользователей около 500000 и в онлайне в среднем от 100 до 3000 человек, так по максимому от строк отказываться приходиться, везде где можно оставляя индексные числовые поля.
Разработка и продвижение сайтов. Дизайн
|
|
| |
SoWa | Дата: Понедельник, 26 Июля 2010, 13:30 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Это бы хорошо, если бы инвентарь был лимитирован определенным числом ячеек. К сожалению, в моей игре он сделан по типу инвентаря фалаута. Я вечером покажу код, как я сделал работу со строками, и может чего еще придумаю по твоим советам
ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю. Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
|
|
| |
XimikS | Дата: Понедельник, 26 Июля 2010, 13:58 | Сообщение # 8 |
участник
Сейчас нет на сайте
| если не поленишься)Добавлено (26.07.2010, 13:58) --------------------------------------------- в своем инве я делал так - создавал структуру(ака класс) инва, предмета, и частей оформления с неким API к нему)
|
|
| |
|