Självständigt arbete på grundnivå
|
|
- Lucas Ström
- för 7 år sedan
- Visningar:
Transkript
1 Självständigt arbete på grundnivå Independent degree project - first cycle Datateknik Computer engineering AI-motor Artificiell intelligens för spel Emil Åström
2 MITTUNIVERSITETET Informations- och kommunikationssystem (IKS) Examinator: Ulf Jennehag, Handledare: Martin Kjellqvist, Författare: Emil Åström, Utbildningsprogram: Civilingenjör Datateknik, 300 hp Huvudområde: Datateknik C, 15 hp Termin, år: VT, 2014 ii
3 Sammanfattning Artificiell intelligens (AI) är en stor del i dagens datorspel. För att få inblick i komplexiteten runt AI i spelutveckling och för att förstå delar som AI består av har detta projekt genomförts. Målet var att skapa en AI-motor från grunden med bra grundplattform som är enkel att bygga vidare på. Innan projektet startade utfördes en förundersökning där olika alternativ för kartrepresentationer och grafsökningsalgoritmer togs fram. Utvecklingen av AI-motorn har haft ett starkt beroende till projektet där en spelmotor utvecklats av Niklas Ekman och Christian Mesch. Detta projekt har utförts enligt den agila systemutvecklingsmetoden Scrum. Ett versionshanteringssystem har använts för att enkelt kunna dela källkod mellan projekten. AI-motorn har utvecklats i C++ och för operativsystemen Ubuntu och OSX. AI-motorn består av fyra huvuddelar; logik, navigering, kommunikation och AI-objekt. Logiken är hjärnan i AI-motorn, navigeringen använder sig av navmesh som kartrepresentation och A*-algoritmen är den grafsökningsalgoritm som har valts. Kommunikation sker mellan AI-motorn och spelmotorn för att kunna dela på funktionalitet. AI-objekten är främst informationsklasser som t.ex. håller reda på antalet registrerade datorstyrda spelare. Valet av metod för kartrepresentation avgjordes av att navmesh enkelt kunde genereras automatiskt med hjälp av verktyg vilket var svårare för de andra alternativen. A* valdes som grafsökningsalgoritm eftersom den gav en korrekt väg med minst antal beräkningar. AI-motorn uppfyller de krav som ställdes innan utvecklingen påbörjades och är en bra grund för att lätt kunna utöka motorn med mer avancerad funktionalitet, men det finns så klart förbättringar som kan göras. Nyckelord: AI, Artificiell intelligens, Navigering, Logik, AI-motor, A*, Navmesh iii
4 Abstract Nowadays artificial intelligence (AI) play a big role in the computer games. This project has been made to understand the complexity about AI in game development and get a greater understanding about the parts included in AI. The goal of this project has been to create a AI engine that have good foundation to build upon. Before the project started a preliminary investigation was used to find different alternatives of map representation and graph search algorithms. This project had a strong dependency with the development of a game engine that was created by Niklas Ekman and Christian Mesch. This project has used the agile method Scrum as its software development method. A revision control system have been used to be able to share source code between the groups. The AI engine have been developed in C++ for the operating systems Ubuntu and OSX. The AI engine consists of four parts; logic, navigation, communication and AI objects. The logic is the brain in the AI engine, the navigation uses navmesh as its map representation and A* is the graph search algorithm. The communication takes part between the AI engine and the game engine to be able to share functionality. AI objects are just information classes that for instance keep track of the number of active actors that the AI engine operates. Navmesh was chosen as map representation because it could be automatically generated. A* was chosen as the graph search algorithm because it could find a correct path fast. The AI engine complies the requirements that were stated before the implementation of the AI engine started and it is a good foundation to build better functionality on. Keywords: AI, Artificial Intelligence, Navigation, Logic, AI engine, A*, Navmesh iv
5 Innehållsförteckning Sammanfattning...iii Abstract...iv Terminologi...vii 1 Inledning Bakgrund och problemmotivering Övergripande syfte Avgränsningar Konkreta och verifierbara mål Översikt Författarens bidrag Teori Artificiell intelligens (AI) Spel-AI Finite-state-machine Navigering Singleton Metod Utförande Förundersökning Samarbete Systemutvecklingsmetod Verktyg Bedömningskriterier Lösningsalternativ Kartrepresentation Rutnätsbaserad kartrepresentation Nodnätverk kartrepresentation Navmesh Grafsökningsalgoritmer Dijkstra's algoritm Best-First-Search A* Theta* Resultat Logik DefaultState AttackState State-machine Navigering...18 v
6 5.2.1 Kartrepresentation Tolk Grafsökningsalgoritm Efterbehandlare Kommunikation AI objekt AI GroundAI AIRoot Slutsatser Metod Kartrepresentation Grafsökningsalgoritm Etiska aspekter Fortsatt utveckling...26 Källförteckning...28 Bilaga A: Klassdiagram av AI-motor...31 Bilaga B: Länk till programkod...32 vi
7 Terminologi Följande förkortningar används i rapporten. Akronymer/Förkortningar AI FSM Artificiell intelligens Finite-State-Machine vii
8 1 Inledning 1.1 Bakgrund och problemmotivering Artificiell intelligens (AI) i spel är ett område där mycket utveckling skett sedan de första spelen börjande komma. De allra första spelen kom redan på 50-talet och hade ett mycket enkelt grafiskt utseende jämfört med dagens spel. I och med att persondatorer började bli var mans egendom och att den tekniska utvecklingen av bildskärmar och datorkomponenter så som grafikkort, processorer, RAM minnen, m.m. förbättrades avsevärt så kunde spelen också utvecklas. Denna tekniska revolution har bidragit till utveckling av realistiska och grafiskt korrekta spel där AI spelar en mycket stor roll. I dag har datorspel fått en stor roll i många människors vardag, det spelas allt från enkla mobilspel till avancerade spel på datorn. Många av dessa spel har enbart enspelarläge och behöver AI för att skapa en levande och verklig värld som är befolkad av datorstyrda spelare. Utan dessa datorstyrda spelare skulle spel med enspelarläge inte kunna ge spelarna den upplevelse de önskar sig. Då ingenting idag tyder på att den tekniska utvecklingen av datorkomponenter är på väg att stanna upp eller att datorspelandet skulle minska så kommer efterfrågan på bättre och bättre AI i spel att öka. Det innebär antagligen att AI i framtidens spel kommer att kunna nå en nivå där det är svårt att särskilja de datorstyrda spelarna från spelarna styrda av människor. För att få en bättre inblick i problematiken om hur det är att utveckla spel med AI samt få insikt och kunskap om de olika delar som ingår kommer detta projekt att utföras. 1.2 Övergripande syfte Det övergripande syftet med detta projekt är att skapa en AI-motor från grunden där fokus kommer att ligga på att skapa en god grundplattform som är lätt att bygga vidare på. AI-motorn kommer att utvecklas för att användas i ett spel där den mänskliga spelaren ska försvara en punkt mot inkommande anfallsvågor av fiender, dvs. de datorstyrda spelarna. AI-motorn kommer att styra de datorstyrda spelarna som finns i spelet. 1.3 Avgränsningar Beskrivning av vad Artificiell intelligens är kommer endast att göras ytligt i syfte att förstå vad skillnaderna mellan AI och den AI som finns i spel. Optimering av programkod kommer inte att prioriteras. Utvecklingen kommer att ske på operativsystemen Ubuntu och OSX därför har en avgränsning gjorts mot övriga operativsystem. 1
9 1.4 Konkreta och verifierbara mål Huvudmålet är att skapa en AI-motor från grunden som har en bra grundplattform som är lätt att bygga vidare på. Huvudmålet kan delas upp i följande delmål. AI-motorn ska innehålla funktionalitet för att kunna: navigera på kartan kommunicera med spelmotorn avgöra vilket tillstånd som ska användas hålla reda på alla aktiva datorstyrda spelare Kraven som ställs på kartrepresentationen är att det: finns möjlighet att skapa mjuka vägar inte är för tidskrävande att implementera eller att det krävs manuellt arbete för att skapa kartrepresentationen. Kravet som ställs på grafsökningsalgoritmer är att en korrekt väg på kartan hittas snabbt. 1.5 Översikt Kapitel 2 innehåller grundläggande teorier som behövs för att förstå resultat och slutsatser i rapporten. Kapitel 3 innehåller metoder och verktyg som använts under projektets gång. Kapitel 4 innehåller de alternativ för kartrepresentationer och grafsökningsalgoritmer som använts i rapporten. Kapitel 5 innehåller arbetets resultat. Kapitel 6 innehåller slutsatser och analys av resultatet. 2
10 1.6 Författarens bidrag AI-motorn och spelmotorn är starkt förknippade med varandra. Arbetet har delats upp i två projekt där det ena projektet hanterade AI-motorn och det andra projektet hanterade spelmotorn. Författarens bidrag har varit utvecklingen av AI-motorn. För att förstå helheten och för att kunna återskapa detta projekt bör rapporterna som förklarar spelmotorn och demonstrationsapplikationen skrivna av Christian Mesch och Niklas Ekman också läsas. Båda rapporterna om spelmotorn har titeln Hur gör man egentligen? med undertiteln Konstruktion av en spelmotor. 3
11 2 Teori I detta kapitel presenteras de bakomliggande teorierna för rapporten. 2.1 Artificiell intelligens (AI) Artificiell intelligens är ett brett område där forskare försöker bygga maskiner eller program som kan tänka av sig själv [1]. En maskin eller ett program som kan uppfatta stimulans från omvärlden kallas för en agent [1]. Agenter används i allt från robotar till karaktärer i spel [1]. Agenternas sätt att reagera på stimulans från omvärlden kan vara allt från enkla reflexer till att bearbeta information och göra beslut, kanske till och med lära sig av den information agenten fått [1]. Det finns många olika handlingar som en agent kan göra som kan uppfattas som intelligent, t.ex. reflexer, handlingar som baseras på omgivningen, lärande och uppfattningsförmåga [1]. Vissa av dessa förmågor är relativt enkla att skapa, men att bygga något som lär sig och kan uppfatta språk kan vara otroligt svårt [1]. Agenter som kan uppvisa någon form av intelligent beteende kallas för vek AI [1]. Agenter som kan lära av den information som den får kallas för stark AI [1]. Agent kan även kallas för datorstyrd spelar, i denna rapport kommer främst begreppet datorstyrd spelare att användas. 2.2 Spel-AI Spel-AI är ett område där utvecklare med hjälp av begränsade resurser försöker skapa en illusion av AI genom att lura de som spelar spelet att tro att en datorstyrd spelare i spelet är intelligent [2]. AI:n i spelet måste utformas så att en datorstyrd spelare inte får vara för bra, men inte heller verka för ointelligent. Är de för bra på det de gör kan en datorstyrd spelare uppfattas som fuskande, om den är för dum upplevs spelet inte seriöst [2]. 2.3 Finite-state-machine Finite-state-machine (FSM) är den vanligaste metoden att implementera AI i spel och brukar vanligtvis kallas för FSM [3]. En FSM består av många olika tillstånd och skapar en illusion av intelligens på de datorstyrda spelarna i spelen [3]. Fördelarna med att använda FSM är att: det är enkelt att implementera [3] det är enkelt att felsöka [3] det använder lite av datorns totala kapacitet [3] 4
12 det är flexibelt [3] 2.4 Navigering Navigering måste kunna utföras på en kartan och navigeringen består av två delar; Pathfinding och att undvika rörliga hinder [4]. Pathfinding används för att hitta från en punkt på banan till en annan punkt. För att en datorstyrd spelare ska kunna navigera krävs en kartrepresentation, som är en digital representation av kartan som en dator kan tolka, samt en grafsökningssökalgoritm som går igenom den digitala representationen av kartan och kan beräkna en väg [4]. Att undvika rörliga hinder betyder att en datorstyrd spelare ska kunna navigera runt dynamiska objekt på banan så som andra datorstyrda spelare eller mänskliga spelare [4]. Detta görs genom att en datorstyrd spelare temporärt ändrar sin väg och därefter återgår till den ursprungliga vägen [4]. 2.5 Singleton Singleton är ett designmönster som försäkrar att det bara finns en instans av en klass. Om en klass är singleton finns det en global åtkomstpunkt till klassen [5]. En klass som är gjord i designmönstret singleton har full kontroll över hur och när andra objekt använder singletonklassen [6]. Detta beror på att singletonklassen har kapslat in sin egen instans [6]. Implementationen inkluderar en statisk medlem, en privat konstruktur och en statisk publik funktion som returnerar referensen till den statiska medlemmen [7]. Se exempel på en singletonimplementation i figur 1. Figur 1: Singleton implementation UML Klassdiagram [7] 5
13 3 Metod I detta kapitel tas de metoder som kommer att användas i projektet upp. 3.1 Utförande Förundersökning Innan arbetet påbörjades utfördes en förundersökning där olika alternativ för kartrepresentationer och grafsökningsalgoritmer togs fram. Genom litteraturstudier hämtades information från böcker och webbkällor för att få en bra grund att bygga projektet på Samarbete Detta projekt kommer att ha ett starkt beroende till projektet för utvecklingen av en spelmotor eftersom AI-motorn använder sig av funktioner som finns inbyggda i spelmotorn. Detta innebär att ett samarbete med Niklas Ekmans och Christian Meschs utveckling av en spelmotor krävs Systemutvecklingsmetod Konstruktionsarbetet kommer till viss del att utföras enligt en agil systemutvecklingsmetod för att: få kunskap och insikt om hur det är att arbeta med en agil systemutvecklingsmetod kunna hantera problem och förändringar som uppkommer under projektet p.g.a. de beroenden som finns mellan detta projekt och projektet som utvecklar spelmotorn se resultat och framgångar ofta, dvs. efter varje sprint få snabb återkoppling om valda funktioner var användbara eller om nya val måste göras. Scrum har valts som metod och vissa delar så som sprintar, backlogg, sprintlog, möten mm kommer att användas. En sprint kommer att motsvara 2 arbetsveckor och kommer att startas med ett möte där alla detaljer för sprinten tas upp och planeras. Varje sprint avslutas med avslutningsmöte där alla problem och framgångar tas upp för att dra lärdom till nästkommande sprint. Varje dag under en sprint hålls små möten där gruppen uppdaterar varandra på vad som gjorts och vad som ska göras. Innan projektet startas kommer en backlogg att etableras, den kommer att användas för att hela tiden hålla sprintloggen uppdaterad inför varje sprint. Backloggen kommer konstant att ändras när nya funktioner och fel uppkommer. Sprintloggen kommer att innehålla information om vad som ska genomföras under den pågående sprinten, arbetet som finns i sprintloggen är 6
14 uppskattat att ta hela sprinten att utföra. Sprintloggen och backloggen kommer att finnas på en hemsida så att informationen är lättåtkomlig under hela projektet. För att få samarbetet med Niklas Ekman och Christian Mesch att fungera kommer möten att hållas där vi berättar hur våra arbeten går, vad som kommer att hända under sprintarna, hur arbetet ska läggas upp för de delar som krävs för att integrera AI-motorn i spelmotorn. Mötena kommer att ske dagligen för att få en så bra koll på varandras arbeten som möjligt. 3.2 Verktyg En dagbok kommer att skrivas för att kunna hålla reda på framsteg och problem som uppstått under projektets gång. Dagboken kommer att finnas på en hemsida där varje post är associerad med en kategori, datum samt text. Utvecklingen kommer att ske på operativsystemen Ubuntu och OSX på grund av att det är dessa operativsystem som vi har installerade på våra arbetsdatorer. Programmeringsspråket kommer att vara C++ för att vi har goda förkunskaper och inte behöver en extra utmaning i att lära oss ett nytt språk. Qt Creator kommer att användas som utvecklingsmiljö eftersom den är korskompatibel mellan de operativsystem som kommer att användas. Projektet kommer att använda sig av ett versionshanteringssystem för att ha kontroll på förändringar och ha möjlighet att gå tillbaka till tidigare versioner vid behov. Det verktyg som kommer att användas heter Git. Som gitförråd kommer webbtjänsten Bitbucket att användas. Detta projekt kommer att dela gitförråd med Niklas Ekman och Christian Mesch för att det ska vara möjligt att använda sig av varandras kod. 3.3 Bedömningskriterier Eftersom det matematiskt är svårt att bedöma ett beteende AI-motorn kommer att ge en datorstyrd spelare kommer koden verifieras genom manuell testning, dvs. all data från funktioner kommer genom debug, utskrifter mm att visuellt kontrolleras mot förväntad data. Viss kod kommer enbart kunna kontrolleras genom att köra programmet och visuellt kontrollera hur en datorstyrd spelare uppför sig i demospelet, som utvecklas i projektet för spelmotorn av Niklas Ekman och Christian Mesch. Om den datorstyrda spelaren uppfyller nedanstående punkter anses målen för AI-motorn vara uppfyllda: ta sig till den bas, dvs. den punkt, som den mänskliga spelaren i spelet ska försvara bestämma vilket mål som ska attackeras, bas eller den mänskliga spelaren skjuta eller slå på det mål som ska attackeras 7
15 följa efter den mänskliga spelaren retirera från den mänskliga spelaren. Delmålen kommer att bedömas genom att jämföra resultatet med förväntat beteende eller data. När alla delmål är uppfyllda anses huvudmålet vara uppfyllt. 8
16 4 Lösningsalternativ De olika metoder för kartrepresentationer och grafsökningsalgoritmer som har beaktats i rapporten presenteras nedan. 4.1 Kartrepresentation Kartrepresentation är ett sätt att representera kartan så att en grafsökning kan genomföras på kartan. Det finns en mängd olika sätt att skapa en kartrepresentation på. Nedan följer några olika metoder för kartrepresentation som kommer att analyseras Rutnätsbaserad kartrepresentation När spel använder sig av en rutnätsbaserad kartrepresentation är hela kartan uppdelad i lika stor rutor som antingen är kvadratiskt eller hexagonalt formade [8]. Detta sätt att representera banan kan vara både bra och dåligt, det beror helt på hur stor banan är och vilken upplösning rutnätet har [8]. Om rutnätet är högupplöst och banan är stor kan sökningen ta lång tid och kan kräva mycket minne [8]. Varje ruta i rutnätet symboliserar olika typer av terräng så som gräs och vägar [9]. Se exempel på rutnätsbaserad kartrepresentation i figur 2. Figur 2: Rutnätsbaserad kartrepresentation från Civilisation V [10] Nodnätverk kartrepresentation Ett nodnätverk byggs av den person som konstruerar kartan till spelet och används för att kunna navigera på kartan [11]. I ett nodnätverk symboliserar varje nod en nyckelpunkt i ett rum/område som en datorstyrd spelare kan ta sig till [12][13] [11]. Noderna kan också innehålla information om att det t.ex. finns skydd som 9
17 det går att gömma sig bakom [11]. Kanterna mellan noderna kan ha vikter/längder som kan bero på underlag, lutning osv. [13]. En datorstyrd spelare är inte bunden till att gå i grafen utan använder sig av den för att ta sig mellan olika nyckelpunkter på kartan [13]. Se exempel på ett nodnätverk i figur 3. Figur 3: Nodnätverk exempel [13] Navmesh Navmesh kan illustreras med ett stort nät som skapar en representation av kartan som en dator kan läsa av och består av många trianglar eller polygoner som symboliserar mark som de datorstyrda spelarna i spelet får gå på [12][14][15]. Det går inte att navigera utanför dessa polygoner [15]. I polygonerna kan mitten och hörn eller en kombination av dessa alternativ användas som navigeringspunkter [15]. Om genereringen av navmesh utförs på ett effektivt sätt kommer varje polygon kunna beskriva stora ytor [14]. Mindre minne används och det går snabbare att utföra grafsökningar [16]. En fördel med att använda navmesh är att den kan skapas automatiskt genom att antingen skriva en egen algoritm eller använda färdiga bibliotek [14]. Ingen banredigerare behövs för att sätta ut dessa polygoner [14]. Dock kan det vara komplicerat att skriva ett program som genererar denna metod automatiskt på ett bra och effektivt sätt [14]. Om inte genereringen av navmesh görs på ett bra sätt kan det leda till att datorstyrd spelare i spelet rör sig på ett konstigt sätt [14]. Se exempel på en navmesh i figur 4. 10
18 Figur 4: Navmesh exempel, röda fält är det tillåtet att gå på och vita fält är ej tillåtet att gå på 4.2 Grafsökningsalgoritmer Det finns många olika typer av grafsökningsalgoritmer och de används för att söka igenom grafer efter den kortaste vägen. Några av de mest kända algoritmerna är Dijkstra's, Best-First-Search, A* och Theta* Dijkstra's algoritm Dijkstra's algoritm som skapades av Edsger W. Dijkstra. Algoritmen garanterar att hitta den kortaste vägen mellan två noder i en graf [17]. Metoden för att hitta den kortaste vägen i grafen [17][18] är att Dijkstra's algoritm börjar med att beräkna avstånd från startnoden till sina grannar. Startnoden är nu besökt och den nod i grafen som har kortast beräknat avstånd väljs som ny aktiv nod. Avståndet till den nya nodens grannar beräknas genom att summera aktuell nods avstånd från start med avståndet till grannen. Om en granne till den nuvarande noden redan har ett beräknat avstånd och om det är större än det nya beräknade avståndet väljs det kortaste värdet. Detta fortsätter tills alla noder i grafen är besökta och alla noder i grafen har då ett avstånd till startnoden. Dijkstra's algoritm har tidskomplexiteten O(n 2 ) [19] vilket betyder att sökningen kommer att ha en körtid som är kvadratisk mot antalet element som finns i grafen. 11
19 4.2.2 Best-First-Search Best-First-Search är en metod som alltid hittar en väg, men vägen är inte garanterad att vara den kortaste [18]. Algoritmen börjar med att välja startnoden som nuvarande nod. Avståndet till målet för grannarna till den nuvarande noden beräknas. Den granne som har kortast avstånd till målet väljs. Detta fortsätter tills att målet är hittat. Figur 5 visar ett exempel på Best-First-Search. Figur 5: Best-First-Search [18] 12
20 4.2.3 A* Grafsökningsalgoritmen A* är en kombination av Dijkstra's och Best-First-Search [18]. Den använder sig av Dijkstras metod att hålla reda på avståndet från startnod till aktuell nod [18][20]. Den använder sig också Best-First-Search metod att hålla reda på avstånd från aktuell nod till målnod [18] [20]. Detta leder till att A* algoritmen söker sig mot målet som Best-First-Search gör och hittar den kortaste vägen till målet som Dijkstra's gör [18]. A*-algoritmen använder Dijkstra s algoritm som grund för att beräkna kortaste vägen genom grafen från start till mål [18]. Utöver detta så används avståndet för den rakaste vägen till målnod från aktuell nod på ett liknande sätt som görs i Best-First-Search algoritmen [18]. Denna funktion beskrivs enligt följande f(n) = h(n) + g(n) [18][20]. A*-algoritmen behöver hålla reda på följande för varje nod n. h(n) är en estimerad längd på vägen mellan noden n till målnoden [18] [20][21]. g(n) är en estimerad längd på den kortaste vägen från startnoden till noden n [18][20][21]. f(n) är den totala summan av h(n) och g(n) [18][20]. Föräldern till en nod behövs för att kunna hitta vägen från start till mål efter att algoritmen är klar [18][20][21]. Algoritmen måste hålla reda på vilka noder som är behandlade respektive är öppen för behandling [18][20][21]. Den nod med lägst värde på f(n) är den nod som väljs när algoritmen går vidare till nästa nod [18]. Figur 6 illustrerar ett exempel på en körning av en A*-algoritmen. De vita noderna är obehandlade och de rosa är behandlade. S är start nod, M är målnod, h = h(n), f = f(n) och g = g(n). 13
21 Figur 6: A*-algoritm exempel Theta* Theta*-algoritmen försöker hitta den kortaste vägen i den verkliga världen och inte i grafen [22]. Det innebär att den kontrollerar om det är fri sikt, line-of-sight, mellan två punkter [22][23]. Theta* fungerar på ungefär samma sätt som A*-algoritmen förutom att föräldern och en nod inte behöver vara grannar [22] [23]. Föräldern kan vara en godtycklig nod i grafen som har fri sikt till den nod som beräknas [22][23]. Vägen som beräknas är inte bundet till rutnätet [23]. Theta*-algoritmen använder sig av två olika metoder för att bestämma hur en förälder till en nod ska sättas [22][23]. Det första alternativet är att kontrollera vilken nod, från startnod till förälder av aktiv nod, som har fri sikt till den nod som beräknas [22][23]. Den nod som är närmast startnoden och har fri sikt till noden som beräknas sätts som förälder till denna nod [22][23]. Detta illustreras som Path 2 i figur 7. Det andra alternativet är att göra på samma sätt som A*-algoritmen hade gjort [22][23], dvs. den granne som beräknas får den aktiva noden som förälder. Detta alternativ illustreras som Path 1 i figur 7. 14
22 Figur 7: Theta*-algoritmens olika alternativ för bestämmande av förälder [22] 15
23 5 Resultat 5.1 Logik AI-motorns beroende till spelmotorn gör att det även är viktigt att förstå vad som händer i spelet för att förstå AI-motorns roll i sammanhanget. Demonstrationsapplikationen, som kommer från gruppen som gör spelmotorn, har satt upp ett villkor för när spelet tar slut. Det villkoret säger att spelet ska avslutas när en datorstyrd spelare når en viss punkt på kartan, som är den mänskliga spelarens bas. AI-motorn styr de datorstyrda spelarna och ser till att de kan navigera på kartan och utföra olika handlingar utifrån de situationer som kan uppstå. AI-motorn är uppbyggd som ett bibliotek och består av fyra huvuddelar: logik navigering kommunikation AI-objekt. För att se ett klassdiagram över AI-motorn se Bilaga A, för att se programkod se Bilaga B. Logiken i AI-motorn har byggts enligt teorin om Finite-State-Machine. Logiken i AI-motorn är i nuläget uppdelat i två olika tillstånd: DefaultState som är det tillstånd som tar en datorstyrd spelare till målet. AttackState är det tillstånd som sätter en datorstyrd spelare i attackläge. För att kunna hantera dessa tillstånd så att den datorstyrda spelaren vet vilket tillstånd som är aktivt håller klassen State-machine koll på nuvarande tillståndet och kan byta till ett nytt tillstånd vid behov. De tillstånden som finns byggda i spelet är överlagringar av en huvudklass som heter State och är gjorda som singleton objekt. Det är dessa tillstånd som gör att de datorstyrda spelarna kan uppfattas som intelligenta och kan utföra sina mål DefaultState DefaultState är ett navigeringstillstånd som en datorstyrd spelare startar i när spelet startar. Detta tillstånd har som mål att ta en datorstyrd spelare från en godtycklig position på kartan till den mänskliga spelarens bas genom att kontrollera om en datorstyrd spelare kan se målet. Om den datorstyrda spelaren 16
24 ser målet går den raka vägen dit, annars anropas navigeringen som tar fram en lista med navigeringspunkter som en datorstyrd spelare kan navigera efter för att nå sitt slutgiltiga mål. Om den mänskliga spelaren, med andra ord fienden för den datorstyrda spelaren, finns inom en viss distans från den datorstyrda spelarens nuvarande position och om den datorstyrda spelaren har fri sikt (line-of-sight) till spelaren så avbryts all navigering och tillståndet ändras till AttackState. Se aktivitetsdiagram i figur 8. Figur 8: DefaultState AttackState AttackState är det tillstånd som sätter en datorstyrd spelare i ett attacktillstånd. Detta tillstånd beräknar om det går att skjuta spelaren genom att kontrollera om spelaren inte är för nära eller för långt ifrån. Om detta stämmer beräknas en skjutparabel och en förfrågan om att skjuta skickas till spelmotorn. Om den mänskliga spelaren är för nära den aktuella datorstyrda spelaren så börjar den datorstyrda spelaren att backa. Om spelaren är utanför ett visst område ändras tillståndet tillbaka till DefaultState. Se aktivitetsdiagram i figur 9. 17
25 Figur 9: AttackState State-machine State-machine är den klass som håller reda på vilket tillstånd; attacktillstånd (AttackState) eller navigeringstillstånd (DefaultState), som är aktivt i nuläget, den har funktionalitet för att byta tillstånd och är bunden till en specifik datorstyrd spelare i spelet. Utan denna klass skulle de datorstyrda spelarna vara bundna till ett specifikt tillstånd. När spelet uppdateras anropas State-machine klassens uppdateringsfunktion som kör koden för det aktiva tillståndet. 5.2 Navigering Navigeringen består av en kartrepresentation, en tolk, en grafsökningsalgoritm och en efterbehandlare Kartrepresentation Alla de i förundersökningen jämförda metoderna för kartrepresentation har möjlighet att skapa mjuka vägar beroende på hur väl genomtänkt utformningen av kartrepresentationen är när den skapas. Utifrån förundersökningen gick det att konstaterat att Navmesh var den metod som enklast gick att genereras automatiskt med hjälp av färdigbyggda bibliotek eller program jämfört med de andra alternativen. Den kartrepresentation som valts att implementeras i projektet är navmesh. Den är implementerad så att den består av många små trianglar som markerar det område som en datorstyrd spelare kan gå på. Varje triangel som navmeshen består av innehåller information om sin position, grannar dvs. de trianglar som ligger bredvid den aktuella triangeln, distans till mål samt förälder. En förälder till en triangel sätts under grafsökningen för att kunna hålla reda på vägen genom grafen. I nuläget används mittpunkten i varje triangel som navigeringspunkt. I detta projekt har Blender använts för att generera den kartrepresentation som har använts. 18
26 5.2.2 Tolk Tolken läser av en fil som innehåller information om hur navmeshen är uppbyggd. Informationen har exporterats från programmet Blender där den ursprungliga kartrepresentationen skapades. Tolken söker genom filen efter nyckelord så som element vertex och end_header för att kunna lista ut hur navmeshen är uppbyggd och sitter ihop. Tolken körs en gång när AI-motorn startas Grafsökningsalgoritm För att kunna avgöra vilken algoritm som var mest lämpad för AI-motorn gjordes jämförelser mellan grafsökningsalgoritmerna. Utifrån jämförelser av figurerna 10, 11, 12 går det att se med hjälp av de färgade rutorna i figurerna att Dijkstra's algorim måste beräkna avsevärt fler noder för att hitta en väg till målet än vad Best-First-Search och A* måste göra. Best-First-Search ger inte alltid den optimala vägen om det finns hinder i kartan som måste passeras, se figur 11. A* är den algoritm som beräknar minst antal noder och hittar den optimala vägen oavsett hinder, se figur 12. Figur 10: Dijkstra's beräkning av noder. De färgade rutorna illustrerar de beräknade noderna [18] 19
27 Figur 11: Best-First-Search beräkning av noder. De färgade rutorna illustrerar de beräknade noderna [18] Figur 12: A* beräkning av noder. De färgade rutorna illustrerar de beräknade noderna [18] 20
28 Figur 13 visar att Theta*-algoritmen, som kallas Basic Theta* i bilden, är något långsammare än vad A*-algoritmen är. Figur 13 visar också att Theta* ger en väg som är något kortare än vad A*-algoritmen beräknar. Figur 13: Körtid [24] Grafsökningsalgoritmen som valdes och implementerades var A*. När grafsökningen ska köras skickas start- och mål koordinater in och de trianglar som hör ihop med de inskickade koordinaterna hittas. Alla avstånd från trianglarna till måltriangeln beräknas. Målkoordinaten kan antingen vara basen som en datorstyrd spelare ska ta sig till eller en spelare på kartan. Därefter skickas start och mål trianglarna in i A*-algoritmen och sökningen startar. När måltriangeln har hittats återuppbyggs vägen som sedan skickas till en efterbehandlare som gör att vägen blir mer naturlig och mjuk Efterbehandlare Efterbehandlaren förkortar vägen genom att ta bort navigeringspunkter från vägen som kommer från grafsökningsalgoritmen. Efterbehandlaren bygger på att kontrollera om det är fri sikt mellan navigationspunkter. Alla navigationspunkter mellan den aktuella navigeringspunkt och den sista navigeringspunkt som syns förkortas bort. Se figur 14 där den röda linjen illustrerar förkortningen av vägen som sker i efterbehandlaren. Figur 14: Efterbehandlare, förkortning av noder 21
29 Den nya väg som skapats returneras till den datorstyrda spelaren som anropat navigeringen. Se figur 15 för exempel på en väg som navigeringen tar fram, den röda vägen är direkt efter grafsökningen och den gröna är efter efterbehandling. Figur 15: Navigering på testkarta 5.3 Kommunikation Kommunikationsklasserna används för att kunna integrera AI-motorn med spelmotorn och på så sätt skapa en brygga mellan de olika motorerna. Utan dessa klasser kan inte AI-motorn använda funktioner från spelmotorn. Vilket innebär att de datorstyrda spelarna inte skulle fungera. Kommunikationen består av två delar; en som kommunicerar från AI-motorn till spelmotorn och en som tar emot kommunikation från spelmotorn. Kommunikationen från AI-motorn till spelmotorn sker i form av förfrågningar så som att flytta en datorstyrd spelare och hämta positioner. Kommunikationen som kommer från spelmotorn till AI-motorn är registrering, avregistrering samt uppdatering av datorstyrda spelare. 5.4 AI objekt Det finns några klasser som innehåller enbart information. De klasserna är AI, GroundAI samt AIRoot. 22
30 5.4.1 AI AI-motor Artificiell intelligens för spel AI-klassen innehåller den information som förknippas med varje datorstyrd spelare så som navmesh, väg att gå, timer osv. Denna klass har även överlagrats för att kunna modifiera vilket beteende varje datorstyrd spelare ska ha GroundAI GroundAI är en överlagring av AI som används för att modifiera en datorstyrd spelares beteende AIRoot AIRoot är den klass som innehåller information om vilka datorstyrda spelare som finns registrerade i spelet och några standardvärden så som den ursprungliga navmeshen som skapas under AI-motorns laddningsfas. 23
31 6 Slutsatser Arbetet har gått ganska bra med tanke på att jag inte har några erfarenheter av att utveckla AI till spel. De krav som ställdes innan projektet startades har uppfyllts; Bedömningskriterierna för AI-motorn är uppfyllda och en bra grund har skapats. AI-motorn är byggd för att vara enkel att utöka. Det finns såklart mycket som kan förbättras och utökas men grundkraven är uppfyllda. AI-motorns funktionalitet är enkel att utöka t.ex. för att klassen StateMachine har lätt att byta mellan olika tillstånd vilket möjliggör att nya tillstånd kan skapas och på så sätt kan ett helt nytt beteende för en datorstyrd spelare tillföras. AI-motorn är byggd som ett bibliotek för att minska kompileringstiderna när tester mot spelmotorn utfördes. Om detta val inte gjorts hade mycket onödig tid gått åt till att vänta på kompilering. Ett av de absolut största problemen som uppstod under projektet var utvecklingen av navmesh, tolken och navigeringen. Fel uppstod när navmeshen exporterades från programmet Blender, där vi skapade vår testkarta. Vi använde oss av en exportör som var gjord för att exportera blenderfiler till ett format som Ogre3D, spelmotorns grafikbibliotek, klarade av att läsa. Exportören klarade dock inte av att exportera navmeshen korrekt och det data som skulle läsas av var felande. Detta löstes genom att ett nytt filformat valdes och en ny tolk skrevs. Då uppstod ett nytt problem; Blender använder sig av ett högerhänt koordinatsystem och vår spelmotor använder sig av vänsterhänt koordinatsystem. Så alla koordinater som lästes in från filen var tvungen att översättas för att koordinaterna som läses från spelmotorn till AI-motorn skulle överensstämma. Ett annat problem var att kontrollen för fri sikt, som kommer från spelmotorn, inte fungerade riktigt perfekt vilket gör att vissa operationer AI-motorn inte fungerar som de ska. Det innebär t.ex. att de datorstyrda spelarna ibland krockar med väggar för att de har sikt på målet men kanske bara med någon pixel. Detta har fortfarande inte fått någon bra lösning. Jag och Christian Mesch har skissat på en funktion men den fungerar inte tillräckligt bra för att kunna användas. Om vi hade lyckats få till detta så hade mer funktionalitet i AI-motorn kunnat byggas. Vi fick helt enkelt lägga denna förbättring till en framtida version. Den tid som lagts ner på detta projekt har varit mycket mer än vad som är beräknat för en C-uppsats, det tog mycket längre tid att skapa en grund i AI-motorn än vad som var beräknat från början. 6.1 Metod Detta projekt har egentligen varit det första riktiga projekt där jag kunnat arbete efter en agil systemutvecklingsmetod. Att arbeta enligt en agil systemutvecklingsmetod har gått ganska bra, det har möjliggjort ett bra samarbete mellan de två 24
32 projektgrupperna och arbetet har gått smidigt. Eftersom arbetet med AI-motorn hade beroenden till funktioner från spelmotorn har jag med hjälp av Scrum kunnat planera sprintarna så att väntan på speciell funktionalitet från spelmotorn har minimerats. 6.2 Kartrepresentation Det som avgjorde valet av kartrepresentation var att navmesh var enklast att automatiskt generera jämfört med de övriga alternativen samt att alla jämförda alternativ var likvärdiga i frågan om att ha möjlighet att skapa mjuka vägar för de datorstyrda spelarna. Utifrån informationen som togs fram under förundersökning så tolkar jag det som att de tre kartrepresentationerna innehåller mer eller mindre samma information om hur kartan är uppbyggd. Navmesh var den kartrepresentation som verkade enklast att bygga vidare på eftersom den förklarar med hjälp av sina polygoner vilka områden som det är tillåtet att gå på i jämförelse med nodnätverk där en nod förklarar ett litet område. I rutnätverket så representerar varje ruta en viss typ av endast en enda typ av mark, t.ex. gräs, grus, sten, vilket antagligen kan begränsa kartans utseende. Detta var några av de funderingar som jag hade över de olika kartrepresentationerna. 6.3 Grafsökningsalgoritm Mycket tid lades ner på att välja rätt grafsökningsalgoritm i början av projektet. Därför utfördes en förundersökning där fyra olika metoder jämfördes. Utifrån figurerna som visas i kapitel går det att se att Dijkstra's algoritm och Best-First-Search är långt ifrån optimala för att användas i AI-motorn. Dijkstra's beräknar avsevärt många fler noder än vad A* och Best-First-Search gör vilket leder till att denna algoritm är mycket långsammare än de båda andra algoritmerna. Best-First-Search beräknar ungefär lika många noder som A*-algoritmen gör men kan hitta en väg som inte alltid var den kortaste vägen till målet. Detta innebär att Best-First-Search kan hitta vägar som är långt ifrån optimala och kan därför inte användas i AI-motorn. Utifrån ovanstående resonemang kan vi se att A* är den algoritm som behöver söka igenom minst antal noder för att hitta den kortaste vägen av dessa tre algoritmer. Utifrån figur 13 i kapitel ser vi att Theta* är något långsammare än vad A*-algoritmen är, men differensen är väldigt liten. Theta*-algoritmen ger något kortare väg genom kartan eftersom den inte är bunden till rutnätet. Både A* och Theta*-algoritmerna var starka kandidater till att användas i AI-motorn och det skapades implementationer av båda algoritmerna för att testas i AI-motorn. För att Theta* ska fungera krävs att funktionaliteten för fri sikt fungerar perfekt, men då spelmotorn har problem att få den att fungerar bra kunde Theta* inte användas i AI-motorn utan A* valdes som den slutgiltiga algoritmen. Det fanns inte tid att vänta på att problemen skulle med fri sikt skulle lösas, utan jag gjorde ett aktivt val att använda A* för att kunna komma framåt i projektet och bygga vidare på AI-motorn. Om funktionen för fri sikt hade fungerat kunde valet av algoritm ha varit annorlunda. 25
33 Fördelarna med A* är att den är lite snabbare än de övriga algoritmerna jag jämförde mellan och det finns möjlighet att anpassa A* genom att använda efterbehandling. Anpassningen är svårare att göra för Theta* då den kan ha färre noder att jobba med. Utifrån figur 15 i resultatkapitlet kan vi se att vägen som A* skapar utan efterbehandling är väldigt onaturlig och en datorstyrd spelare måste sicksacka sig fram mellan alla punkter i navmeshen. Detta är långt ifrån optimalt därför skrevs en efterbehandlare som tar bort onödiga navigationspunkter. Efterbehandlaren bygger på att den kontrollerar om det är fri sikt mellan två punkter vilket är långt ifrån optimalt, detta skulle kunna lösas genom att skapa kurvor som försöker anpassas till de ursprungliga koordinaterna som A* ger eller göra detta på koordinaterna som ges i den nuvarande efterbehandlaren. Detta skulle göra så att de datorstyrda spelarna verkar vara mer naturlig när de tar sig mellan olika punkter, alltså ge en mjuk och fin väg som den datorstyrda spelaren kan navigera efter. 6.4 Etiska aspekter Att hitta etiska aspekter för AI i spel kan vara svårt men om AI:n ses som en del i spelet finns det lite att tänka på. De vanligaste etiska aspekterna som diskuteras när det gäller datorspel är det våld som finns i många spel. Även den sexistiska och könsdiskriminering som finns i spelen har börjat diskuteras på senare tid. En del forskning hävdar att aggression ökar hos personer som spelar våldsamma spel. Spel med våld ger spelaren belöning i dödandet och det kan leda till minskad empati och att man identifierar sig med karaktärerna i spelet. Detta är viktiga etiska aspekter som måste beaktas vid skapade av spel. Ju mer verklighetstrogen den artificiella intelligensen i spel blir, desto viktigare blir det att reflektera över det som utvecklas. Utvecklarna måste fundera över nivån på vad som får utföras i spelen, vissa scener kanske inte ska finnas med. Det är viktigt att fundera över ådergränser för spel, vissa spel lämpar sig helt enkelt inte för barn. Alla spel är ju inte våldsspel, utan det finns spel som är utvecklande och kan användas för olika typer av lärande. Även där måste de etiska aspekterna beaktas och utvecklarna måste fundera på vilka målgrupper som spelen vänder sig till. 6.5 Fortsatt utveckling Det finns mycket som kan förbättras med denna AI-motor som just nu bara är grundläggande. Grafsökningen skulle kunna förbättras genom att först och främst optimera A*-algoritmen med efterbehandlare. En ny efterbehandlare kan byggas så att vägarna verkar mer mjuka. Om funktionen för fri sikt, som kommer från spelmotorn, börjar fungera som den ska så skulle Theta* vara ett intressant val att analysera igen, vilket skulle innebära att efterbehandlaren inte skulle behöva ha en lika stor roll i AI-motorn. En metod som skulle vara intressant att undersöka är 26
34 om det går att kombinera två olika kartrepresentationer. Navmesh och nodnätverk skulle kunna vara två kandidater eftersom nodnätverk kan ge information om speciella punkter i kartan och navmeshen innehåller mer information om kartans uppbyggnad, detta skulle kunna ge ett bättre nätverk på kartan som möjliggör att de datorstyrda spelarna får en bättre uppfattning av kartan. Logiken som finns byggd i spelet skulle kunna utökas genom att fler tillstånd skulle kunna utvecklas och ge de datorstyrda spelarna helt nya egenskaper vilket skulle ge ett mer verkligt beteende. En framtidsvision jag har är att AI-motorn skulle kunna förses med ett grafiskt gränssnitt som då skulle göra det enkelt att välja precis hur en datorstyrd spelare ska uppföra sig i spelet. Då skulle olika tillstånd kunna kopplas ihop visuellt utan att någon programmering behöver göras. 27
35 Källförteckning [1] J.Glenn Brookshear, Computer science an overview. Upplaga 11 av. Kap 11 [2] Mat Buckland, Programing game ai by example. Upplaga 1. Utgivningsår: kap. Introduction. [3] Mat Buckland, Programing game ai by example. Upplaga 1. Utgivningsår: s [4] Brian Schwab, AI Game Engine Programming. Upplaga 2. Utgivningsår: s.48 [5] E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software, Upplaga 1. Utgivningsår: s.127 [6] E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software, Upplaga 1. Utgivningsår: s.131 [7] OODesign, Singleton Pattern. Publicerad: saknas, hämtad: [8] Brian Schwab, AI Game Engine Programming. Upplaga 2. Utgivningsår: s [9] Mat Buckland, Programing game ai by example. Upplaga 1. Utgivningsår: s [10] on_5_gameplay_02_hs.jpg Hämtad: [11] Valve Developer Community, Nodegraph Uppdaterad: , Hämtad: [12] GameDev, Navigation Graph Generation navigation-graph-generation-r2805 Publicerad: Hämtad: [13] Mat Buckland, Programing game ai by example. Upplaga 1. Utgivningsår: s
36 [14] Brian Schwab, AI Game Engine Programming. Upplaga 2. Utgivningsår: s [15] Amit s Game Programming Information, Map representations s.html Publicerad: saknas. Hämtad: [16] Epic Games, Navigation Mesh Reference Publicerad: saknas. Hämtad: [17] R. Johnsonbaugh, Discrete Mathematics. Upplaga 7. Utgivningsår: s [18] Amit s Game Programming Information, Introduction to A* html Publicerad: saknas. Hämtad: [19] R. Johnsonbaugh, Discrete Mathematics. Upplaga 7. Utgivningsår: s [20] P. Hart, N. Nilsson, B. Raphael. A Formal Basis for the Heuristic Determination of Minimum Cost Paths. Utgivningsår: Hämtad från: Hämtad: [21] K. Daniel, A. Nash, S. Koenig. Theta*: Any-Angle Path Planning on Grids, Journal of Artificial Intelligence Research. Vol.39. Utgivningsår: 2010, s Hämtad från: Hämtad: [22] AIGameDev, Theta*: Any-Angle Path Planning for Smoother Trajectories in Continuous Environments Publicerad: Hämtad: [23] K. Daniel, A. Nash, S. Koenig. Theta*: Any-Angle Path Planning on Grids, Journal of Artificial Intelligence Research. Vol.39. Utgivningsår: 2010, s Hämtad från: Hämtad: [24] K. Daniel, A. Nash, S. Koenig. Theta*: Any-Angle Path Planning on Grids, Journal of Artificial Intelligence Research. Vol.39. Utgivningsår: 29
37 2010, s. 538 Hämtad från: Hämtad:
38 Bilaga A: Klassdiagram av AI-motor 31
39 Bilaga B: Länk till programkod 32
Universe Engine Rapport
1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten
Inkapsling (encapsulation)
UML UML är en standard för att dokumentera och visualisera sina tankar och beslut under analys och design. Att lära sig allt om UML får inte plats i den här kursen, men vi kommer lära oss vissa delar.
Datavetenskapligt program, N1COS
Ansökan om fortsatta studier inom program, våren 2015 Datavetenskapligt program, N1COS Inför varje termin måste du söka till de kurser du vill gå. Sista datum för ansökan till höstens kurser är den 15
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
Datavetenskapligt program, N1COS
Ansökan om fortsatta studier inom program, hösten 2015 Datavetenskapligt program, N1COS Inför varje termin måste du söka till de kurser du vill gå. Sista datum för ansökan till höstens kurser är den 15
Samråd har skett med utbildningsledare vid akademin för innovation, design och teknik för de kurser de ansvarar för.
Programschema för Kandidatprogram i teknisk, 180 hp Programkod: Gäller för läsåret 2018/2019 Programschemat är granskat och godkänt av utbildningsledare vid akademin för utbildning, kultur och kommunikation,
Programschema för Kandidatprogram i teknisk matematik, 180 hp Gäller för läsåret 2019/2020 Om programschemat
Programschema för Kandidatprogram i teknisk, 180 hp Programkod: Gäller för läsåret 2019/2020 Om programschemat Varje utbildningsprogram har en fastställd utbildningsplan där det bl.a. framgår alla i programmet
Fyra i rad Javaprojekt inom TDDC32
Fyra i rad Javaprojekt inom TDDC32 Analys och design-dokument Version 2.0 Datum 2008-05-19 Dokumentnummer 20080303 Sammanfattning Detta är analys och design-dokumentet för programmet Fyra i rad. Fyra i
Föreläsning 10. Grafer, Dijkstra och Prim
Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna
Föreläsning 10. Grafer, Dijkstra och Prim
Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna
Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4
Grafer, traversering Koffman & Wolfgang kapitel 1, avsnitt 4 1 Traversering av grafer De flesta grafalgoritmer innebär att besöka varje nod i någon systematisk ordning precis som med träd så finns det
TDDD78 projekt: Tower Defence
projekt: Tower Defence 1 Introduktion Tower Defence är en kategori av spel med rötter till 1980-talet som går ut på att försvara en punkt (ofta symboliserat som en bas eller by) från horder av monster
Labbrapport - LEGO NXT Robot
KUNGLIGA TEKNISKA HÖGSKOLAN Labbrapport - LEGO NXT Robot Programmering och felsökning Stefan Sarkis 2014-09-02 ssarkis@kth.se Introduktionskurs i datateknik (II1310) Sammanfattning Denna rapport handlar
Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.
Klient/server Översikt Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning. Lektion 1: Webbtekniker från Microsoft Microsoft webbtekniker. ASP.NET. Klientsidan. Internet Information Server.
Tor Sterner-Johansson Thomas Johansson Daniel Henriksson
Lab 4: Anti Tower Defence Oskar Mothander Alan Mendez Larsson dit06omr dit06mln Lärare: Handledare: Johan Eliasson Johan Granberg Tor Sterner-Johansson Thomas Johansson Daniel Henriksson Innehåll 1. Problemspecifikation...
Artificiell Intelligens inom datorspel Är det ett seriöst ämne?
Artificiell Intelligens inom datorspel Är det ett seriöst ämne? Tobias Andersson, tan10006@student.mdh.se Erik Johnasson, ejn11015@student.mdh.se Information kunskap vetenskap etik DVA223 SAMMANFATTNING
PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN
KUNGLIGA TEKNISKA HÖGSKOLAN PROGRAMMERING I NXC Namn: Michel Bitar 2012-08- 25 E- post: mbitar@kth.se Introduktionskurs i datateknik, II1310 Sammanfattning Intressant och lärorik laboration om att programmera
Richard Wiik 9/16/2011
LINKOPINGS UNIVERSITET Pathfinding i spel Inte bara optimalt, utan även realistiskt. 9/16/2011 Abstrakt Hur AI används för att avgöra hur AI karaktärer väljer hur och var de ska gå i Första Persons Actionspel.
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Föreläsning 10. Grafer, Dijkstra och Prim
Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Broarna i Königsberg, Euler, 17 Grafer
Inledande programmering med C# (1DV402) Introduktion till C#
Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i
Datastrukturer och Algoritmer D0041D
Luleå Tekniska Universitet 19 mars 2014 Laborationsrapport Laboration 3 Datastrukturer och Algoritmer D0041D Primms Algoritm Namn E-mail Magnus Björk magbjr-3@ltu.student.se Handledare Felix Hansson Primms
Programinformation VT 2012 för
Datavetenskapligt program Programinformation VT 2012 för Inför varje termin måste du söka till de kurser du vill gå. Sista datum för ansökan är det 15 oktober. För att du skall antas som programstudent
Artificiell intelligens, eller Kommer din dator att bli klokare än dig? (eller kanske är den redan det?)
Artificiell intelligens, eller Kommer din dator att bli klokare än dig? (eller kanske är den redan det?) 1.a November 2011 Innan vi börjar R.I.P. John McCarthy (1924 2011) Grundare av ämnet artificiell
Kurser inom Datavetenskapligt kandidatprogram och Computer Science Master s programme våren 2010
Kurser inom Datavetenskapligt kandidatprogram och Computer Science Master s programme våren 2010 Inför varje termin måste du söka till de kurser du vill gå. Sista datum för ansökan är den 15oktober. För
1. (3p) Inom MDI-området framhåller man att människor lär sig via metaforer. Hur menar man att detta går till?
1. (3p) Inom MDI-området framhåller man att människor lär sig via metaforer. Hur menar man att detta går till? Att lära sig via metaforer innebär att man drar nytta av kunskap som användaren redan har,
Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015
Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora
Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp
Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Dag Wedelin, bitr professor, och K V S Prasad, docent Institutionen för data- och
Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.
Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5 Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor 1 Laboration 4 - Introduktion Syfte: Öva på självständig problemlösning
Det ska endast finnas två bilder av samma typ på spelplanen.
Laboration 3 Laboration 3, Memory Observera För att bli godkänd på laborationen ska din källkod följa den standard vad det gäller kommentering, val av variabelnamn m.m. som gåtts igenom på föreläsning.
Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,
Snake Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola, 2015-05-18 Oskar Petersen, I-12 Handledare: Bertil Lindvall Abstract Denna rapport beskriver ett projekt där ett klassiskt
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Objektorienterad programmering
Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad
Tentamen i Objektorienterad modellering och design Helsingborg
Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng
Statistik över heltal
Övningsuppgift Statistik över heltal Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande
SKOLFS. beslutade den -- maj 2015.
SKOLFS Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan och inom kommunal vuxenutbildning på gymnasial nivå; beslutade den -- maj
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
AI-Tekniker. För domänspecifika problemområden i StarCraft 2. Mattias Tiger Fredrik Präntare
AI-Tekniker För domänspecifika problemområden i StarCraft 2 Mattias Tiger Fredrik Präntare Introduktion och motivering Ni ska inför er individuella uppgift definiera ett problem och välja ut en eller flera
Programvaruteknik, hp
1 (6) Utbildningsplan för: Programvaruteknik, 120-180 hp Software Engineering, 120-180 Credits Allmänna data om programmet Programkod Tillträdesnivå Diarienummer TPVAG Grundnivå MIUN 2010/1734 Högskolepoäng
TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS
TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS 180226 Idag (ADT), OOP i Racket, labb 5 2 Allmän info Duggan. Laboration 4 deadline. Planering framöver Muddy cards (nästa timme) 3 Lite repetition ADT
Titel Mall för Examensarbeten (Arial 28/30 point size, bold)
Titel Mall för Examensarbeten (Arial 28/30 point size, bold) SUBTITLE - Arial 16 / 19 pt FÖRFATTARE FÖRNAMN OCH EFTERNAMN - Arial 16 / 19 pt KTH ROYAL INSTITUTE OF TECHNOLOGY ELEKTROTEKNIK OCH DATAVETENSKAP
MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004
MinMax Algoritmen Implementation och optimering Joakim Östlund 15 juni 2004 1 Samanfattning MinMax är en algoritm som kan användas i turbaserade spel för att skapa en virituell motståndare. Algoritmen
Genetisk programmering i Othello
LINKÖPINGS UNIVERSITET Första versionen Fördjupningsuppgift i kursen 729G11 2009-10-09 Genetisk programmering i Othello Kerstin Johansson kerjo104@student.liu.se Innehållsförteckning 1. Inledning... 1
TDDI16: Datastrukturer och algoritmer
TDDI16: Datastrukturer och algoritmer Lab 3: Ordkedjor Höstterminen 2018 2018-05-14 1 Upplägg Första delen av instruktionen, avsnitt 2 till 6, innehåller en fullständig beskrivning av problemet utan några
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Objektorienterad programmering
Objektorienterad programmering Aletta Nylén http://user.it.uu.se/~aletta Epost: aletta.nylen@it.uu.se Rum: 1216 Kursinfo Lärare: Aletta Nylén Jesper Wilhelmsson Litteratur: Object-Oriented Software Development
Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...
Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss
Föreläsning 11. Giriga algoritmer
Föreläsning 11 Giriga algoritmer Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Uppgifter Giriga algoritmer (Greedy algorithms)
SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS
SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS Individuellt Mjukvaruutvecklingsprojekt (Utvecklare av digitala tjänster) Den 1 juni 2011 ABSTRAKT Rapporten tar upp positiva och negativa erfarenheter som jag erhållit
Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML
Målet Mer OOP Mer om klasser Några exempel UML Modularitet Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information Återanvändbarhet Variation i typer Variation i datastrukturer
Beijer Electronics AB 2000, MA00336A, 2000-12
Demonstration driver English Svenska Beijer Electronics AB 2000, MA00336A, 2000-12 Beijer Electronics AB reserves the right to change information in this manual without prior notice. All examples in this
Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?
Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se
Designmönster, introduktion. Vad är det? Varför skall man använda mönster?
Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Kent Petersson EMW, Mölndal Datavetenskap, Chalmers epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.se/~kentp
Mälardalens högskola
Teknisk rapportskrivning - en kortfattad handledning (Version 1.2) Mälardalens högskola Institutionen för datateknik (IDt) Thomas Larsson 10 september 1998 Västerås Sammanfattning En mycket viktig del
Objektorienterad programmering, allmänt
Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet
Laboration i datateknik
KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Felsökning och programmering av LEGO NXT robot Daniel Willén 2012 09 06 dwill@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Syftet med
Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod
Systemutveckling TDP029 Systemutveckling Annika Silvervarg COIN/HCCS/IDA Systemutveckling kallas processen att ta emot en beställning på ett datorsystem, skriva en strukturerad kravspecifikation på systemet,
Aktivitetsschemaläggning för flerkärninga processorer
Lunds Tekniska Högskola Datorarkitekturer med Operativsystem EDT621 Aktivitetsschemaläggning för flerkärninga processorer Tobias Lilja 5 december 2016 Innehåll 1 Inledning 3 1.1 Syfte................................
725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack
725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den
JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund gussk258@student.liu.se. Marcus Widblom marwi026@student.liu.se. Senast ändrad: 13 / 05 / 08
JavaRats Kravspecifikation Version 1.1 Gustav Skoglund gussk258@student.liu.se Marcus Widblom marwi026@student.liu.se Senast ändrad: 13 / 05 / 08 Sammanfattning Kravspecifikationen för JavaRats har skrivit
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
729G Artificiell jakt och flockbeteende inom datorspel
Artificiell jakt och flockbeteende inom datorspel Abstrakt Chasing and Evading är ett begrepp som används för att beskriva hur agenter rör sig mot (jagar), eller undviker en spelare. Liksom i de flesta
Projektrapport EDA095
Projektrapport EDA095 Grupp 8 Fredrik Stål, dt08fs5@student.lth.se Per-Gustaf Stenberg, dt08ps5@student.lth.se Mattias Frisk, dt08mf3@student.lth.se Joakim Hembrink, dt08jh8@student.lth.se 16 maj 2012
Föreläsningsanteckningar F6
Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en
Objektorientering: Lagring och livstid
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop
Projektuppgift.
Projekt Projektuppgift Designa och implementera ett webbaserat gränssnitt för att söka information i en befintlig databas. Webssidan ska vara komplett med navigering, överblick, sökning och strukturerad
TDDD92 Artificiell intelligens -- projekt
jonas.kvarnstrom@liu.se 2018 TDDD92 Artificiell intelligens -- projekt Kursinformation Outline Om oss Om kursen i allmänhet Om den individuella uppgiften Om det gemensamma projektet Diskussion och frågor
Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions
Testdriven utveckling Magnus Jonsson Siemens Medical Solutions 2 Soarian Stort projekt, ca 400 personer i projektet Distribuerad utveckling i USA, Indien och Sverige Web baserat lösning med admin client
Regression med Genetiska Algoritmer
Regression med Genetiska Algoritmer Projektarbete, Artificiell intelligens, 729G43 Jimmy Eriksson, jimer336 770529-5991 2014 Inledning Hur många kramar finns det i världen givet? Att kunna estimera givet
Goda råd till de som ska utföra ett liknande projekt (från KMM 2016)
Goda råd till de som ska utföra ett liknande projekt (från KMM 2016) Snöa inte er på lösningar som kanske fungerar, eller som ni bara vill få fungera. Var realistiska och våga byt lösning om den det verkar
The Intelligent Timer
The Intelligent Timer Linnea Karell och Oscar Bagge, I10 Handledare: Bertil Lindvall 2013-05-20 Abstract The objective of this project was to build a prototype of a digital timer. The product design specification
Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot
KUNGLIGA TEKNISKA HÖGSKOLAN Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot Josef Karlsson Malik 2015-09- 02 jkmalik@kth.se Introduktionskurs i datateknik (II0310) Sammanfattning
LabVIEW uppgift 4. Erik Andersson och Johan Schött. 22 februari 2010
LabVIEW uppgift 4 Erik Andersson och Johan Schött 22 februari 2010 Sammanfattning Vår uppgift gick ut på att skapa ett system vars syfte låg i att mäta vattennivån och hålla den inom givna gränser i en
Föreläsning 5: Grafer Del 1
2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
Flervariabel Analys för Civilingenjörsutbildning i datateknik
Flervariabel Analys för Civilingenjörsutbildning i datateknik Henrik Shahgholian KTH Royal Inst. of Tech. 2 / 9 Utbildningens mål Gällande matematik: Visa grundliga kunskaper i matematik. Härmed förstås
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.
Kognitionsvetenskapliga Programmet LiU. AI i spelet Magicka. Gruppbeteende/Grupprörelser. Jonathan Nilsson
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
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 10 Anton Grensjö grensjo@csc.kth.se 9 november 2017 1 Idag En konstruktionsreduktion Fler bevis av NP-fullständighet 2 Teori Repetition Ett problem tillhör
Handledare: Mikael Goldmann
2012-02- 23 Jacob Rydh Robert Hedin Sudoku Solver Projektspecifikation Handledare: Mikael Goldmann Introduktion Vi ska studera och utforma olika algoritmer för att lösa Sudoku puzzel. Vi kommer testa olika
Examensarbete, DT099G
Examensarbete, DT099G Dr. Ulf Jennehag 2016-11-04 Innehåll Förkunskaper Kurser Inriktning Lärandemål Inför starten Projektbeskrivning Handledaren Uppgifter Examination Rapport Presentation Opponering Rapportstrukturen
Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson
Department of Information Technology Digitala projekt SuperKull Daniel Öhman Alexander Persson Abstract The purpose of this course was to design and construct an electronic
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får
Slutrapport Get it going contracts
Slutrapport Get it going contracts Författare: Anthony Dry Datum: 2011-06-02 Program: Utvecklare av digitala tjänster Kurs: Individuellt mjukvaruutvecklingsprojekt 7.5p Linnéuniversitetet (Kalmar) Abstrakt
Computer Science, masterprogram
DNR LIU-2016-01391 1(11) Computer Science, masterprogram 120 hp Computer Science, Master's Programme 6MICS Gäller från: 2017 VT Fastställd av Fakultetsstyrelsen för tekniska fakulteten Fastställandedatum
de var svåra att implementera och var väldigt ineffektiva.
OBS! För flervalsfrågorna gäller att flera alternativ eller inget alternativ kan vara korrekt. På flervalsfrågorna kan man bara ha rätt eller fel, dvs frågan måste vara helt korrekt besvarad. Totalt kan
Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?
Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2014 2017 jonas.kvarnstrom@liu.se
Filhanterare med AngularJS
Filhanterare med AngularJS Författare: Filip Johansson Peter Emilsson Oskar Georgsson Christian Nilsson Datum: 2014-03-26 1 Sammanfattning Filhanterare med AngularJS är en filhanterare skapad för Sigma
SCRATCH är ett nytt programmeringsspråk som gör att du kan skapa dina egna interaktiv historier, animationer, spel, musik och konst.
version 1.4 SCRATCH är ett nytt programmeringsspråk som gör att du kan skapa dina egna interaktiv historier, animationer, spel, musik och konst. Dra gå blocket i Scripts-området. Klicka på blocket för
Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)
Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Som sagt så kommer den här kursen endast innehålla en enda föreläsning och det var förra gången. Från och med nu så kommer vi förutsätta
Distribuerade System, HT03
UMEÅ UNIVERSITET 21 oktober 2003 Institutionen för Datavetenskap Laborationsrapport Laboration Middleware Distribuerade System, HT03 Jini Namn: Anders Holm, c00asm@cs.umu.se Kjell Johansson, c00kjn@cs.umu.se
Post Mortem för Get The Treasure!
Post Mortem för Get The Treasure! Av: Emil Lindberg - Grupp 15 Vi skulle göra ett action multiplayerspel som spelades över nätverket. Vilket vi nästan lyckades göra. Tiden tog slut och programmerarna han
Undervisningen i ämnet mobila applikationer ska ge eleverna förutsättningar att utveckla följande:
MOI Ämnet mobila applikationer behandlar olika tekniker för att utveckla programvara riktad mot mobila enheter samt processen från idé till färdigt program. Ämnet mobila applikationer får bara anordnas
Grafiska pipelinens funktion
LUNDS TEKNISKA HÖGSKOLA CAMPUS HELSINGBORG Grafiska pipelinens funktion Ludvig von Sydow EDT62, HT17 Datorarkitekturer med Operativsystem Sammanfattning Denna rapport syftar till att beskriva hur en graphics
Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar
Skapa testfall Testing Köra testen Hitta fel Inspections and reviews Verifiera resultatet Formal methods Static analysis Completeness Verifiering Kvalitet Maintainability Validering Traceability Fault
OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15
OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 140818 kl. 08:15 13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna. Betygsgräns: *** OBS *** Kurs:
Programmeringsuppgift Game of Life
CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade