Правильное проектирование БД для боёв в браузерке
|
|
Insane | Дата: Суббота, 24 Марта 2012, 18:50 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Доброе время суток ! Собственно вопрос в следующем ... для проведения боёв (БК-подобные) создаём таблицу в БД, куда заносим результаты ударов, выводим их же в лог боя и т.д. и т.п. ... Всё это понятно и не вызывает проблем, пока бой не окончен. Далее надо сделать расчёт получаемого опыта ... и вот тут возникает вопрос, если бой просто дуэль, то никаких проблем ... берём КБО (коэффициент базового опыта), нанесённый урон и считаем ... но вот если бой групповой, в котором принимают участие персонажи разных уровней, получается надо как-то сохранять отдельно кто и по кому нанёс сколько урона, что в свою очередь вызывает затруднение (по крайней мере у меня) с созданием этой самой таблицы в БД. В общем кто занимался написанием сей гадости, поделитесь опытом и идеями по этому поводу. За ранее благодарен.
P.S.: Надеюсь понятно объяснил, суть вопроса
|
|
| |
ElDarco | Дата: Воскресенье, 25 Марта 2012, 02:22 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| А что тут трудное? Просто храни в БД вместе со своими результатами ударов - урон. Ну и выписывай. Выбирай из бд текущий бой, текущего юзера, и плюсуй все значения ячеек. Вот как то так
|
|
| |
Assasin | Дата: Воскресенье, 25 Марта 2012, 16:08 | Сообщение # 3 |
web-coder
Сейчас нет на сайте
| записывай так group1 логин1|логин2|логин3 group2 логин1|логин2|логин3 damage_group1 123|345|321 damage_group2 873|367|1
|
|
| |
Master_Chief | Дата: Воскресенье, 25 Марта 2012, 17:02 | Сообщение # 4 |
Shoot Space creator
Сейчас нет на сайте
| а лучше использовать такую таблицу:
id // INT(255) PRIMARY_KEY, AUTO_INCREMENT - id записи player // INT(255) - id текущего игрока opponent // INT(255) - id игрока, который нанёс урон damage // INT(2) - количество нанесённого урона
почему для damage размер всего 2? потому что, как я понимаю, нанести хп-урон в 100% с первого удара нельзя, и максимальный порядок соответственно 2
и значения (примерные):
0 15 10 13 1 10 15 26 2 15 25 18 3 25 10 5 4 25 15 60 5 10 25 54
и производить запись при каждом ударе. Да, будет накладно, но зато это более-менее универсальная структура.
Сообщение отредактировал Master_Chief - Воскресенье, 25 Марта 2012, 19:04 |
|
| |
a112 | Дата: Понедельник, 26 Марта 2012, 01:42 | Сообщение # 5 |
участник
Сейчас нет на сайте
| первое что пришло в голову: добавить в таблицу с юзерами 1 поле - счётчик урона. В процессе боя прибавляем туда нанесённый урон, а в конце боя высчитываем опыт и обнуляем счётчик урона - это самое простое решение имхо.
топ браузерных игр
|
|
| |
Insane | Дата: Понедельник, 26 Марта 2012, 22:22 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| Assasin, a112
Плюсовать сразу весь урон не совсем хорошо. Так как к примеру в бою принимают участие персонажи 1,2,3 уровня ... Персонаж 2-го уровня за урон по 3-ке должен получить больше опыта, чем по персу 2-го лвла и так же за урон по 1 уровню меньше. Значит результат каждого удара надо хранить отдельно и уже в конце считать по кому и сколько было урона.
Quote (Master_Chief) как я понимаю, нанести хп-урон в 100% с первого удара нельзя Ну, почему же нельзя .. пример фульный перс старшего уровня против голого )) ... но не в этом суть )
Master_Chief К такой таблице тогда уже надо ещё добавить id боя ... да и вообще слегка её подправить, но как вариант вроде норм ) .. спасибо.
|
|
| |
Master_Chief | Дата: Среда, 28 Марта 2012, 03:06 | Сообщение # 7 |
Shoot Space creator
Сейчас нет на сайте
| Insane, да, ид боя не помешал бы остальное вроде поправлять не нужно.. все поля целочисленные - на диске меньше будет места занимать, после боя можно сразу же очищать, дабы не громоздился мусор.. или спустя какое-то время очищать
|
|
| |
Insane | Дата: Среда, 28 Марта 2012, 20:06 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Quote (Master_Chief) после боя можно сразу же очищать, дабы не громоздился мусор если сразу чистить, то историю боёв нельзя будет посмотреть ... что не очень хорошо ) .. Хотя, как вариант можно просто выносить лог боя в отдельный txt файл )
|
|
| |