Ĺadny brzuch
Na początek - przepraszam za nazwę tematu, ale naprawdę trudno streścić to, o co mi chodzi w tych kilku słowach, więc żeby nie przedłużać, przechodzę do rzeczy:
Tworzę system walki dla amatorskiej gry typu MMOSG (jak np. OGame). Ta gra to jest raczej tylko dla mnie i dla sprawdzenia moich możliwości, jednak trochę mnie wciągnęła i utknąłem w martwym punkcie, ponieważ nie znam się na tak zaawansowanej matematyce.
Problem występuje w momencie obliczania obrażeń, które ma zadać jeden oddział składający się z wielu tych samych jednostek. Wzór na obliczenie obrażeń dla pojedynczej jednostki już mam (każda jednostka posiada statystyki na podstawie których wyliczane są zadane przez nią obrażenia, za każdym razem może zadać inne obrażenia gdyż w tym wzorze występuje losowanie). Zatem:
1. Dajmy np. 1000 jednostek tego samego typu
2. Wyliczenie obrażeń dla jednej jednostki i pomnożenie go * 1000
Powyższe działania prowadzą do bardzo prymitywnego i nierealistycznego sposobu walki, bo jak może być, że każda jednostka w oddziale zada dokładnie tyle samo obrażeń? Mógłbym oczywiście zrobić pętlę i 1000 razy obliczyć dla każdej odrębne obrażenia, jednak jest to zbyt zasobochłonne (co przy 10000 jednostkach?), a mi na tak dużej realistyce nie zależy. Szukam sposobu, żeby choć trochę urzeczywistnić obrażenia oddziału, tak pseudorealistycznie. Żeby obrażenia poszczególnych jednostek nieco się różniły, jednak nie zajmowały procesora na tak długi czas (co, jeśli w jednej chwili odbędzie się 5 walk w których w każdej uczestniczy co najmniej 10000 jednostek?). Jest jakiś sposób, aby uczynić ten system bardziej zgodnym z rzeczywistością?
zastosuj ktorys z rozkladow prawdopodobienstwa (mysle, ze najlepiej pasuje rozklad Gaussa)
Nie matematyka, a logika :)
Mój przykład:
W pętli, np. liczba wszystkich jednostek przez 200, losujesz różne stopnie obrażeń i dodajesz do nowej puli mnożąc przez tamte 200. Nie jest aż tak szczegółowe, a w dodatku jest zróżnicowanie obrażeń :)
Alco, ten rozkład Gaussa to jakiś kosmos. W życiu nie przełożę tego na PHP :P
Andrzej, spróbuję twojego sposobu bo rzeczywiście ciekawy jest, muszę tylko uporządkować kod :P
prosciusi... to najbardziej klasyczny rozklad prawdopodobienstwa... wystarczy zaimplementowac malenka tabelke...
ten rozklad mowi, ze najwiecej osobnikow ma ceche przecietna, a im wieksze "odstepstwo" tym wieksza indywidualnosc!
mozna tez to zrobic duzo prosciej... liczysz obrazenia dla jednego... mnozysz przez ilosc, a nastepnie generujesz sobie (pseudolosowa) odchylke... powiedzmy z zakresu -0.1 do 0.1 i mnozysz razy otrzymany wynik :D
Prosty jak dla kogo, ja tych wzorów tak jak ty sobie nie przekładam na tabelki :P
A ta odchyłka to by była za sztywna nieco, może zależna od ilości jednostek...
najprosciej zasosowac cos, co da w wyniku efekt zbizony do rozkladu gaussa:
bierzesz np 1/3 ilosc zolnierzy, i wyliczasz dla nich standardowe obrazenia. teraz losujesz liczbe (dodatnia lub ujemna) beda modyfikatorem - z zakresu np 20% wyliczonych standardowych obrazen. dodajesz modyfikator do tych obrazen - takie obrazenia dajesz 1/3 z pozostalych jednostek. bierzesz pozostala 1/3, i do standardowych obrazen dodajesz losowa liczbe z zakresu 40% standardowych obrazen (oczywiscie jesli wylosuje sie ujemna to obrazenia dla nich beda mniejsze) itd.
np
1/3 oddzialu - 10 obrazen
1/3 z pozostalych - losujesz modyfikator z zakresu <-2, 2>, czyli obrazenia z zakresu <8,12>
1/3 z pozostalych - losujesz modyfikator z zakresu <-4, 4>, czyli obrazenia z zakresu <6,14>
itd
to jak sie zwieksza mozliwy zakres modyfikatora oraz to jaka czesc oddzialu bierzesz trzeba dobrac zeby wyniki byly odpowiednio zroznicowane ( nie za bardzo ani nie za malo).
Użytkownik Deadeye edytował ten post 02 listopad 2007, 00:44
och Dead... a co ja koledze perswaduje :lol2:
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Tworzę system walki dla amatorskiej gry typu MMOSG (jak np. OGame). Ta gra to jest raczej tylko dla mnie i dla sprawdzenia moich możliwości, jednak trochę mnie wciągnęła i utknąłem w martwym punkcie, ponieważ nie znam się na tak zaawansowanej matematyce.
Problem występuje w momencie obliczania obrażeń, które ma zadać jeden oddział składający się z wielu tych samych jednostek. Wzór na obliczenie obrażeń dla pojedynczej jednostki już mam (każda jednostka posiada statystyki na podstawie których wyliczane są zadane przez nią obrażenia, za każdym razem może zadać inne obrażenia gdyż w tym wzorze występuje losowanie). Zatem:
1. Dajmy np. 1000 jednostek tego samego typu
2. Wyliczenie obrażeń dla jednej jednostki i pomnożenie go * 1000
Powyższe działania prowadzą do bardzo prymitywnego i nierealistycznego sposobu walki, bo jak może być, że każda jednostka w oddziale zada dokładnie tyle samo obrażeń? Mógłbym oczywiście zrobić pętlę i 1000 razy obliczyć dla każdej odrębne obrażenia, jednak jest to zbyt zasobochłonne (co przy 10000 jednostkach?), a mi na tak dużej realistyce nie zależy. Szukam sposobu, żeby choć trochę urzeczywistnić obrażenia oddziału, tak pseudorealistycznie. Żeby obrażenia poszczególnych jednostek nieco się różniły, jednak nie zajmowały procesora na tak długi czas (co, jeśli w jednej chwili odbędzie się 5 walk w których w każdej uczestniczy co najmniej 10000 jednostek?). Jest jakiś sposób, aby uczynić ten system bardziej zgodnym z rzeczywistością?
zastosuj ktorys z rozkladow prawdopodobienstwa (mysle, ze najlepiej pasuje rozklad Gaussa)
Nie matematyka, a logika :)
Mój przykład:
W pętli, np. liczba wszystkich jednostek przez 200, losujesz różne stopnie obrażeń i dodajesz do nowej puli mnożąc przez tamte 200. Nie jest aż tak szczegółowe, a w dodatku jest zróżnicowanie obrażeń :)
Alco, ten rozkład Gaussa to jakiś kosmos. W życiu nie przełożę tego na PHP :P
Andrzej, spróbuję twojego sposobu bo rzeczywiście ciekawy jest, muszę tylko uporządkować kod :P
prosciusi... to najbardziej klasyczny rozklad prawdopodobienstwa... wystarczy zaimplementowac malenka tabelke...
ten rozklad mowi, ze najwiecej osobnikow ma ceche przecietna, a im wieksze "odstepstwo" tym wieksza indywidualnosc!
mozna tez to zrobic duzo prosciej... liczysz obrazenia dla jednego... mnozysz przez ilosc, a nastepnie generujesz sobie (pseudolosowa) odchylke... powiedzmy z zakresu -0.1 do 0.1 i mnozysz razy otrzymany wynik :D
Prosty jak dla kogo, ja tych wzorów tak jak ty sobie nie przekładam na tabelki :P
A ta odchyłka to by była za sztywna nieco, może zależna od ilości jednostek...
najprosciej zasosowac cos, co da w wyniku efekt zbizony do rozkladu gaussa:
bierzesz np 1/3 ilosc zolnierzy, i wyliczasz dla nich standardowe obrazenia. teraz losujesz liczbe (dodatnia lub ujemna) beda modyfikatorem - z zakresu np 20% wyliczonych standardowych obrazen. dodajesz modyfikator do tych obrazen - takie obrazenia dajesz 1/3 z pozostalych jednostek. bierzesz pozostala 1/3, i do standardowych obrazen dodajesz losowa liczbe z zakresu 40% standardowych obrazen (oczywiscie jesli wylosuje sie ujemna to obrazenia dla nich beda mniejsze) itd.
np
1/3 oddzialu - 10 obrazen
1/3 z pozostalych - losujesz modyfikator z zakresu <-2, 2>, czyli obrazenia z zakresu <8,12>
1/3 z pozostalych - losujesz modyfikator z zakresu <-4, 4>, czyli obrazenia z zakresu <6,14>
itd
to jak sie zwieksza mozliwy zakres modyfikatora oraz to jaka czesc oddzialu bierzesz trzeba dobrac zeby wyniki byly odpowiednio zroznicowane ( nie za bardzo ani nie za malo).
Użytkownik Deadeye edytował ten post 02 listopad 2007, 00:44
och Dead... a co ja koledze perswaduje :lol2: