Вторник, 22 Октября 2019, 01:26

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Программирование .NET » Создание инвентаря персонажа ((архитектура БД))
Создание инвентаря персонажа
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
частый гость
Сейчас нет на сайте
Мм? Нет, спасибо, это не очень относится к теме smile

А что по сути темы: я остановился на этой концепции инвентаря - написав её и парочку других сравнил производительность и объем хранимых данных. Эта самая оптимальная.


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
частый гость
Сейчас нет на сайте
Это бы хорошо, если бы инвентарь был лимитирован определенным числом ячеек. К сожалению, в моей игре он сделан по типу инвентаря фалаута.
Я вечером покажу код, как я сделал работу со строками, и может чего еще придумаю по твоим советам smile


ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю.
Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
XimikSДата: Понедельник, 26 Июля 2010, 13:58 | Сообщение # 8
участник
Сейчас нет на сайте

если не поленишься)

Добавлено (26.07.2010, 13:58)
---------------------------------------------
в своем инве я делал так - создавал структуру(ака класс) инва, предмета, и частей оформления с неким API к нему)

Форум игроделов » Программирование » Программирование .NET » Создание инвентаря персонажа ((архитектура БД))
  • Страница 1 из 1
  • 1
Поиск:

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