Autor Zpráva
Anonymní
Profil *
Jak udělat algoritmus fotbalového virtuálního klání, kdy proti sobě postavíme dvě družstva, které mají 11 hráčů, každý o jiné síle a zřejmě pomocí výpočtu těchto sil a náhody by měli nebo nemuseli v průběhu 90 minut vstřelit gól. Napadá Vás jak na to?
ninja
Profil
Mas 2 hlavni pristupy:

a) Prehrajes virtualni utkani (zrychlene) a budes se snazit simulovat pohyb balonu, hracu, atd. podle jejich vlastnosti

b) na zakladne vlastnosti spocitas vysledek v jendom kroku.

V obou pripadech bude nejslozitejsi vymyslet vlastnosti a sily hracu a hlavne jejich vzajemnych vztahu. A nezapomen pridat prvek nahody.
Anonymní
Profil *
Tak to bych se v první řadě pokusil asi o tu druhou variantu (jednodušší). Jak jsi myslel ten vzájemný vztah? Počítalo by se to hráč od hráče???
Anonymní
Profil *
A jak by se dalo přehrávat virtuální utkání, po sekundách?
tiso
Profil
Koľko vlastností má jeden hráč? Čo znamená sila? Lebo iné je útočník na mieste obrancu, alebo keď prehodíš krídla, malo by to byť zohľadnené v algoritme, zabudovať i možnosť vylúčenia, penalty, únavu hráčov, striedanie...

Pokiaľ máš len silu, tak by som asi na tú silu naviazal držanie lopty, porovnával útok so súperovou obranou a silou brankára, niekam dopasoval náhodu, nakoniec to zviazal ešte s časom a podľa toho dával góly...

Prehrávať po sekundách? Hádam po minútach, alebo chceš aby bol niekto za kompom 90 minút kvôli jednému zápasu?
Joker
Profil
To záleží na strašně faktorech...
Nejjednodušší varianta asi je přiřadit každému mužstvu jednu statistiku (celková síla nebo tak něco) a pak prostě porovnat a kdo má vyšší, vyhraje. Skóre by se pak určilo podle rozdílu sil. To je opravdu hodně primitivní.

Nejsložitější varianta je asi to co psal ninja- virtuálně přehrávat utkání.

Mezi nimi je nepřeberné množství mezikroků. Načrtnu několik:
- Do výsledku včleníte náhodu: každé mužstvo bude mít celkovou sílu. Třeba 0-20. Při zápasu k síle každého týmu přičtete náhodné číslo v rozsahu třeba -3 až +3. Komu vyjde víc, ten vyhrál a skóre pak určíte podle rozdílu

- Každý tým by měl dvě statistiky: útok a obrana. Každá z nich se modifikuje náhodným číslem (pokaždé jiným, samozřejmě :-) ) a porovnávají se křížem (útok jednoho s obranou druhého). Podle rozdílu se určí kolik gólů kdo vstřelil a ze skóre potom výsledek zápasu.

A takhle můžete dále zesložiťovat. Můžete přidávat další statistiky, které budou mít nějaký vliv na výsledek. Potom místo statistik mužstva brát statistiky jednotlivých hráčů... a to už vlastně simulujete průběh utkání.
Dmagician
Profil
Taketo veci riesi na vysokej skole preberaný predmet "Modelovanie a Simulácia". Takže... treba pekne zohnať literatúru a naštudovať ;-)).
YoSarin
Profil
Joker
trochu jsi mi něco připomněl (těma dvěma statistikama) - dračí doupě. :-)
Každý tým by měl několik statistok (vypočítaných ze statistik hráčů a jejich pozic) např - útok, obrana, faktor únavy a agresivita (aby se sem tam i někdo vyloučil ;) ) Každý tým si nějak "hodí" a porovná se útok prvního versus obrana druhýho (s přičtenými čísly) zároveň bych "házel" na štěstí "stostěnkou (0-99)" a hody bych rozdělil třeba takhle:
if(($hod % 10) == 0 && $hod < 50)

fatální neúspěch
else if(($hod % 10) == 0 && $hod >= 50)
dokonalá klika
else if($hod < 35)
smůla
else if($hod < 65)
klika
else
normálka

Pak bych podle toho jak dopadl hod na štěstí (ty čísla tam jsou jen orientační a třeba ty násobky desíti by se daly udělat i jinak - třeba dolních pět a horních pět procent, to je fuk) porovnal útok s obranou - štěstí by určovalo minimální rozdíl nutný pro ztrátu / udržení míče...
Yo'Sarin
mila
Profil
Že by další online hra?:)

Asi bych přehrál celý zásap, pokud to bude jen jakýsi hod na kostce, ztratí to veškeré kouzlo, navíc ten algoritmus hráči asi brzy objeví.
Přehrát zápas není nic složitého, stačí udělat cyklus třeba s 5400 opakováními, spočítané to je hned, jedek krok je vteřina.

Můžeš udělat třeba posty na hřišti, na každém je hráč z každého družstva, dle sestavy.
Míč je vždy na jedné pozici, a drží ho jedno družstvo.
Ve statistikách hráčů budeš mít něco jako agresivita, dle té (a třeba ještě svých schopností) se rozhodne hráč pro přihrávku, sólo nebo střelu.
Dle toho porovnáš nějakou další statistiku (passing, shooting, speed, ...) se statistikou hráče z druhého mužstva (při střele přidáš statistiku brankáře, při přihrávce započítáš statistiky těch, kam přihrává, vezmeš v úvahu pozici, morálku, únavu). Dle výsledku (náhodného samozřejmě, statistiky jsou jen pravděpodobnost) pak vyhodnotíš situaci – gól, ztráta míče, posunutí míče, úspěšnou kličku můžeš řešit jako posunutí míče o jedna a nějaký bonus, co tě napadne.
Hlavně to chce vyladit, ozkoušet a vše vyvážit...
Ze zápasu můžeš snadno vypsat zprávu, ty budou lidi rádi číst..
Joker
Profil
YoSarin
No jasně, taky jsem "Dračák" hrával :o))) Ale podobné principy najdete ve spoustě třeba online her... máte tým/armádu/vojáka a každý má nějaké číslo "offense" a "defense", ty se modifikují nějakými náhodnými čísly, aby to nebyla taková nuda :)
Další, komplexnější, varianta by byla tři čísla- útok, obrana, brankář... napřed by se porovnal útok vs. obrana a výsledkem by byl počet šancí, který by se pak porovnal s kvalitou protivníkova brankáře a z toho by vyšel počet gólů. Nebyl by problém vymyslet ještě další parametry.

Takhle by se dala vymyslet i hodně komplexní pravidla.
Předěl mezi určením výsledku "výpočtem" a "simulací" myslím je chvíle, kdy přestanete vypočítávat statistiky za celé mužstvo, ale budete opravdu počítat se statistikami jednotlivých hráčů.
Jinak i u výpočtu se dají udělat statistiky jednotlivých hráčů a ty se pak budou nějakým algoritmem přetavovat ve statistiky celého týmu. Podobně se to dělá třeba v tom Dračím Doupěti, kde hráč má charakteristiky jako síla, obratnost, odolnost,... a z nich pak vycházejí další charakteristiky, jako útočné číslo, obranné číslo,...
Anonymní
Profil *
Prehrávať po sekundách? Hádam po minútach, alebo chceš aby bol niekto za kompom 90 minút kvôli jednému zápasu?
Máš pravdu, spletl jsem se, myslel jsem po minutách.:-)

- Každý tým by měl dvě statistiky: útok a obrana. Každá z nich se modifikuje náhodným číslem (pokaždé jiným, samozřejmě :-) ) a porovnávají se křížem (útok jednoho s obranou druhého). Podle rozdílu se určí kolik gólů kdo vstřelil a ze skóre potom výsledek zápasu.
To není špatný nápad.

Taketo veci riesi na vysokej skole preberaný predmet "Modelovanie a Simulácia". Takže... treba pekne zohnať literatúru a naštudovať ;-)).
Wov, kde, za kolik, beru.:-)

Asi bych přehrál celý zásap, pokud to bude jen jakýsi hod na kostce, ztratí to veškeré kouzlo, navíc ten algoritmus hráči asi brzy objeví.
Přehrát zápas není nic složitého, stačí udělat cyklus třeba s 5400 opakováními, spočítané to je hned, jedek krok je vteřina.

Můžeš udělat třeba posty na hřišti, na každém je hráč z každého družstva, dle sestavy.
Míč je vždy na jedné pozici, a drží ho jedno družstvo.
Ve statistikách hráčů budeš mít něco jako agresivita, dle té (a třeba ještě svých schopností) se rozhodne hráč pro přihrávku, sólo nebo střelu.
Dle toho porovnáš nějakou další statistiku (passing, shooting, speed, ...) se statistikou hráče z druhého mužstva (při střele přidáš statistiku brankáře, při přihrávce započítáš statistiky těch, kam přihrává, vezmeš v úvahu pozici, morálku, únavu). Dle výsledku (náhodného samozřejmě, statistiky jsou jen pravděpodobnost) pak vyhodnotíš situaci – gól, ztráta míče, posunutí míče, úspěšnou kličku můžeš řešit jako posunutí míče o jedna a nějaký bonus, co tě napadne.
Hlavně to chce vyladit, ozkoušet a vše vyvážit...
Ze zápasu můžeš snadno vypsat zprávu, ty budou lidi rádi číst..

Tak tohle je bomba. Jak jsi myslel to:
Přehrát zápas není nic složitého, stačí udělat cyklus třeba s 5400 opakováními, spočítané to je hned, jedek krok je vteřina.???
Anonymní
Profil *
Kolik byste si za to řekli, kdybyste měli udělat takový algoritmus s přehráváním po minutách?
thingwath
Profil
Anonymní
Nejhorší je dát dohromady použitelný model a to nebude vůbec sranda. Hlavně se nemáš moc o co opřít. SImulace na úrovni fyzikálních zákonů už by nebyla nic moc :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0