Od jakiegoś czasu majstruję przy grze i mam z tym sporo problemów:
Mam dwie postacie, z których każda ma atrybuty (około dziesięciu) w zakresie (od 1 do 20). Chcę użyć tych atrybutów do wygenerowania „rzutu” takiego, że wyższy rzut wygrywa to konkretne spotkanie. Warto zauważyć, że obie postacie nie zadają sobie obrażeń / nie bronią się. Obaj sprawdzają, czy zdadzą to, co, jak sądzę, moglibyśmy nazwać sprawdzeniem umiejętności. Oba toczą się, by przekazać / nie zaliczyć wspólnej wartości. Nie wchodzą ze sobą w interakcje.
Jednak gdy jedna z postaci ma choćby małą przewagę liczbową, każda formuła, którą wymyśliłem, powoduje, że ta wciąż nieco lepsza wygrywa ogromną większość czasu. To jest niepożądane.
Próbowałem przypisać wagę „najbardziej odpowiedniego” atrybutu testu do 80% i sumy pozostałych atrybutów do 20%. Próbowałem również porównać średnie, aby uzyskać względną różnicę, i użyć tego, aby wzmocnić słabszą postać. Oba podejścia przyniosły znaczące korzyści, które staram się usunąć (na przykład, jeśli uruchomię spotkanie 5000 razy, całkiem regularnie daje to jednej stronie wygrywając wszystkie 5000).
Wydaje się, że dodanie komponentu „szczęście” ma znaczenie, jeśli w jakiś sposób jest ważone na korzyść mniejszej postaci, a ja nie osiągnąłem tam dobrego balansu.
Jakie podejścia mogę zastosować, aby osłabić wpływ małej przewagi liczbowej, ale nadal zachować i zwiększyć tę przewagę wraz ze wzrostem względnej luki w atrybutach?
Na żądanie, oto szczegóły, które mam do tej pory. Niektóre rzeczy, których jeszcze nie rozgryzłem, więc pozostają ogólnikami:
W tej chwili rzut jest generowany jako
0.8 * (mainAttribute) + 0.2 (1/3 * subAttA + 1/3 * subAttB * 1/3 subAttC)
Obecnie daje to wartości w okolicach 4,0. Atrybuty są generowane losowo między określonymi zakresami. W bieżącym teście używa się jednej postaci o atrybutach od 2 do 4, a przeciwnika między 3 a 5. Przewidywalnie, daje to średnie wartości odpowiednio zbliżone do 3 i 4.
Z tą jednopunktową przewagą chciałbym zobaczyć silniejszą z dwóch wygranych w obszarze od 55% do 60% czasu, z tym skalowaniem aż do wygrania przez około 80% czasu ze średnią przewagą atrybutów wynoszącą 5 lub 6, 90% z przewagą 7 lub 8, pozostawiając miejsce na mało prawdopodobne zwycięstwo, gdy różnica wzrośnie. Wolałbym nigdy nie mieć gwarantowanych wygranych, ale być może rzeczy stają się bardzo mało prawdopodobne - na przykład wygraną 99,5% lub 99,6% czasu, kiedy różnica staje się bardzo duża.
Obecna formuła generuje liczbę nieprzypadkową. Losowość wynika z wyboru odpowiednich atrybutów. Nie wszystkie atrybuty są używane dla każdego rzutu. Możliwe jest, że ten z ogólnie słabszymi atrybutami będzie silniejszy w obszarach istotnych dla tego rzutu i ukradnie zwycięstwo. Ale, jak można przewidzieć, zdarza się to rzadko.
Moja kolejna próba polegała na zważeniu ich względnych sił, biorąc średnią wszystkich statystyk każdego z nich, dzieląc je między sobą i wykorzystując tę wartość, aby w niewielkim stopniu wzmocnić mniejszą postać. To trochę wygładziło, ale nadal wykazywało wyraźną tendencję do generowania 5000 zwycięstw dla jednego faceta na 5000 prób.
źródło
Odpowiedzi:
Problem z twoim podejściem polega na tym, że decydujesz o wyniku walki w momencie, gdy decydujesz o głównej statystyki. Kiedy masz 4 główne statystyki, a wojownik jest lepszy tylko w jednym z nich, ich szansa na wygraną wynosi zawsze 1 na 4, bez względu na to, jak duże są faktycznie różnice. Jeśli chcesz uzyskać bardziej szczegółowe wyniki, potrzebujesz większej dokładności losowości.
Po pierwsze, myślę, że możesz zachować losowy wybór głównego atrybutu, a także możesz zachować formułę, jeśli chcesz. Jest to liczba reprezentująca, ile przewagi ma ten walczący w tym konkretnym starciu. W dalszej części tego posta będę odnosił się do tego jako sprawiedliwego
power
.Metodą, którą stosowałem w wielu grach i która całkiem dobrze mi pomogła, jeśli chodzi o pojedynek dwóch rzeczy z pewnymi
power
, jest wyrzucenie losowej liczby zmiennoprzecinkowej pomiędzy0
ipower
dla obu i sprawdzenie, kto rzucił wyżej. Oto lista oczekiwanych wyników tej metody. Procenty nie są obliczane, ale generowane eksperymentalnie przez uruchomienie 100000 walk na kombinację, liczenie iteracji i liczenie, kto wygrał, jak często:Zaletą tego algorytmu jest to, że skaluje się bez względu na to, jak duże są liczby. Szansa 0,3 vs 0,7 jest taka sama jak szansa 3 vs 7, 300 vs. 700 lub 3 000 000 000 vs. 7 000 000 000.
Jeśli jest to zbyt nieprzewidywalne dla twojego gustu, możesz uczynić walkę bardziej przewidywalną, rzucając wiele losowych liczb dla każdego z walczących i sumując je. Z powodu prawa wielkich liczb wiele losowych zdarzeń wyrówna się i przyniesie bardziej przewidywalne wyniki. Oto tabela z inną liczbą iteracji.
Wyniki 100% i 0% w powyższej tabeli są iluzją z powodu zaokrąglania różnic. Jeśli
power
walczący nie ma dokładnie 0, zawsze istnieje możliwość, że wygrają. Po prostu nie zdarzyło się to w powyższym teście, więc możesz spodziewać się, że będzie poniżej 1: 100000.Możesz również zauważyć niewielkie nieregularności, które można przypisać wahaniom nastroju java.lang.Random i mogą się nie pojawić, gdy uruchomisz kod ponownie z innym ziarnem.
Program, którego użyłem do wygenerowania tej tabeli (Java).
Jeśli chcesz używać tego kodu w swojej grze, jest on objęty licencją WTF Public License Version 2 opublikowaną przez Sama Hocevara .
źródło
1 - powerA / ( 2 * powerB )
.powerA < powerB
. Gdy powerA będzie większy, musisz przełączyć się napowerB / (2 * powerA)
.Twoim błędem jest podejście oparte na „kości”. Jesteś na komputerze, możesz korzystać z dowolnego systemu, który ci się podoba. Zrób tabelę, która zmienia różnicę wartości w procentową szansę na wygraną, a następnie możesz ustawić wartości na absolutnie wszystko, co chcesz, np.
(Musisz zrobić tylko połowę stołu, po prostu zawsze wybierz A jako ten z wyższą statystyką)
Oczywiście te liczby są tylko przykładem, możesz sprawić, by śledził to, co Ci odpowiada.
źródło
To jest dość głębokie pytanie, z punktu widzenia mechaniki gry. Ale jest kilka rzeczy, które mogą pomóc.
Po pierwsze, dlatego większość gier ma osobny komponent do trafienia i obrażeń, gdzie jest „rzut”, aby sprawdzić, czy trafiłeś w obrażenia, a następnie „rzut” na tabelę obrażeń lub zasięg dla danej postaci. Prowadzi to również do niektórych standardowych archetypów w różnych gatunkach, w których możesz mieć mniejsze, szybsze postacie, które mają mniej punktów życia, ale zadają większe obrażenia (magowie z armat ze szkła, niektóre rodzaje łotrów) i większe, opancerzone postacie, które trafiają mniej obrażeń (czołgi, wojownicy) ).
Prowadzi to do naturalnej równowagi, w której mniejsza postać może być krucha, ale unika trafienia tak często ze względu na zdolność typu zwinności, a także wyrównuje pole gry, zadając większe obrażenia (zaklęcie lub efekt trucizny, który zadaje obrażenia ponad czas). Czołg może być wolniejszy i częściej trafiany, ale często ma ogromną studnię zdrowia lub punktów życia do utrzymania, jednak zwykle zadaje mniej obrażeń na trafienie (lub obrażeń na sekundę).
Tłem dla nich jest to, dlaczego wiele gier nieustannie przechodzi przez balansowanie broni, klas i statystyk. World or Warcraft, Destiny, Diablo, Battlefield: każdy rodzaj gry w dowolnym gatunku często przechodzi z czasem balansowanie i dostrajanie.
To może nie być bezpośrednia odpowiedź, ale poprosiłeś o ogólne pomysły. Oceńmy więc także system gry.
Jak działają te atrybuty? Jeśli wszystko inne jest równe (brak archetypu, brak zbroi, lepszej broni itp.), Wówczas wszelkie niewielkie zyski absolutnie prawdopodobnie rzucą rzeczy na korzyść jednej strony. Dodanie aspektów do walki komplikuje każdy system, ale zapewnia także większą elastyczność.
źródło
Są dwie wielkie rzeczy.
Po pierwsze pamiętaj, że jesteś na komputerze. Możesz stworzyć dowolny system. Nie musisz ograniczać się do rzutu d20, chociaż dla graczy jest to łatwe do zrozumienia. Rzeczy takie jak rzucanie 6 kośćmi 6 kości są łatwe na komputerze i dają znacznie mniej losowe wyniki.
Po drugie, patrząc na inne systemy, takie jak D&D, oczywiste jest, że po prostu ograniczają efekt atrybutów. Zamiast dodawać statystykę podstawową do 80% wartości reguły, zmniejsz ją i zwiększ subtelność. Na przykład w D&D, jeśli masz 18 zręczności, dostajesz tylko 4 jako bonus do swojej klasy pancerza.
Krótko mówiąc, wszystko, co musisz zrobić, to zmniejszyć swoją domenę, aby lepiej pasowała do twojego zakresu. Ale jakościowo pomyślałbym, że spojrzenie na inne systemy i wymyślenie rzeczy, które wydają się mniej matematyczne, zapewniłoby graczowi bardziej satysfakcjonujący system.
źródło
Co powiesz na to: dodaj stałą, np. 1000, do wszystkich danych atrybutów. Wtedy względna różnica staje się bardzo mała.
źródło
Poznaj swoje liczby
Dodając trochę do odpowiedzi Filipa , a mianowicie, że rand [x] w porównaniu do rand [y] nie zawsze daje to, czego się spodziewamy. Poniżej tabeli, w której porównujemy A z B. Zarówno A, jak i B mają wartości 1 ... 10. Porównujemy na dwa sposoby (uwaga: rand () w tym przypadku generuje liczby całkowite, tj. Rolki):
Dodatkowo porównujemy
(w tym przypadku nie ma znaczenia, czy jest> czy ≥, ponieważ są tak blisko). Te duże liczby znajdują się w nawiasach.
Komórki zawierają%. Każdy wynik zawiera 1 milion iteracji (wykonanych przy użyciu Dyalog APL ).
Jeśli spojrzymy na A = 2 i B = 3 (i 1 milion testów):
Niespodziankami mogą być:
Mógłbym w rzeczywistości rozwiązać to Q inaczej, po prostu ręcznie wpisując tabelę 10x10 z ładnymi, pożądanymi wartościami procentowymi (może ktoś też chce nieregularności?). Następnie w razie potrzeby interpoluj między dwiema wartościami, aby uzyskać dokładny procent, powiedzmy, że to z jakiegoś powodu 53. Wtedy łatwo jest wygenerować trafienie o prawdopodobieństwie 53%, 0 lub 1, po prostu wykonując rand (100) i testując jeśli jest mniejsza lub równa 53 :-).
Jest to zgodne z linią, o której wspomina Jack Aidley .
źródło
0.0
a1.0
. W takim przypadku różnica między>
i>=
jest znikoma. Możesz to podkreślić.Tradycyjne podejście, do którego pośrednio odwoływało się kilka odpowiedzi, ale nikt tak naprawdę nie przeliterował, polega na tym, że zadanie wymaga ustalonego rzutu kostką i dodaje modyfikator umiejętności wyprowadzony z twoich statystyk.
Na przykład, jeśli dwóch graczy postępuje zgodnie z procedurą:
i powtarzaj, dopóki jedna strona nie przebije drugiej, wtedy otrzymasz liczby w swoim zakresie: oto szanse na zwycięstwo z daną przewagą liczbową nad ich modyfikatorem:
źródło
Bohaterowie nie stawiają sobie wzajemnych wyzwań o dominację. Kwestionują wymagania. Co jeśli oba spełnią wymagania? Kto wygrywa? Dziwię się, że nie podważyłeś logiki na tyle, że nawet poszedłeś z nią do obliczeń.
Tak czy inaczej, oto dwie rzeczy, które mogą ci pomóc.
Wygraj przypadek z przewagą:
JEŚLI pasek podania / sprawdzenie umiejętności jest wynikiem 10. A Rzuca 40. B Rzuca 42. JEŻELI tylko jeden musi wygrać. Począwszy od równej wygranej A 50% / B 50% wygranej. Możesz dodać%, aby wygrać szansę na podstawie przewagi. Rzut B ma (42–40) / 40 = 5% przewagi pod względem rzutu. Dodanie go bezpośrednio zwiększa szansę wygranej B na 55%. Lub możesz określić niestandardową szansę wygranej na procent przewagi. Powiedz, że za każdą 100% przewagę dodajesz 10% szansy na wygraną. Więc jeśli A wyrzuci 10, a B wyrzuci 20. Następnie A wygrywa 40%, a B wygrywa 60% przypadków.
Koncepcja uczciwej losowości:
Wykonując standardowe 30% szansy na wygraną, możesz w końcu wygrać 38 czeków na 100.
Niektórzy ludzie chcą dodatkowego kroku na drodze do uczciwości i upewniają się, że 30% szansy zawsze wygrywa dokładnie 30 na 100 spotkań i wystarcza losowość, że nie wiadomo, które spotkania w sekwencji są wygrane, a które przegrane.
Jest to szczególnie przydatne w przypadku dobrze obliczonych ekonomii gier. Ponieważ losowa statystyka 70% szans na wygraną. Powiedz 70% szansie, że mob zrzuci 5 sztuk złota. Moby mogą w końcu upuścić złoto 81 razy na 100. Co powoduje, że przychody / wydatki wypływają z równowagi. I w zależności od tego, ile podmiotów / instancji używa takich rolek, nieuchronnie powstaje inflacja i / lub niedobory. Oczywiście wielu ludzi nie ma nawet przybliżonego oszacowania pełnego podsumowania nakładów / wydatków ich gospodarki. Wiele osób wystarcza na robienie „większości” punktów ekonomicznych. I pozostaw niektóre zmienne generacji, które nie są obliczane i rozbieżności stosu w czasie nawet przy uczciwej losowości.
Inflacja i niedobory same w sobie nie stanowią problemu. Możesz zarządzać nieuczciwymi przypadkami, a nawet nieprzewidzianymi zmiennymi, jeśli Twoja gospodarka jest odpowiednio skonfigurowana, aby odpowiednio reagować na inflację i niedobór.
Po co zawracać sobie tym głowę, ponieważ prawo dużej liczby wyrównuje sytuację na dłuższą metę?
Nie każde środowisko może zachować swoje zachowanie projektowe, licząc na to, że zostaną wyrównywane później ...
źródło