Nekromanti Feuflux kodar ett RTS - Part 2

Feuflux

omjonasson.se
Joined
8 Jan 2001
Messages
5,060
Location
Linköping
Part 1

Det här är ytterliggare en "skriva av sig"-tråd, som hamnar här på Övriga spel eftersom det inte är ett rollspel jag makar utan ett datorspel.

Tiden har kommit till att skriva en ordentlig AI och jag behöver komma fram till nåt spår jag vill köra på. Mitt spel heter Married With Swords och är ett RTS där du flyttar omkring arméer över olika kartor. En armé består av olika sorters trupper samt proviant (som går åt fortare ju större armén är). En armé rör sig dessutom långsammare ju större den är.

På kartan finns det städer (där du kan rekrytera fler soldater till besökande armé, och i viss mån proviantera), byar (där du kan proviantera) och "hinder" (berg, sjöar, whatever där armén inte kan röra sig). I städerna går det att bygga byggnader för att få mer resurser.

AIn för varje enskild fiendearmé måste alltså kunna ett par saker:
* När provianten är för låg -> gå till passande stad/by och fyll på (förutsatt att inte något annat mål är viktigare just nu)
* När den har för få enheter -> gå till passande stad och rekrytera (förutsatt att inget annat har högre prio...)
* Utför order av typen "attackera armé X", "patrullera mellan koordinaterna K1, K2 och K3" eller "inta stad Y så att inte spelaren kan gå dit och rekytera utan en fight".
Här behövs någon slags viktning alltså, så att armén inte börjar svälta mitt under sitt korståg eller nåt.

Sedan kan ju en given fiende har flera arméer igång och då blir det ännu lurigare. Säg att målet med banan är att erövra alla städer = fiendens mål är att kontrollera minst en stad. Har han då tre arméer så måste dessa ju samköras på nåt vis. Om armé1 utplånas måste kanske de båda andra få helt andra ordrar. Det behövs nån form av AI för varje fraktion som avgör vad dess arméer ska pyssla med.

Sådärja, färdigpladdrat. Nu kan jag börja fundera på riktigt.
 

Übereil

Swashbuckler
Joined
10 Jun 2010
Messages
1,918
Location
Örebro
Feuflux said:
Här behövs någon slags viktning alltså, så att armén inte börjar svälta mitt under sitt korståg eller nåt.
Om vi tar t ex mat så bör viktningen baseras på hur fort armén gör av med mat. Dvs "om X tid så kommer vi ha slut på mat", är X för kort så skaffar man mat. Om man planerar att rekyrera mer folk så kommer det öka matkonsumtionen, och bör därmed också tas in i beräkningen.

Hurvida det behövs mer folk bör vara baserat på hur mycket folk man förlorar och hur mycket det kostar med folk (man behöver mata dem, om inte annat), samt hur långsam man blir (man kanske behöver komma någonstans fort).

Übereil
 

Snow

Swashbuckler
Joined
17 May 2000
Messages
2,617
Location
Klippan
Jag har skrivit en AI till ett RTS. Den blev kass, men ändå rätt underhållande att spela mot. Det märktes väldigt tydligt att den inte var en människa. Däremot fattade den sina beslut så fort att om du lämnade en öppning någonstans så hade man fiender över sig inom några sekunder. Det balanserade lite för att den övergripande strategin var så usel. Sammantaget blev det en fiende som man slog, men inte utan att bita på naglarna lite.

Här kan man ladda ner för windows och osx:
https://dl.dropbox.com/u/33454172/war-contract-win.zip
https://dl.dropbox.com/u/33454172/war-contract-osx.zip

OBS! Det funkar sådär. Jag har lekt med pathfinding och det blev sådär bra. Enheterna fastnar ibland.

Den fungerade såhär:
Alla AIns enheter ligger i en lista.
Tio gånger i sekunden räknar den fram en order till en enhet i listan. Listan blandas inte så enheterna får alltid ordrar i samma ordning.

När AIn räknar fram en order räknar den antalet fiender och allierade inom en viss radie. Detta gjordes väldigt enkelt, egentligen borde man räkna på slagkraft, hälsa och positioner, men jag gjorde det enkelt för mig.
Sen följde ett antal regler i prioritetsordning, såhär:

Är vi övermannade? (fler fiender än allierade) Då ska jag fly bort från fienderna.
Har vi övertaget? (fler allierade än fiender) Då ska jag flytta mot motståndarna (och skjuter automatiskt på dem).
Till sist: jag har inget bättre för mig så jag ska hitta närmsta punkt att erövra.

Jag planerade fler regler än detta men sen tog orken slut. :)

Övriga regler:
Är hemmabasen hotad? Flytta hem.
Närliggande enheter behöver assistans, hjälp dem.
Fiendens bas ligger öppen, attackera den!

Man kan givetvis tänka sig många fler regler och avgöra vilken man ska välja på olika sätt.

Jag har funderat på att kombinera denna enhet-för-enhet-ai med något mer övergripande. Något övergripande som delar in kartan i zoner och räknar fram rekomendationer för de olika zonerna: "anfall här", "åk inte hit just nu, vi är redan många här" etc. Så att AI:n sprider sig längs fronten på ett bra sätt.

Min AI hade en förkärlek för att köra många enheter till samma flagga för att erövra den. Trots att det bara behövdes en. Men den var som sagt väldigt enkel.
 

Feuflux

omjonasson.se
Joined
8 Jan 2001
Messages
5,060
Location
Linköping
Ska svara och tacka er båda för feedback. Det är rätt dött på inspirationsfronten just nu så det kodas typ ingenting, men det ska väl ta fart snart igen hoppas jag.
 
Top