Autor Zpráva
ann
Profil *
zdravím,jak by jste vyřešily tento problém když máte tyto hodnoty?
1) životy
2) síla(weapon)
3) obrana (armor)
4) rychlost (sekání)
5) přidaná síla
?
zkoušel jsem něco takového
(int) (($aSpeed*$aSila/($bDef/1.5))*(rand(8000,12000)/10000));
ale je to jen na rychlost,sílu a defensi (obranu)
jak zařadit všechny aby to fungovalo správně?
ann
Profil *
no,už jsem na to přišel :)
akorát mám problém,dal jsem to do while,a dal jsem tam podmínku aby čísla nechodily do záporu.
jde nějak udělat aby šlo do záporu pouze první číslo?
jelikož mě to vypíše
169 - Sebral jsem 238HP
tak aby to ukázalo ještě potom že mu zbylo -69 HP
podmínku mám pouze takovou
if(0<$bHp){
bHp proměnná je HP(životy) protivníka


Ps.asi jsem to vyřešil,ale nejsem si jistý jestli je to takový idealní řešení,dal jsem tam podmínku -100<hp
co myslíte?
Alphard
Profil
Co chcete slyšet? Algoritmus na výpočet nějakého porovnání sil jde napsat tisíci způsoby, jako autor hry jste si vybral jeden z nich. Z těch parametrů ani není jasné, jestli jde útočné jednotky použít i pro obranu (s menší účinností) apod.

K výpočtu samotnému doporučím vaší pozornosti matematické funkce. Nemusí být vše takto jednoduché, můžete použít např. logaritmy, vhodné v situacích, kdy extrémní zvyšování nějakého parametru nevede k zásadnímu ovlivnění výsledku.

Ve hrách, které jsem viděl, je výpočet výsledku střetu sil řešen složitěji, více typů jednotek s rozdílnou sílou proti různých typům jednotek protivníka apod.
Joker
Profil
ann:
Nic ve zlém, ale vzhledem k tomu, jaký problém byl minule s procenty, doporučil bych k tomu projektu přibrat někoho, komu matematika nedělá takové potíže, aby vymýšlel ty vzorečky.

Jak už psal Alphard, vzorec pro takový výpočet se dá sestavit mnoha způsoby v závislosti na tom, jakou má mít který parametr váhu, jak velký vliv má rozdíl mezi těmi parametry (extrém je na jedné straně situace, kdy i při poměrně velkých rozdílech mezi hráči bude výsledky určovat hlavně náhoda a na druhé straně situace, kdy se vyplatí vylepšovat jeden konkrétní parametr a ostatní ignorovat).
juriad
Profil
Nebo na tom možná vzít kladivo. Vytvořit hromadu (desítky) příkladů soubojů hráčů s různými parametry a očekávaným výsledkem, a pak to nechat naučit nějaký stroj nebo neuronovou síť. A ještě do toho také vnést nějaký prvek náhody. Výsledkem nebude jeden vzorec a často ani žádný vzorec nepůjde rekonstruovat, ale bude to velice přesně reprezentovat souboje podle tvého očekávání (pravidla soubojů budeš měnit změnou příkladů).
Joker
Profil
juriad:
Nebo na tom možná vzít kladivo.
To mi přijde spíš jako kanón- na vrabce. Navíc to ann podle mě nedokáže implementovat.

I když vzorec je sice jednoduchý na implementaci v programu, ale je umění ho správně sestavit.
Typické problémy vzorců jsou dva:
1. „Díry ve vzorci“, kdy jde ostatní rozdrtit nějakou neočekávanou strategií (třeba investováním všeho jen do jediné vlastnosti).
2. Hráči po čase vzorec (alespoň přibližně) odhalí a vzniknou optimalizované strategie, proti kterým hráči nehrající „podle vzorce“ nemají šanci.
1Pupik1989
Profil
Záleží i na konceptu celé hry. Jestli ta hra má level systém, tak i ten se musí připočítat. U rpg jsem si ve 2d udělal obrys postavy v bodech a generoval náhodně souřadnici X a Y. Zvolil jsem kritické body postavy a radius působnosti. Pokud byla souřadnice uvnitř obrysu, našel jsem nejbližší kritický bod a zjistil jestli je generovaný bod v radiusu. Pokud byl, tak jsem interpoloval hodnotu podle vzdálenosti od středu. Samozřejmě hodnoty se předpočítaly s útoku, levelu, síly zbraně. U protivníka zase z obrany, brnění a levelu. Pak už stačí interpolovat bod dle vzdálenosti.

Pokud bod nebyl uvnitř obrysu, tak minul.

Celé to spočívalo v tom, že ze začátku jsem vypočítal kolik prázdného místa okolo obrysu postavy. Tím jsem měnil poměr úspěšnost/neúspěch.

Teoreticky by se to dalo využít i ve strategii.

Kdyby se použila výšková mapa, tak by to značně mohlo zjednodušit kód.

Mohlo by to vypadat nějak Takto
ann
Profil *
no,zatím jsem to vykoumal takto
$adm = rand((($aSila - $bDef) / 3), (int)(($aSila - ($bDef - 1)) * 1.25));
ale tam jsou jen 2 prvky(síla a obrana)
životy ubírám takto
$bHp -= $adm;
takže mám 3 prvky z 5
jak tam dodělat ještě zbylí 2?
rychlost a přidané hodnoty Síly?
místo rychlosti bych mohl dát i štěstí,takže to bych mohl dát místo 1.25 a přičítat vždy třeba o 0.001 ?
takže ve výsledku by to mohlo vypadat takhle?
$pridana_sila = 100;
$stesti = 1;
$adm = rand((($aSila +$pridana_sila  - $bDef) / 3), (int)(($aSila+ $pridana_sila - ($bDef - 1)) * 1.25+0.00$stesti));
$bHp -= $adm;
?
jenikkozak
Profil
ann:
no,zatím jsem to vykoumal takto
Chápu správně, že po útoku stonásobně silného vojska nemusí z útočníka zbýt ani ň?
ann
Profil *
jenikkozak:
no,takhle to nemá bejt.. :D
a tak jak by to teda mohlo bejt lepší?
jenikkozak
Profil
To záleží na tvé představě. Je to prakticky to, co tvoji hru dělá tvojí hrou.
Raději začni od začátku. Hodnoty a operace s nimi přidávej na základě potřeby a snahy algoritmus zlepšit. Ne proto, aby byl prostě delší.

I když najít si do týmu někoho, komu nedělá problém trojčlenka, by taky nebyl úplně špatný nápad…

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0