Obecnie tworzę grę obronną, w której wrogowie odradzają się i atakują armię gracza. Jest podobny do gry Tower Defense, z tym że istnieje tylko jeden poziom. Wrogowie będą się pojawiać, aż w końcu użytkownik zginie lub zgromadzi wystarczająco dużą armię, aby zlikwidować każdego wroga, który natychmiast się pojawi (mam nadzieję, że będzie to wystarczająco trudne, aby tak się nie stało).
W tej chwili walczę z tym, jak sprawić, by ta gra była coraz trudniejsza, a prawdopodobieństwo pojawienia się wroga w zasadzie w końcu osiągnie 100%.
Do tej pory mam coś podobnego do następującego
if(Math.random() < 1 - (1/elapsed_time) && spawnTimer <= 0 ){
spawnEnemy()
spawnTimer = rand(); // random number between 1 and 3
}
Ale na pierwszy rzut oka wydaje się to zbyt jednolite. W tej chwili odradzam tylko jednego rodzaju wroga, chodzi o to, że trudniejsi wrogowie pojawiają się wraz z upływem czasu.
Myślę też, że muszę spawnTimer
trochę bardziej losowo losować i przyspieszać z biegiem czasu, ale po prostu nie widzę, jak mogę skupić się na tym, jak powinna wyglądać moja logika dla całej tej sekcji. Czy ktoś jest w stanie pomóc z grubym pomysłem na tego rodzaju formułę?
Obecnie używam javascript do pisania gry, ale oczywiście chodzi o koncepcję.
Odpowiedzi:
Wybrana funkcja prawdopodobnie nie będzie odpowiednia do Twoich celów. Po pierwsze, jeśli wybierzesz tę trasę, nieudany losowy stan powinien spowodować opóźnienie przed następnym rzutem kostką. Jest również mało prawdopodobne, aby utrzymywanie timera odradzania w stałym zakresie było dobre dla twojego celu.
Niech
thresh
będzie próg trudności, który Twoim zdaniem jest wysoki. Wykorzystujemy to później, aby zdecydować, kiedy spowolnić tempo, w którym gra staje się trudniejsza.Pozwól
rate
być potworom, które chcesz przybyć w każdej minucie (lub rundzie).Niech
GROWTH_RATE
będzie szybkość wzrostu trudności (na razie będzie0.2
).Powiedzmy, że zaczynasz
rate = 10
. Teraz gracz zabija5
potwory, dzięki czemu możesz zwiększyć szybkośćGROWTH_RATE * 5 = 1.0
i nowerate = 11
.Jak wprowadzić warunek, który
rate
co minutę będzie generował potwory:Zestaw tarło czasowy do numeru między
0.5
do1.0
multiplied by 60 seconds or
okrągłego czasieand divided by
stopa. Also leave a
0.25` szansa, że żaden potwór zrodził kiedy licznik osiągnie 0, a czas jest znowu randomizacji.Jeśli
rate
kiedykolwiek dotrzethresh
, musisz zwolnić. Teraz zamiast zwiększaćrate
oGROWTH_RATE
, możesz go zwiększyć o1 / math.sqrt(rate)
. W ten sposób gracz nie zostanie natychmiast zniszczony w trudniejszych warunkach.Możesz zresetować
thresh
do około 80% tego,rate
w którym gracz przegrał grę.Jeśli chcesz randomizować siłę potwora, zachowaj ostrożność co do timera. Na przykład, jeśli uznasz, że
player-score
(określona przez potwory zabite tej pory) zostaną wykorzystane do określenia max siłę potwora, który mógłby tarło, można zrobić coś takiego:max-monster-strength = player-score / 1000
. Następnie losowofloat
lubdouble
między0.0
do1.0
i pomnożyć wynik przez siebie.Teraz, kiedy randomizujesz stoper, prawdopodobnie powinieneś wziąć pod uwagę poziom mocy. Na przykład możesz pomnożyć wynik licznika przez pierwiastek kwadratowy mocy następnych potworów.
źródło
Istnieje wiele opcji, dwie z obecną konfiguracją:
Następnie więcej z dodatkowymi funkcjami:
Jeśli chodzi o tworzenie krzywej trudności, naprawdę nie ma poprawnej odpowiedzi. To zajmie dużo testowania i poprawiania, aby zrobić to dobrze. Będzie to zależeć od tego, jak długo ma trwać gra i od tego, jak trudne ma być. Sugeruję skorzystanie z Excela lub strony takiej jak WolframAlpha i sprawdzenie, jaki rodzaj krzywej tworzą różne funkcje. Wypróbuj wykładnicze wzrosty, liniowe wzrosty itp. Znajdź taki, który Ci odpowiada.
źródło
Zamiast stałej liczby wrogów (jednego) odradzających się ze zmiennym prawdopodobieństwem, możesz je odwrócić i mieć zmienną liczbę wrogów odradzających się ze stałym prawdopodobieństwem.
Na poziomie trudności 1 będzie to miało 1% szansę na odrodzenie jednego wroga na kleszcza.
Na poziomie trudności 1000 odrodzi do 1000 wrogów, każdy z osobną szansą 1%. Oznacza to, że średnio odrodzi się 10 na kleszcza, ale może to być również mniej więcej. Istnieje możliwość, że od razu pojawi się liczba bardzo różna od 10, może nawet wszystkie 1000. ale jest to bardzo mało prawdopodobne zdarzenie ze względu na to, jak działa prawdopodobieństwo (porównaj: Prawo dużych liczb ).
Kiedy dodajesz więcej różnych wrogów o różnych zachowaniach i statystykach, być może chcesz, aby niektórzy z twardszych wrogów zaczęli pojawiać się tylko na wyższych poziomach trudności, a nawet wtedy z małą gęstością na początku. Aby to zrobić, możesz dodać modyfikator trudności, który jest odejmowany od bieżącej trudności. W ten sposób wróg nie odrodzi się przed osiągnięciem tego poziomu trudności, a nawet wtedy z początkową mniejszą szansą:
źródło