Inlägg nr 3

Denna vecka har jag jobbat på olika delar av vårat spel bland annat

Hud

Particle system

AI

med mera.

Tänkte prata lite om AIn vi har i vårat spel och hur vi implementerade detta.

Förut hade vi all rörelse för varje fiende kodat i klassen för respektive fiende typ och detta resulterade i en väldigt många if else if överallt och gjorde hela koden oläslig praktiskt taget och ärligt så såg det inte så snyggt ut.

Så jag satt mig ner och funderade på hur vi skulle kunna lösa det på ett snyggare sett och som gör det lättare att ändra fiende beteenden istället för att gå in i flera olika cpp filer och leta efter rätt rad med kod.

Jag bestämde mig för att göra en klass som hanterar all rörelse och attack mönster med mera och göra så bara dom olika fiendetyperna kommer åt funktioner i den.

Jag skapade en enums för olika states fienden kunde befinna sig och definerade hur dom skulle betee sig i varje state det vill säga hur rör sig fienden? Hur attackerar den?

Har den player tracking? vilken hastighet rör sig dom i när dom är neutral eller aggressive? När slutar dom attackera dig? etc etc.

Detta görs i en private funktion eftersom inget annat behöver komma åt och ändra dessa värden.

Sedan gjorde jag en annan funktion som kollar vilken typ av fiende som kallar på funktionen, vart han befinner sig jämfört med spelaren och sätter vilket state fienden skall vara i beroende på om spelaren är i fiende typens aggro range eller inte eller om spelaren duckat undan fienden med mera.

 

Vilket ser ut ungefär såhär:

If(ENEMY_TYPE == TYPE_FALCON) gör något… t ex:

sätt variabler till rätt väden för hastighet med mera.

starta funktion för movement med rätt hastighet * deltatime och kolla om spelaren är inom aggro range.

om spelaren inte är i aggro range sätt gå in i MOVE_NEUTRAL state.

Om spelaren är inom rätt range sett nästa state till aggro ta spelarens position och byt rörelse till attack pattern.

Attackera spelaren. Untitled

Vart befinner sig spelaren nu? Byt state och så vidare.

Väldigt simpel lösning men gjorde så att koden blev lättare att läsa och debugga och lägga till/ ta bort fiender och hur dom rör sig.

Tyvärr är detta kanske inte den snyggaste lösningen eller den mest avancerade men den räckte till att täcka den basic AI vi behövde i vårat spel och det gå absolut att utvkecla detta vidare och ändra och lägga till funktionalitet.

About joni nikander

2015 Game Design