Kognitionsvetenskapliga Programmet LiU. AI i spelet Magicka. Gruppbeteende/Grupprörelser. Jonathan Nilsson

Relevanta dokument
729G Artificiell jakt och flockbeteende inom datorspel

EXAMENSARBETE. Developing tactical group-based game-ai

Richard Wiik 9/16/2011

NODA Smart Heat Building. Hur funkar det? - En teknisk översikt

Post Mortem för Get The Treasure!

UTVÄRDERING AV ALGORITMER FÖR BRED KOLLISIONSDETEKTERING MED HJÄLP AV BOIDS ALGORITM

Ett spel skapat av Albin Wahlstrand

TDP005 Projekt: Objektorienterat system

Någonting står i vägen

Inledning. Kapitel Bakgrund. 1.2 Syfte

ATT LEDA I KOMPLEXA SYSTEM eller Hur kan man tillsammans driva utveckling när man inte alltid är chef i linjen över dem som skapar resultaten?

Pipelining i Intel Pentium II

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson

Gränssnitt för FakeGranska. Lars Mattsson

Fuzzy Logic: Den oskarpa skarpheten

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

Objektorienterad analys och design

4.2 Fastställ en referenslösning Kundvärde... 6

Den intelligenta dammsugaren

Space Invaders - Slutrapport

Slutrapport för Pacman

Optimering av depåpositioner för den minimala bensinförbrukningen i öknen

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004

ARTIFICIELL INTELLIGENS

Real-time requirements for online games

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Från ljusenergi till en kub som går att stå på Hur man får en dator att känna igen olika former i visuell information

SVÄRM-AI I SHOOTERS SWARM-AI IN SHOOTERS

Att göra spel med Game Maker. Rum. Grundläggande delar. Gamemaker, dagens föreläsning. Programmeringsmodell

3 augusti (G) Programmering: Lego

Kravspecifikation TDP005 Projekt: Objektorienterat system

TJUVSTARTER I AGILITY - en kamp i envishet

UTVÄRDERING KOMBINATIONER STYRBETEENDEN FÖR GRUPPER AV AUTONOMA AGENTER

Att leda ett lag. Christer Dreberg. Handledare: Ulf Engman

Bästa skottläge på en fotbollsplan längs långsidan

Artificiell intelligens, eller Kommer din dator att bli klokare än dig? (eller kanske är den redan det?)

DATORER OCH PROGRAM. Datorn är en symbolmaskin

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

Introduktion till digitala medarbetare. RPA-dagen digital arbetskraft, 22/

Plugins som får er Wordpress att sticka ut

Kravspecifikation. TDP005 Projekt: objektorienterade system. Version 4.0 Datum Anna Ahlberg Johan Almberg

Artificiell Intelligens inom datorspel Är det ett seriöst ämne?

Supply Chain Management

Concept Selection Chaper 7

4.1 Inventering av olika koncept

4 rörelsemängd. en modell för gaser. Innehåll

LINKÖPINGS UNIVERSITET. Fuzzy Logic. Johan Brage 9/16/2012

Gesäll provet Internetprogrammering I. Författare: Henrik Fridström. Personnummer: Skola: DSV

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

att koncentrera sig, att bibehålla uppmärksamheten, att minnas osv., som orsakades av att så mycket energi gick åt till att bearbeta den förändrade

Öka prestanda i Shared-Cache multi-core processorer

Test: Optimerad fallprovning med Dell, Intel och Altair

Aktiva och passiva handlingsstrategier

SPELTESTNING FUZZY LOGIC. Kandidatuppsats i Informatik. Patrik Lundqvist Michael Enhörning VT 2010

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

DATORER OCH PROGRAM. Programmerade maskiner Program beteendeplan och beteendegenerator Generalitet och portabilitet Datorn är en symbolmaskin

Anton Brunberg,

UTVÄRDERING AV STYRBETEENDEN FÖR GRUPPER AV NAVIGERANDE AGENTER

E-posthantering med Novell Groupwise WebAccess

Thinking in systems - Donella H. Meadows

Säkerhet genom simpel nätverksutrustning. Högskoleingenjörsexamensarbete Fredrik Folke

Positiv Ridning Systemet Negativ eller positiv? Av Henrik Johansen

Tips för laget/gruppen

TDDD92 Artificiell intelligens -- projekt

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Handbok Rymdduell. Andreas Zehender Eugene Trounev Översättare: Stefan Asserhäll

Digitala projekt rapport

Hur gör man ett trådlöst nätverk säkert?

Lektion G43 Artificiell intelligens. Robin Keskisärkkä Ellinor Ihs Håkansson Cornelia Böhm

Reagera på WoW-event Att använda OnUpdate Introduktion Att kapa funktioner Automatisering och AI

Smart Heat Building. Hur funkar det? En teknisk översikt. Noda Intelligent Systems Noda Smart Heat Building

Labrapport över Rumbokningssytemet Grupp:1

Slutrapport Get it going contracts

el o;; Utbildningsplan för Kognitionsvetenskapligt kandidatprogram Bachefor Programmein Cognitive Science 180 Högskolepoäng

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

URVAL AV UTFÖRDA HOBBYPROJEKT

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

============================================================================

Universums tidskalor - från stjärnor till galaxer

Denna transportuppsättning behöver du för att överhuvudtaget orka vara konsekvent, samt för att du ska ha något att ta till när du har bråttom!

Laser Maze Art nr: TF1004

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

FMCK Malmö Boris Magnusson. Markering av Endurobana

Laboration 2. Artificiell Intelligens, Ht Lärare: Christina Olsén Handledare: Therese Edvall Daniel Ölvebrink

DEN RUNDA TUNNELN EN UNDERSKATTAD FIENDE

Detaljbeskrivning av Player

2. Konsten att skapa gemenskap ur trenätsperspektivet

Tajmingen av belöningen, både tidsmässigt och placering, samt den gradvisa ökningen av svårighetsgrad är väsentlig för resultatet.

SVÄRM-AI FÖR TAKTISKA BESLUT HOS GRUPPER AV FIENDER SWARM AI FOR TACTICAL DECISIONS IN GROUPS OF ENEMIES

Case-based resoning. och dess användning inom sjukvården. Linköpings universitet Artificiell intelligens II 729G11 HT 2011

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Robin Wahlstedt Datavetenskap / Spel Vetenskapsmetodik rwt07001@student.mdh.se. Datorgrafik i spel

Edward de Bono: Sex tänkande hattar

Optimering av boids med genetiska algoritmer Mattias Sossna

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Att välja kurser på Datateknik år 4-5

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

TDDD92 Artificiell intelligens -- projekt

Transkript:

Kognitionsvetenskapliga Programmet LiU AI i spelet Magicka Gruppbeteende/Grupprörelser Jonathan Nilsson jonni544@student.liu.se 2011-09-01

2

Sammanfattning Den här fördjupningsuppgiften kommer handla om AI i spel och mer specifikt om grupprörelser och gruppbeteende hos agenter i spelet magicka. Jag har fördjupat mig i hur detta fungerar och hur man strukturerar upp det samt vilka komponenter som är viktiga för en AI:s grupprörelser. 3

1.1 Innehållsförteckning 1.1 Innehållsförteckning.4 2.1 Inledning 5 3.1 Arbetets Uppbyggnad..5 4.1 AI inom spel.6 5.1 Finite State Machine..6-7 6.1 Fysik Checkar 7 7.1 A* pathfinding.7-8 8.1 Boids 8-12 8.2 Separation..9 8.3 Alignment.9-10 8.4 Cohersion.10 8.5 Wander..11 8.6 LeaderFollow..11-12 8.7 PositionFollow 12 8.8 Pursuit.12 9.1 Message system.12-13 10.1 Optimering 13 11.1 Diskussion 13-14 12.1 Källförteckning.15 4

2.1 Inledning Jag har valt att fördjupa mig på AI inom spel då detta är något som fascinerar mig mycket, och det jag har valt att göra inom detta är just gruppbeteende hos agenter i det svensktillverkade spelet magicka. AI inom spel är ofta designat så att det ska få spelaren att tro att det är ett intelligentare program dem möter än vad det egentligen är, för att skapa detta så måste man bland annat skapa ett rörelsemönster för alla agenter. I spelet magicka spelar man en karaktär i tredje persons perspektiv och möter många fiender som oftast kommer i stort antal emot spelaren. Hur fungerar dessa agenters beteende och rörelsemönster då? Detta är huvudpunkten i rapporten men för att förklara det måste även vissa andra element förklaras också bland annat A* pathfinding och Finite State Machine. Bild 1: Spelet magicka med spelare samt ett stort antal agenter i form av npc:s som rör sig mot spelarna i grupperingar. 3.1 Arbetets uppbyggnad Jag kommer att förklara hur dem har byggt upp grupp beteendet/grupp rörelserna i detta spelet stegvis med att börja förklara hur man brukar lösa detta problem i andra spel samt vad som krävs mer för att få detta gruppbeteende att funka samt självklart hur själva beteendet är uppbyggt. 5

4.1 AI inom spel Artificiell intelligens inom spel har utvecklats otroligt mycket sedan första förekomsten 1951 då ett av de första programmen för spel konstruerades. Detta konstruerades av Christopher Strachey och var ett program för checkers (dam), nu finns det avancerade program som spelare möter i flertal olika spel, bland annat i spelet Magicka som jag ska fokusera på. Rörelsemönster och beteende är en väldigt stor del av att skapa en bra AI till spel och när man har flertalet agenter som genomför handlingar samtidigt så blir det även viktigt att få dessa att samspela och det är då Gruppbeteenden kommer in. Ett gruppbeteende är helt enkelt att agenterna kan röra sig med varandra utan att krocka eller stå i varandras väg samt att dem kan röra sig mot ett och samma mål och hjälpa varandra uppnå det. Artificiell intelligens i spel kan byggas upp på många olika sätt men skaparna av Magicka som jag har fördjupat mig i har använt sig av något som kallas Finite-state-machine, detta hade jag tänkt förklara också då detta har lite med min fördjupning att göra, samt så ska jag även förklara vad Fysikcheckar är. 5.1 Finite State Machine Finite state machine eller finite state automaton som det också kallas är en teknik för att skapa intelligenta agenter i spel. State Machine betyder att man inför olika statusar eller lägen som agenten/agenterna kan skifta mellan beroende på hur kraven ser ut för varje läge samt att varje läge låser upp nya handlingar samtidigt som det stänger av andra som agenten hade tillgängliga innan. I magicka har agenterna spelaren möter flera olika lägen dem skiftar mellan nämligen defensivt, aggresiv, passivt, flykt, hopp samt passiv aggresivt läge. Dessa lägen skiftar beroende på hur spelaren agerar, om spelaren inte rör sig tillräckligt närma en agent så förblir denna agent i passivt läge men om spelaren rör sig inom en förutbestämd radie till agenten så övergår agenten antingen till defensivt eller aggresivt läge beroende på vad det är för slags agent man möter(kan vara flertal olika fiender till spelaren) vissa agenter har läget passiv aggresivt implementerat vilket betyder att när spelaren kliver innanför agentens förutbestämda radie så börjar en mätare hos agenten att räkna och desto längre tid spelaren står i denna radie desto högre kommer agentens mätare att gå, när den sedan blir tillrcäkligt hög så attackerar agenten spelaren. När spelaren till exempel har infört tillräcklig stor skada på agenten så övergår den till flykt läge. Varje läge har ett speciellt antal handlingar som är unika, vilket betyder att agenten kan inte utföra samma handlingar när den är i defensivt läge som den kan när den är i aggresivt läge. Tack vare dessa lägen kan man skapa dynamiska mål 6

och handlingar som agenten kan sträva efter samt använda sig av samt att på detta sätt så agerar agenten intelligent i den aspekten att agenter genomför mothandlingar för att stoppa spelaren, till exempel attackerar om spelaren kommer för när eller om spelaren attackerar först. 6.1 Fysik Checkar Fysik checkar används när agenten rör sig i spelmiljön, som kan vara väldigt varierande. Detta är mycket viktigt då dessa checkar hindrar agenten från att fastna i objekt eller gå utför stup. De funkar på det sättet att med en koll som genomförs på godtyckligt avstånd framför agenten så undviks kollisioner, dock blir det annorlunda vid stup då det inte finns något att kollidera med. Istället körs även en koll som kollar efter den närmaste noden som agenten styr mot och om denna nod ligger för långt ifrån den punkten agenten styr mot så betyder det att det mest sannolikt ligger ett stup framför. När dessa fysik checkar utförs och upptäcker hinder eller stup så övergår agentens gruppbeteende till en individuell oberoende A* pathfinding sökning, vilket jag ska förklara härnäst. 7.1 A* pathfinding I varje spel så delar man upp miljön i noder som sedan också tilldelas värden som till exempel, gångbar och icke gångbar. Det denna metod gör är att den helt enkelt genomför en A* sökning på dessa noder för att ta reda på vart agenten kan och ska gå och vilken väg agenten ska ta. En A* sökning fungerar på det sättet att den uppskattar avståndet från start noden(noden som agenten står på för tillfället) till målnoden och sedan adderar detta avstånd med det verkliga avståndet till den första noden som ligger på väg till målnoden. På detta sätt så räknas den kortaste och mest kostnadseffektiva vägen ut genom att agenten då kommer ta den noden som har kortast väg (väg till nästa nod + uppskattad väg kvar till målnod) dock får aldrig den uppskattade vägen till målnoden uppskattas till att vara längre än vad den verkligen är för då fallerar hela ideén med denna metoden. I spelet magicka så är detta implementerat på de sättet att agenten använder sig av A* pathfinding när den möter ett object den inte kan gå 7

över eller kommer till ett stup, agenten bryter då upp sina kopplingar till gruppen en kort stund tills den har kommit förbi hindret ifråga. 8.1 Boids Boids är från början ett regelsystem som en man vid namn Craig Reynolds konstruerade 1981. Detta system konstruerades så att man skulle kunna på ett mycket övertygande sätt efterlikna flockbeteenden hos fiskar och fåglar samt andra flockdjur, detta med hjälp av 3 huvudregler samt ibland även andra kompletterande regler för mer avancerade flockbeteenden. Dessa regler är Separation(Uppdelning) Alignment(Justering) samt Cohesion(Sammanhållning). I dessa flock simulationer så kallas varje enskild individ en boid. Dessa tre regler arbetar tillsammans med en radie som varje boid tilldelas, boiden kommer sedan att anpassa sig efter andra boids som rör sig inom boidens radie, detta ger därmed upphov till ett beteende som flera boids delar samt påverkas av, bilden nedan visar en så kallad boids neighbourhood. Alla boids som är innanför denna radien påverkar och påverkas av boiden i fråga här. På detta sätt får man fram ett mycket naturligt grupp/flock beteeende. Man kan anpassa det med fler regler om man så vill och få flockbeteenden som liknar fåglars eller fiskars beteende i flock. Figur 1: Här ser man en boids neighbourhood Detta har självklart spelindustrin tagit vara på och framförallt magicka använder sig av detta för att skapa grupper genom att låta agenter ta boidens platser, inte nog med det tack vare dessa gruppbeteenden behöver man inte använda sig av A* pathfinding för varje enskild agent hela tiden, vilket skulle kräva väldigt mycket resurser av datorn/programmet som kör spelet. 8

8.2 Regel nr 1: Separation Figur 2: En boid som undviker stora koncentrationer av andra boids i sin närhet Denna regel är till för att boidsen ska undvika att flockas ihop så tätt inpå varandra att rörelserna hindras, detta genom att styra ifrån koncentrationer av flera boids. Boidsen håller alltså ett mindre avstånd från varandra konstant. För att skapa detta avståndet så tilldelas varje boid ett litet område runt omkring sig (godtyckligt uppmätt). Om en annan boid kommer inom detta avstånd så byter boiden riktning för att styra bort ifrån den inkräktande boiden. På detta sätt hålls avstånden hela tiden och man undviker kluster av boids. 8.3 Regel nr 2: Alignment Figur 3: Boiden justerar sin riktning så den är likvärdig riktningen hos de lokala boidsen. Boidsen styr mot medel riktningen för alla lokala boids. Denna regel skapar en viss samkoordination som gör att det ser ut som att flocken rör sig som en enhet. För att få justeringen som denna regel gör möjlig så använder sig boidsen av styrvinklarna från alla boids i dess närhet och adderar dessa för att sedan dela denna summa med antalet boids i närheten, då får man ut medelstyrvinkeln och det är denna vinkel som boiden sedan anpassar sig efter. I denna regel brukar man också lägga in en anpassning i hastighet, så att boidsen får ett mjukare rörelse mönster och motverkar då snabba starter och plötsliga stopp, detta 9

fungerar på samma sätt som när man räknar ut medelstyrvinkeln. Boiden kollar rörelsehastigeheten hos alla lokala boids i dess neighbourhood och adderar alla dessa hastigeter för att sedan dividera summan man får ut med antalet boids i närheten. Man får alltså då ut en medelhastiget som boiden kommer anpassar sig efter. 8.4 Regel Nr 3: Cohesion Figur 4: Här ser man en boid som styr mot den lokala gruppen. Den tredje regeln är till för att skapa sammanhållning så att grupperna eller flockarna,om man så vill, inte ska splittras. Regeln säger att boidsen ska röra sig mot medelpositionen hos dem lokala boidsen. Liknande alignment så räknas medel positionen ut genom att man tar alla vektorer (här i form av positioner) av boidsen i närheten och delar denna summan med antalet boids i närheten. Därmed får man ut medelpositionen och denna punkt kommer boiden att styra emot tack vare styrkraften som denna regel ger upphov till. Dessa regler används mer som viljor, detta gör att man kan ställa in dem olika reglerna att påverka olika mycket på boidsen, tex kan boidsen få en starkare vilja att röra sig emot mitten av gruppen eller det motsatta om så önskas. Dessa regler är ganska simpla och därför blir dem så självklara att använda till grupp beteenden inom spel, dock kan man göra dem mer avancerade med ännu fler regler som styr beteendet. Tack vare dessa regler kan man skapa flock beteende men eftersom man i magicka ville bygga ett intelligentare beteende så måste flertal andra regler implementeras. Man implementerade reglerna på det sättet att varje grupp tilldelas en ledare som styrs med en A*pathfinding och sedan så påverkas dem andra agenternas rörelser beroende på ledaragenten, dock så implementerade man även andra styrkrafter än dem 3 grundreglerna till varje agent så att dem kunde röra sig mer fristående dock fortfarande i grupp. Dessa kompletterande styrkrafter kan läggas till i riktning mot ledaragenten och på detta sätt skapas ett mycket mer intelligent rörelsemönster för gruppen. 10

Dessa kompletterande styrkrafter är Wander, LeaderFollow, PositionFollow, Pursuit. 8.5 Wander Wander är en regel som skaparna av Magicka implementerat för att kunna skapa grupper som beteer sig aningen oorganiserade. Som figur 5 visar ovan så handlar wander om att en position väljs ut slumpvis inom ett område som agenten tilldelas en bit framför denna. Detta område läggs in på ett godtyckligt avstånd från agenten. Detta område mäts som sagt ut med ett godtyckligt avstånd ifrån agenten samt en radie, denna varierar beroende på hur stort man vill att område agenten ska vandra omkring på. I detta område kommer agenten att slumpa fram fler positioner den kan gå till och kommer därmed att få ett oordnat intryck, den/de slumpade positionen/positionerna i området tilldelas en styrkraft som påverkar agenten så pass mycket att den rör sig emot punkten. Dock är agenten fortfarande påverkad utav styrkrafterna från dem andra reglerna dock är dessa lite svagare än Wander styrkraften. 8.6 LeaderFollow LeaderFollow är precis vad det låter som, agenter i en grupp med leaderfollow väljer ut positioner bakom ledaren hela tiden och därmed följer efter denna(se figur 6). Alltså kommer 11

det skapas som ett led bakom ledaren. Ledaren styrs som jag nämnt tidigare av A*pathfinding och Finite State Machine medans agenterna som följer efter lyder efter boids regler och de kompletterande reglerna samt Finite State Machine. 8.7 PositionFollow PositionFollow är enligt mig en lite snyggare form utav LeaderFollow då denna går ut på att varje agent slumpvis väljer en position bakom ledaren, det skapas ett område efter ledaren och det är inom detta område som boidsen väljer ut slumpade positioner att röra sig emot samtidigt som dem andra styrkrafterna fortfarande påverkar, vilket ger upphov till dessa formationer som agenterna kan röra sig, antingen rektangulära formationer eller triangulära formationer bakom ledaren(se figur 7). Varför det bara är triangulära eller rektangulära formationer beror på att miljön är uppbyggd av ett rutsystem av noder vilket gör att dem endast kan röra sig i triangulära eller rektangulära formationer då det är endast dessa former man hittar i ett rutsystem. Regeln gör det med andra ord möjligt att skapa grupper med fiender som uppträder betydligt mer organiserade och intelligenta än vad dem grupper som använder Wander gör. 8.8 Pursuit Detta är en regel som gör det möjligt för agenter att genksjuta sitt mål, vilket eliminerar en hel del onödiga avstånd som agenten annars hade gått. Denna regel fungerar på så sätt att en kraft proportionellt jämfört med målets rörelsehastiget samt positionen som målet rör sig emot räknas ut och appliceras på agentens andra styrkrafter och då får man denna genskjutning som man kan se i figur 8 ovan. 9.1 Message system I Magicka är även ett så kallat message system implementerat. Detta är ett system som gör det möjligt för agenter att kommunicera med varandra samt veta när en spelare trycker på tangetbordet och gör en attack. Message system fungerar på så vis att ett objekt hanterar meddelanden, där meddelanden representeras utav en klass som visar vad det är för meddelande, vilken agent som ska få meddelandet samt vad meddelandet innehåller och vart det kommer ifrån. För att kunna skicka och hantera meddelande också så har skaparna av Magicka implementerat en så kallad MessageDispatcher som har hand om skapandet för 12

meddelande och den har även hand om adresserna som meddelandena skickas till samt så ansvarar denna klassen för att meddelandena skickas och skickas till rätt agent eller adress. Tack vare message systemet kan agenter kommunicera med varandra och i princip berätta för varandra var målet är samt vilket läge agentern är i. 10.1 Optimering För att spelet ska kunna köras så smidigt som möjligt samt inte använda onödigt mycket datorkraft så måste programmet optimeras. I delen grupprörelser så har man gjort precis detta. Istället för att låta alla agenter styras utav A*pathfinding så använder man de som jag nämt ovan, nämligen boids regler samt kompletterande regler för att skapa olika sorts gruppbeteenden. Detta gör att man slipper använda A*pathfinding konstant förutom på ledarna och stundtals när agenter stöter på hinder. Varför vill man inte att alla ska köras med A* pathfinding? När man kör denna metod så skapas det vektorer(i form utav positioner) samt vektoroperationer(röra sig mot position), och det är inte bara en ensam position som ska undersökas utan alla i agentens direkta närhet för att kunna veta vart den ska ta vägen härnäst. Detta skapar ganska många vektorer och om alla agenter skulle köra A*pathfinding konstant så skulle det kopieras enormt mycket vektorer till stacken(ställe som metoderna hämtar positioner ifrån) som måste hållas reda på och detta hade påverkat prestandan. Vektorer kopieras varje gång dem används. Metoder är vad agenten använder sig av för att kunna använda handlingar. Lösningen är som sagt att låta många agenter ledas av en ledare och istället guideas av boids reglerna. Trots detta är det dock fortfarande många vektorer som kopieras till stacken. En annan optimering som gjorts för att motverka detta är att använda sig av referenser, detta betyder att vektorer inte behöver kopieras till stacken och sedan hämtade utav metoderna utan metoderna använder sig utav datan direkt alltså behöver inte datan sparas i vektorer. 11.1 Diskussion Tillsammans kan Finite State Machine, Fysik-checkar, A*pathfinding, Boids och messagesystem skapa ett grupp beteende som är väldigt snyggt och välfungerande dock för att skapa 13

en helt integrerad taktisk AI i ett spel så krävs det också att man använder sig av logik och i magicka har dem använt sig av Fuzzy Logic som är en hel vetenskap i sig så jag valde att inte skriva om detta utan fokusera på gruppbeteendet och grupprörelserna och hur dessa är uppbyggda. Jag som spelat magicka en hel del kan själv säga att fienderna rör sig ganska målmedvetet och i snygga formationer som ger ett bra intryck. Detta utan att agenter fastnar och krockar med varandra. Jag själv har varit med om att agenter fastnar i hinder och det 3 gånger när jag spelat magicka, vilket inte alls är mycket jämfört med andra spelupplevelser jag haft där detta kan hända upp till 20 gånger. Detta kanske inte ens berodde på grupprörelsernas uppbyggnad utan kunde lika väl ha varit en bugg i miljö uppbygnaden. Jag tycker även att själva ideén med att använda sig av ett 30 år gammalt regelsystem för att simulera djurs flockrörelser/beteenden och sedan implementera det på fantasy varleser i ett spel är väldigt intressant. Framför allt också en bra och hyfsat simpel lösning på ett komplext problem. Det finns säkert bättre och mer avancerade lösningar på detta problem men med tanke på spelets natur,vilket är ett mindre spel som kräver ganska lite prestanda för att kunna köras, så är detta nog den bästa lösningen. Dessutom så konstruerades spelet av studion Arrowhead studios som bestod av 5 studenter från Lulå tekniska högskola och därmed har deras budget varit väldigt begränsad vilket gör lösningen än mer imponerande för det problemet med tanke på vad dem hade att tillgå. 14

Artiklar och Böcker 1. Stuart Russell Peter Norvig Artificial Intelligence: A modern approach Third Edition 2. Robert C. Martin UML Tutorial: Finite State Machines Engineering Notebook Column C++ Report, June 98 3. Craig Reynolds Boids Background and Update 6 September 2001 4. Bo Isaksson Developing tactical group-based game-ai LTU Skellefteå 2010 5. Patrick Lester A* Pathfinding for Beginners July 18, 2005 6. http://en.wikipedia.org/wiki/artificial_intelligence_(video_games) Bilder 1. http://www.girlgamersuk.com/wp-content/uploads/2011/01/magicka-2010-08-13-18-02-41-64_600x375.jpg 2. Figur 1-4 tagna från Boids: Background and Update by Craig Reynolds 3. Figur 5-8 tagna från Developing tactical group-based game-ai 15