Аз съм в курс за разработка на игри за моите бакалаври по compsci и нашият проект е да направим XNA игра. Създаваме игра в стил jrpg и измислихме страхотна идея за битката: на всеки ход поставяте 3 умения на опашка, въз основа на уменията и избрания ред могат да се прилагат различни бонус ефекти. Направихме основен с 2 умения: атака и огън.
Започвате с първото умение, след което стрелките показват второто и третото избрано умение. Кутийките на второ и 3-то ниво показват ефекта, добавен в тази точка.
Основите: Атака+Атака = По-висок критичен шанс за втората атака. Fire+Attack = Добавя някои щети от огън към първоначалните щети на атаката. Fire+Fire = Прилага състояние на изгаряне
По-трудната част е, когато ударите 3 подред, тъй като те правят нещо като специална атака. Атаката прави 1/4 шанс за критичен удар, Огънят нанася двойна щета Огнена атака (наречена Огнена топка).
Прилагането на това в if-изявления може да стане болезнено с повече умения. Броят на операторите if е равен на сумата от n^n от 1 до n, така че ако искаме 6 умения, ще трябва да напишем 6+36+216=258 оператора if! Много от които също биха били излишни! Това би било предразположено към грешки, тъй като ще трябва старателно да изработим всеки оператор if, така че да са в правилната позиция, докато кодираме нашите блок-схеми.
Ето защо решихме, че трябва да имаме някои обобщени комбинации със статичен ефект, може би увеличаване на брояч, ако може да бъде кумулативен, тогава, когато имаме 3 подред, извикване на функцията, която има специалната атака на това умение.
Първото нещо, което ми дойде на ум, беше машина с краен край. Ще може да се справи с всички случаи, с изключение на специалните според мен. Може би натискащ се автомат? Основният проблем, който имам, е, че нямам представа как бих ги внедрил в код. Класът, в който ги научих, беше теоретичен.
Има ли други по-ефективни или по-лесни за писане/кодиране методи?
{norm-bonus, fire-bonus}; {n,f} + fire => {0,f*1.1} + {burn:f}; {n,f} + normal => {n+0.01,f*0.5} + {atk:n*f}
(прочетете: ако е приложен огън, увеличете модификатора на огъня с 10% и направете малко изгаряне. Ако нормалната атака е приложен, увеличете шанса за критичен удар с 1%, намалете ефекта от огъня с 50% и нанесете някои щети, равни на шанса за критичен удар, умножен по ефекта от огъня) - person John Dvorak   schedule 15.11.2012