Ik was aan het nadenken over een aanvalsscript. Ik heb niet de intentie om een game te maken ofzo, maar was benieuwd hoe de berekening zou moeten om een game leuk te maken qua aanvalssysteem.
Bijvoorbeeld dat je deze 3 units hebt:
Ground Unit 1:
attack: 40 tegen grond, 80 tegen air
defence: 30 tegen grond, 40 tegen air
Ground Unit 2:
attack: 70 tegen grond, 10 tegen air
defence: 60 tegen grond, 50 tegen air
Air Unit 1:
attack: 80 tegen grond, 10 tegen air
defence: 50 tegen grond, 40 tegen air
Ik heb bv:
500 ground unit 1
500 ground unit 2
0 air unit 1
De vijand heeft bv:
300 ground unit 1
300 ground unit 2
300 air unit 1
Hoe bereken je wie er wint, hoeveel units gaan er vanaf, waar doe je de 'kansberekening' en hoeveel % is dat (zodat het een beetje spannend blijft), etc.
Je bent vast niet de eerste die hier tegenaan loopt, en er zijn ongetwijfeld artikelen / algoritmes waarbij je dit soort parameters maar hoeft in te vullen, en zij doen de rest.
Waar ik denk dat je mee moet beginnen is het vastleggen van alle "variabelen" in deze rekensom. Die zet je vervolgens om in allerlei "weegfactoren" die je vervolgens meeneemt in je uiteindelijke formule.
Wat je bijvoorbeeld ook mee kunt nemen (als weegfactor):
- terrein (bonus/penalty voor aanval/verdediging - bijvoorbeeld, jouw pantserdivisie staat op een verhoogd plateau, en de vijand komt aanrollen door de vallei )
- unit level (bijvoorbeeld is deze geupgrade, heeft deze meerdere veldslagen overleefd)
- wie wat aanvalt (kies je dit zelf?)
- moraal (als je aan het winnen/verliezen bent, kan dit extra positief/negatief effect hebben)
- "durability", in hoeverre zijn de units toe aan onderhoud (hoe lang zijn ze bijvoorbeeld al onderweg en door wat voor terrein)
- uitrusting / munitie (maakt voertuigen meer/minder geschikt tegen een bepaald type vijand, maar komt al min of meer tot uiting in attack/defense I spose)
- verhouding van de omvang van het aantal units (en de kwaliteit) ten opzichte van die van je tegenstander (voor een mug maakt het niet zoveel uit hoeveel attack / defense deze heeft tegen een olifant)
- "luck-of-the-draw", een soort van X-factor
Bekijk anders eens wat AD&D (Advanced Dungeons & Dragons) speelregels, ik denk dat je hier een heleboel overeenkomsten vindt.
Ja, maar buiten die dingen... hoe zou je letterlijk (in bv PHP) deze dingen die ik hierboven schreef regelen. Zonder verdere uitbreidingen, gewoon de meest 'basic' shape zeg maar.
$ground_unit_1['attack'] * $ground_unit_1['defence'] * (iets) etc.
Thomas - 28/01/2015 15:43 (laatste wijziging 28/01/2015 15:48)
Moderator
Ook daar lijkt het mij om eerst een aantal zaken uit te denken. Het gaat hier om "turn based combat" lijkt mij en niet een "real time strategy" spel?
Bijvoorbeeld:
Je kunt het in het eerste geval opdelen in beurten. Hierbij hebben al je units een gelimiteerde resource ("tijd") die je kunt gebruiken om:
- van positie te verplaatsen binnen het slagveld
- indien mogelijk (vijand is zichtbaar en binnen het bereik van je geschut)
- niets te doen (skip) / of misschien herladen / reparatie whatever
Als al je tijd is opgebruikt of als je aangeeft dat je klaar bent vindt de "gevechtsfase" plaats waarbij jij de aanvallende partij bent.
Daarna schakelt de beurt om naar de tegenstander. Is dit een menselijke speler? Een AI? Heeft iemand sowieso een beperkte tijd om je (tegen)aanval te plannen waarna de "gevechtsfase" start?
In die gevechtsfase worden de uiteindelijke berekeningen uitgevoerd, maar hoe deze er uitzien hangt van al deze andere factoren af.
Om nu te zeggen "geef mij de formule"... die heb ik niet.
Hier zal een stuk kansrekening in zitten die uiteindelijk in een "hit" of "miss" zal uitmonden. En die "hit" kan bijvoorbeeld inhouden dat je een bepaald percentage verslaat en/of daarbij een bepaald percentage verliest. Ook hier zal een heleboel afhangen van hoe alles is opgezet. De uiteindelijke berekeningen zijn daar slechts het resultaat van... Die eerder genoemde "weegfactoren" bepalen hoe je formules er uitzien, nog een reden om daar mee te beginnen .
Je moet een soort van idee hebben hoe de berekening plaatsvindt... maar jij vraagt juist "ik heb geen idee van hoe zo'n berekening wordt uitgevoerd", ik ook niet als je er niet bijvertelt hoe de dimensies ongeveer zijn opgespannen. Ik denk dat het een beetje hand-in-hand gaat niet?
EDIT: Daarnaast is het bijna een wetenschap om allerlei vermenigvuldigingsfactoren en waarden te "tweaken" om ervoor te zorgen dan het een "evenwichtig" geheel wordt en de speelervaring als "reëel" (of ten minste "leuk" of "uitdagend", of wellicht zelfs "hardcore" - heb je meerdere moeilijkheidsniveaus?) overkomt. Het moet niet te makkelijk zijn om te winnen, maar ook niet onmogelijk.
Je hebt legers aan de ene kant bestaand uit "50 x unit 1, 50 x unit 2 en 10 x unit 3" tegenover iemand die "40 x unit 1 en 100 x unit 3".
Dan vind het gevecht plaats waarbij dus op de een of andere manier wordt berekend wie er wint en wat de verliezen zijn (de berekening, het probleem).
Dan later kun je het uitbreiden met kans en andere 'tweaks'.
Maar deze bovenstaande berekening is al een uitdaging genoeg. De dimensies zijn dus klein...
Ik weet niet of je het spel nukezone.nu kent (is nu gesloten), die had ook zo'n aanvalstype.
Het is turnbased iid.. je klikt op een persoon, geeft aan waarmee je aanvalt en hij valt gelijk aan. Dan win of verlies je en krijg je de resultaten zien. Eventueel kun je nog een keer aanvallen.. maximaal 3/5 keer kun je aanvallen. Geen fancy gedoe dus.