Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 19.05.2011, 19:43   #1
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Сообщение Decay Buff

Возможно, кому то это пригодится.

При создании РПГ игры рано или поздно придется занятся заклинаниями. Некоторая часть из них - баффы. Как обычно работают баффы?
Какое нибудь заклинание с определенной силой существует некоторое время (пример - увиличение интеллекта на 150 в течении 10 секунд).
Такая система используется практически во всех играх. Однако это не всегда удобно.

Например: у героя есть 2 заклинания - 100 урона ядом в течении 10 секунд и 200 урона ядом в течении 15 секунд. Герой использовал на противника первое заклинание, а затем второе. Что должно произойти? Старое заклинание должно заменится новым? Или останется старое? А может сложить их? Или стоит просто обновить время действия? Непонятно!

Предлагаю такую систему баффов:
баффы одного типа суммируются, совершают свое действие с каждой секундой (например - наносит урон. Или лечит) и уменьшают свою силу на... 25%, например.

Просуммировать силу баффа до заоблачного значения не получится. Пример - Герой каждую секунду отравляет противника ядом с силой 100.

Вот сила баффа со временем:
1 сек.: 100
2 сек.: 100*0.75+100=175
3 сек.: 175*0.75+100=231
4 сек.: 231*0.75+100=273
5 сек.: 273*0.75+100=308
.........................
10 сек.: 377
20 сек.: 398
...........................
50 сек.: 399.9998

Как видите, сила баффа не поднимется выше 400, то есть четырехкратному (1/0.25) значению "входящего" баффа.

Впрочем, стандартный "временной" бафф стоит оставить, скажем, для оглушения.

Хотя можно использовать такой алгоритм: чем выше сила баффа "оглушение", тем меньше шанс, что при прошествии секунды оглушение прекратиться.


Вот такой алгоритм. Надеюсь, он будет Вам полезен.

Всего наилучшего!
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 03:59   #2
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Decay Buff

вообще универсальной системы не существует !!
К тому же предложеную тобой систему я бы не стал использовать, она мне кажется недостатрчно прозрачной со стороны игрока !!

По простому я бы предложил так:
У персонажа есть масив наложеных на него бафов !!
Каждую секунду перебераем массив и для кадого бафа выполняем его функцию воздействия на игрока !! Декрементируем время бафа, если оно равно 0 удаляем баф с массива !!
Таким образом:
+50 жизни (3/5 сек) -30 жизни (2/10 сек) +20 жизни (8/15 сек)
Перс восстановит себе 40 поинтов жизни !!
Прошло 5 секунд..
Первый баф уже удалился !! Перс получит 10 поинтов урона !!
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 11:39   #3
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Вопрос Ответ: Decay Buff

Тоже неплохо, однако представь, что на герое висит 50 баффов. Как ты их всех отобразиш?
первый бафф уже удалился
второй тоже удалится
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 15:14   #4
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Decay Buff

Тоже неплохо, однако представь, что на герое висит 50 баффов. Как ты их всех отобразиш?
да это разве проблема ??
в гуе будет панелька с 5-ю последними бафами, остальные отображаюся если раскрыть панельку кнопочкой !!

второй тоже удалится
чего это ??
он был на второй из 10 секунд жизни (2/10) !! через 5 секунд будет на 7 из десяти секунд жизни !!
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 19:26   #5
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Вопрос Ответ: Decay Buff

А, я думал что 2/10 это 2 секудны из 10.

Насчет панельки - для монитора компа это хорошо, а что если игра - мобильная?

Даже если сделать размер иконки баффа 10 пикселей (и ктото врядли поймет что там нарисовано), то получится 2 строки впритык прорисованных иконок. Не эстетично.

А вообще идея неплоха, нужно только продумать.

P.S.
Кажись, придумал! Пусть будет 10 одинаковых баффов, каждый со своей силой и со своим временем действия. Пусть отображаться будут баффы одного типа, а под ними подписана:

-Общая сила баффа данного типа
-Максимальное время действия из баффоф данного типа

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

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 19:53   #6
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Decay Buff

А, я думал что 2/10 это 2 секудны из 10.
именно так !!
ПРОФЛИНК:
он был на второй из 10 секунд жизни (2/10) !! через 5 секунд будет на 7 из десяти секунд жизни !!

Но мне кажется что это тоже не сильно "прозрачно"
яже и говорю что единой системы нет !!
каждый делает по своему, главное что бы игрок понимал что к чему !!
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 22:08   #7
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Decay Buff

Думал, что 2/10 это обратный отсчет.. оказалось наоборот =)
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 21.05.2011, 00:04   #8
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Decay Buff

А зачем в телефонной игре 50 баффов?
Десяти с лихвой хватит.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 21.05.2011, 00:17   #9
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Decay Buff

с чего ты взял что игра для тела ??
Раздел в алгоритмике, соу рассматриваются общие механизмы !!
Конечно на самом деле 50 бафов толстовато, но дело то не в количестве а в механизме воздействия на таргет перса !!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 20:46.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com