Gameprogrammeren: Recursie

Slides:



Advertisements
Verwante presentaties

Advertisements

OOS Object geOrienteerd Software-ontwerp - 3
Hoofdstuk 8: Recursie.
Hoofdstuk 6: Controle structuren
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
PHP functies.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 4.
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Game Object Structuren
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Variabelen, declaraties en toekenningen
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Programmastructuur
Basis Gameprogrammeren
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
Gameprogrammeren: Platform-games
Gameprogrammeren: Properties
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Game Basics
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Gameprogrammeren: Exceptions
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Gameprogrammeren: Abstracte klassen
Willekeurigheid en Herhaling
Gameprogrammeren: Interfaces
Arjan Egges Paul Bergervoet Wouter van Toll
Gameprogrammeren: Tiles en File I/O in Tick Tick
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
Wat gaan we doen? Herhaling ARM assembler instructies
Arjan Egges & Paul Bergervoet
Implementatie Zoekboom
Object Communication (Jewel Jam)
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
TOP met iTasks 2.
Gameprogrammeren: Arrays
Van minder naar meer Getallen 11 t/m 20.
Transcript van de presentatie:

Gameprogrammeren: Recursie Arjan Egges Paul Bergervoet Wouter van Toll

Wat is recursie? Binnen een methode/property X diezelfde X opnieuw aanroepen, normaal gesproken met andere parameters Soort tegenhanger van while/for-loops Loop: herhaal acties ‘na elkaar’ Recursie: herhaal acties ‘in elkaar’ Vaak zijn ze allebei mogelijk Soms is de ene logischer dan de andere

Eerste voorbeeld Net als bij een loop: geef aan wanneer het stopt Bij recursie is dit een base case Dan is het probleem “klein genoeg” om direct antwoord te geven Voorbeeld zonder base case: Gaat oneindig door! public int product(unsigned int a, unsigned int b) { return (a + product(a-1, b)); }

(Op zich niet nodig: waarom niet?) Eerste voorbeeld Zelfde methode, maar met terminatie: public int product(unsigned int a, unsigned int b) { if (a == 0) return 0; else return (b + product(a-1, b)); } Stoppen indien a == 0 (Op zich niet nodig: waarom niet?)

Ander voorbeeld van recursie Wat is hier de terminatieconditie? public virtual Vector2 GlobalPosition { get if (parent != null) return parent.GlobalPosition + this.Position; else return this.Position; } Zelfde property aanroepen in ander object

Recursief zoeken naar game-objecten public GameObject Find(string id) { foreach (GameObject obj in gameObjects) if (obj.ID == id) return obj; if (obj is GameObjectList) GameObjectList objlist = obj as GameObjectList; GameObject subobj = objlist.Find(id); if (subobj != null) return subobj; } return null; Methode in de GameObjectList-klasse. Gebruik is om te kijken of een object van een bepaald type is. Methode roept ‘zichzelf’ aan: recursie

Publieksvraag Schrijf een methode ‘grootste’ met de volgende header: Uitvoer moet zijn: het grooste getal uit de lijst Maak gebruik van recursie! public int grootste(List<int> lijst, int aantal)

Uitwerking public int grootste(List<int> lijst, int aantal) { if (aantal == 1) return lijst[0]; else int grootsteRest = grootste(lijst, aantal-1); if (grootsteRest > lijst[aantal-1]) return grootsteRest; return lijst[aantal-1]; }

Publieksvraag Wat is de uitkomst als we de getallen 1 t/m 9 aan de volgende methode als parameter meegeven? int puzzle(int n) { if (n == 1) return 1; if (n % 2 == 0) return puzzle(n/2); else return puzzle(3*n+1); } Collatz conjecture (not proven yet): always results in 1