| Правильное проектирование БД для боёв в браузерке | 
|  | 
| 
| 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 файл )
 |  |  |  |  |