• No results found

4. Genomförande

4.1 Implementation av spellogik

4.2.3 Beteendeträd för rörelse

Det sista och mest komplicerade beteendeträdet kontrollerar agentens rörelse samt vilka resurser som ska plockas upp och när den ska plocka upp dem. Trädet i sin helhet kan ses i figur 10, men är för överskådlighetens skull uppdelat i delträd som presenteras i figur 11, 12, 13, samt 14. Istället för att använda en vägsökningsalgorithm som A*, baseras agentens rörelser på styrbeteenden. Styrbeteenden är en rörelsemetod som skapa ett komplicerat beteende genom att kombinera flera enklare och simplare beteenden (Reynolds 1999). Eftersom miljön saknar statiska hinder behöver agenterna inte den starka kontrollen som kommer ifrån en vägsökningsalgorithm. Om agentens rörelse hade varit animerat och behövt närmare efterlikna en riktig människas rörelse hade den behövt mer komplicerade algoritmer men här räcker styrbeteende (Kapadia et al. 2012). Rörelseträdet börjar med en sekvensnod som nollställer rörelsen och gör agenten redo för nya rörelsekrafter. Efter det kallas det första styrbeteendet som ger agenten en rörelsekraft i motsatt riktning från alla fiender i närheten, samt i motsatt riktning från kanterna av spelplanen. Eftersom mänskliga spelare

observerades ofta undvika kanterna av skärmen uppmuntrades agenten till att bete sig liknande genom att lägga till en konstant rörelsekraft mot mitten av spelplanen. På samma sätt uppmuntras agenten att hålla sig nära spelaren genom att lägga till en rörelsekraft mot spelaren. Eftersom spelare kan hjälpa varandra är det viktigt att vara tillgänglig ifall

medspelaren blir besegrad.

Figur 10 - ​Ett beteendeträd som kontrollerar många av agentens val. Den kontrollerar

agentens rörelse, vilka resurser den plockar upp samt när, den kontrollerar när den hjälper sin medspelare och den kontrollerar vad agenten gör under lugna perioder utan fiender.

Efter de föregående krafterna applicerats undersöker agenten tillståndet på sin medspelare. Om medspelaren är besegrad börjar agenten att röra sig till hen för att hjälpa denne. Det är ett viktigt beteende för agenten att ha då spelet förloras om båda spelarna besegras, samt att spelet är skapat för samarbete vilket gör det mycket enklare att spela om båda spelarna aktivt deltar, denna del av trädet demonstreras i figur 11.

Figur 11 -​ ​En närmare bild på övre vänstra delen av rörelseträdet i figur 10. I den här delen

av trädet bestäms generella beteenden som att undvika fienden och hjälpa medspelaren.

Härnäst bestämmer beteendeträdet om den behöver plocka upp någon resurs som existerar i miljön. Valet görs med en selektionsnod och tre villkornsnoder som både bekräftar agentens egna tillstånd och om resursen existerar i miljön, se figur 12. Eftersom den använder en selektiosnod fokuserar agenten bara på en resurs i taget. Agenten prioriterar då hälsa främst eftersom den behöver det för att fortsätta spela. Efter hälsa prioriteras vapen och hur

användbart vapnet anses vara i jämförelse med de nuvarande vapnet som agenten

använder. Om det finns ett bättre vapen att plocka upp försöker agenten plocka upp det. Den lägsta prioriteringen är ammunition då ammunition endast plockas upp om agenten har ett bra vapen och låg ammunition kvar. Valen för agentens beteende och prioriteringar baseras på hur speltestare agerade när spelet testades. Senare släpper agenten sitt vapen om den har slut på ammunition och det inte finns ammunition att plocka upp. Om agenten har ett vapen, tillräckligt mängd ammunition till vapnet och medspelaren inte har ammunition försöker agenten dela med sig av sin ammunition till medspelaren.

Figur 12 -​ ​En närmare bild på nedre vänstra delen av rörelseträdet i figur 10. I denna delen

bestäms beslut om hur agenten ska hantera resurser på spelplanen samt sina egna resurser.

Många komponenter och val i beteendeträdet beror på gränsvärden där agenten utför specifika handlingar när variabelvärden antingen är under eller över olika gränsvärden. Kennedy (2012) beskriver att gränsvärden är en acceptabel metod eftersom i många tillfällen är stora delar av mänsklighet inte av intresse. Som exempel är det inte nödvändigt att

simulera agentens känslor i spelet.

När agenten har en fiende att fokusera på försöker den alltid att hålla ett lämpligt avstånd från fienden medans den cirkulerar runt fienden för att undvika attacker, se figur 13. Det är skillnad på vilken position den väljer att cirkulera. Om fienden den fokuserar på kan attackera från avstånd och den har mindre än fem andra fiender nära sig cirkulerar agenten runt den fiendens position. Annars cirkulerar agenten runt mittpunkten av alla fiender nära den valda fiende. Agenten gör detta eftersom om den alltid hade cirkulerat runt fiendens position hade den kolliderat med andra fiender i närheten av fienden som är i fokus och troligtvis tagit skada. Detta minskar också chansen att agenten gör fel och kolliderar med fiender av misstag.

Figur 13 -​ ​En närmare bild på mellersta delen av rörelseträdet i figur 10. I denna delen

bestäms beslut om hur agenten ska röra sig i relation till fiender.

Den näst sista komponenten av rörelsebeteendeträdet är beteenden för när agenten ska vara sysslolös. Om spelaren och agenten besegrar alla fiender innan nästa fas påbörjas har de möjligtvis en kort tid utan något viktigt att göra. Under perioder är det viktigt att agenten inte är helt inaktiv eftersom mänskliga spelare ofta gör aktiva saker under tiden de väntar på att perioden ska ta slut (Conroy, Wyeth & Johnson 2011). Dessa lugna perioder av spelet är ett bra tillfälle att implementera det Hadeld-Menell, Andrus och Hadeld (2019) kallar “silly rules” vilket är beteenden och handlingar som människor utför utan tydliga eller direkta positiva effekter. Flera möjliga beteenden observerades under testning av spelet och flera av dessa implementerades.

När agenten ska vara sysslolös kombinerar den beteenden från tre olika kategorier: rörelse, sikte och skjutande, se figur 14. Med jämna mellanrum väljs en ny kombination av beteenden från dessa kategorier. Inom rörelse kan agenten stå på plats eller vandra och utforska miljön. I kategorin sikte kan agenten sikta mot en slumpvis punkt, följa medspelaren med sitt sikte eller snurra i cirklar. Den sista kategorin består av att agenten antingen skjuter eller inte skjuter. Om agenten har ett annat vapen än pistolen skjuter den aldrig för att spara ammunition. Alla dessa kategorierna kan kombineras för att tillsammans skapa mer varierande sysslolösa beteenden. Exempelvis kan beteendet för att snurra i cirklar kombineras med vandringsbeteendet vilket orsakar agenten till att vandra runt i miljön medans den snurrar.

Figur 14 -​ ​En närmare bild på högra delen av rörelseträdet i figur 10. I denna delen bestäms

beslut om hur agenten ska bete sig när den är sysslolös.

Related documents