Arjan Egges & Paul Bergervoet

Slides:



Advertisements
Verwante presentaties
Practica Computerlinguistiek Tekst en uitleg:
Advertisements

PROS2 Les 11 Programmeren en Software Engineering 2.
Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Algoritmiek Object-georiënteerd Programmeren
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Arrays.
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Hoorcollege 4 Objecten en methoden. Eigen methode toevoegen class Painter : Game { public void HandleInput() { … } protected override void Update(GameTime.
Hoofdstuk 11 Strings en arrays. TextArea en String class LetterTeller extends Applet { void init ( ) { invoer = new TextArea (5, 40); uitvoer = new TextField(40);
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
GEGEVENSSTRUCTUREN IN.NET. Inleiding  Enumerated type  Structure  Collecties  Typed collections  Untyped collections.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b;
Game Object Structuren
…is eigenlijk overbodig!
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
Letterfrequentie turven
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: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
Gameprogrammeren: Properties
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Gameprogrammeren: Recursie
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
Arjan Egges & Paul Bergervoet
Object Communication (Jewel Jam)
Exceptions Exception:
Gameprogrammeren: Sprite sheets
Software Development fundamentals
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

Arjan Egges & Paul Bergervoet Collections & Arrays Arjan Egges & Paul Bergervoet

Programma ‘Snowflakes’ Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object Sneeuwvlok object

SnowFlakes programma class MyGame { Snowflake snowflake1; … } Dat kan handiger!

Collections Worden gebruikt om lijsten of verzamelingen van objecten/variabelen te representeren Voorbeelden van Collection klassen: List, Set, Dictionary…

Collections Voorbeeld: de List klasse Declaratie: Initialisatie: Uit System.Collections.Generic Declaratie: Initialisatie: Type van objecten in de lijst. List<Snowflake> snowflakes; snowflakes = new List<Snowflake>();

Collections Wat kan List bijvoorbeeld allemaal? Lengte opvragen Element ergens in de lijst toevoegen Element aan het eind toevoegen List heeft een type-parameter We noemen List ook wel een generiek type int lengte = snowflakes.Count; snowflakes.Insert(1, new Snowflake(…)); snowflakes.Add(new Snowflake(…));

Vullen en langslopen van een List snowflakes = new List<Snowflake>(); Texture2D sprite; sprite = Content.Load<Texture2D>("spr_snowflake"); for (int i = 0; i < 500; i++) { Snowflake flake = new Snowflake(sprite); snowflakes.Add(flake); } We moeten wel steeds het aantal vlokken aangeven…  for (int i = 0; i < 500; i++) snowflakes[i].Draw(gameTime, spriteBatch); Geeft aan welk element In de lijst we willen hebben

Langslopen van een List Speciale constructie: foreach Letterlijk: ‘doe iets voor elk object in de lijst’ Kan gebruikt worden voor alle Collection klassen for (int i = 0; i < nrOfFlakes; i++) snowflakes[i].Draw(gameTime, spriteBatch); foreach (Snowflake flake in snowflakes) flake.Draw(gameTime, spriteBatch);

IList interface List heeft een soort superklasse IList Dus dit mag ook: IList is een interface Verschil interface/klasse: Keyword ‘virtual’ niet nodig in een interface Een klasse mag meerdere interfaces implementeren IList<Snowflake> snowflakes; snowflakes = new List<Snowflake>();

Interfaces Een interface definieert methoden en properties… Maar implementeert ze niet! Ook heeft een interface geen membervariabelen Klasse die een interface implementeert moet alle methoden/properties bevatten die in die interface gedefinieerd zijn

IList/ICollection interface Volgorde van gegevens is niet belangrijk Voorbeeld: alle items in de inventory van de speler IList Gegevens die in een lineaire volgorde staan Voorbeeld: de achtergrondlagen in de volgorde waarin ze getekend moeten worden

ICollection interface Ziet er zo uit: interface ICollection<E> { void Add(E x); bool Remove(E x); bool Contains(E x); int Count {get;}; // een read-only property void Clear(); … }

IList interface interface IList<E> : ICollection<E> { IList interface is ook Een ICollection! interface IList<E> : ICollection<E> { E this [int n] {get; set;}; // notatie voor de indicering int IndexOf(E x); void Insert(int n, E x); void RemoveAt(int n); … }

Andere interfaces ISet IDictionary De klassieke verzameling Mag geen dubbele elementen bevatten IDictionary Een soort array, maar dan anders Indicering kan met elk type Bijvoorbeeld string IDictionary<string> vertaler = new Dictionary<string>(); vertaler["hallo"] = "hello"; vertaler["het spel"] = "the game";

Arrays Een array is een lijst van objecten van hetzelfde type. Simpele vorm van een collection Voorbeeld van een declaratie van een array: Variabelenaam int [] tabel; Type van de waarden in de array Geeft aan dat we met een array te maken hebben

Arrays Bevat aantal elementen Declaratie tabel length 5 1 2 3 4 int [] tabel; tabel = new int[5]; Aantal elementen in de array Initialisatie Let op: na initialisatie kan het aantal elementen niet meer veranderd worden! In tegenstelling tot Collections!

tot het aantal elementen Arrays tabel int [] tabel; tabel = new int[5]; tabel[3] = 12; int x = tabel[3] + 5; tabel[1] = tabel[3]/2; x = tabel.Length; length 5 1 2 3 4 Property voor toegang tot het aantal elementen 6 12 x 5 17

Arrays Stel we vullen de array als volgt: Dit kan ook een stuk handiger: int [] tabel; tabel = new int[5]; tabel[0] = 42; tabel[1] = 42; tabel[2] = 42; tabel[3] = 42; tabel[4] = 42; int nummer; for (nummer=0; nummer<tabel.Length; nummer++) tabel[nummer] = 42;

Publieksvraag Schrijf een aantal opdrachten die de tabel vult met de waarden 1 t/m 5 int nummer; for (nummer=0; nummer<tabel.Length; nummer++) tabel[nummer] = nummer+1;

Publieksvraag De reeks van Fibonacci is als volgt gedefinieerd: f(0) = 1, f(1) = 1 f(n) = f(n-2) + f(n-1) voor n > 1 Voorbeeld: 1, 1, 2, 3, 5, 8, 13, 21, enzovoorts Schrijf een serie opdrachten die een array van grootte 20 met de reeks van Fibonacci vult.

Oplossing int[] fib; fib = new int[20]; fib[0] = 1; fib[1] = 1; for (int nummer=2; nummer<fib.Length; nummer++) fib[nummer] = fib[nummer-1] + fib[nummer-2];

Arrays van andere typen Arrays kunnen van allerlei typen gemaakt worden: Type mag ook best een struct zijn. int[] fibonacci; float[] floatArray; char[] karakterLijst; Vector2[] posities; GameObject[] gameObjecten; Of zelfs een eigen klasse!

Array van getallen int [ ] tabel; tabel = new int [5]; tabel 5 length int [ ] tabel; 1 2 tabel = new int [5]; 3 4

Array van struct-objecten tabel 5 length Vector2 [ ] tabel; 1 tabel = new Vector2[5]; 2 3 4

Array van class-objecten tabel 5 length GameObject [ ] tabel; 1 tabel = new GameObject[5]; 2 3 for (int t=0; t<5; t++) 4 tabel[t] = new GameObject();

Array als parameter int Kleinste ( int [ ] tabel ) { } int resultaat; 1 2 3 4 length 5 12 95 11 23 15 int resultaat; int t; resultaat =tabel [0]; for (t=0; t<tabel.Length; t++) if (tabel [t] < resultaat) resultaat = tabel [t]; return resultaat;

Deel van de array doorzoeken static int Kleinste ( int [ ] tabel ) { } tabel , int aantal) 1 2 3 4 length 5 12 95 11 int resultaat; int t; resultaat =tabel [0]; for (t=0; t<tabel.Length; t++) aantal if (tabel [t] < resultaat) resultaat = tabel [t]; return resultaat;

Syntax van array-type

Twee-dimensionale array tabel 5 3 length int [ , ] tabel; 1 2 tabel = new int [5,3]; 3 4 tabel.GetLength(0) tabel.GetLength(1) 1 2

Array van arrays int [ ] [ ] tabel; tabel = new int[5][2]; tabel 5 length int [ ] [ ] tabel; 1 tabel = new int[5][2]; 2 3 4

Drie-dimensionale array tabel 5 3 2 length 1 int [ , , ] tabel; tabel = new int [5,3,2]; 1 2 3 4 1 2

Initialisatie van arrays int [ ] maand = { 31,28,31,30,31,30,31,31,30,31,30,31 }; string [ ] woorden = { "aap", "noot", "mies" }; int [ , ] = { {1,2,3,4}, {5,6,7,8} };

Strings string altijd tussen dubbele aanhalingstekens: Strings zijn ook een soort ‘arrays’ van karakters (type: char) string test = "Dit is een test";

Geschiedenis van char 1970s: 6 bits = 64 symbols 26 letters, 10 digits, 28 leestekens 1980s: 7 bits = 128 symbols +26 lowercase, +5 leestekens, 33 control 1990s: 8 bits = 256 symbols +letters met accenten 2000s: 16 bits = 65536 symbols +Grieks, Cyrillisch, Japans, Devangari, ... ASCII IBM/DOS ANSI/ISO Unicode

Character coding code 0 code 32 code 48 code 65 code 97 code 127

char bijzonderheden alfabetisch geordend char c; if ( ’A’<=c && c<=’Z’ ) … converteerbaar naar int int n; n = c + 32; en terug c = (char) n;

Conversies Conversie (cast) naar “grotere” waarde kan altijd double d; int n; d = n; int n; char c; n = c; ThreeColorGameObject x; Ball b = new Ball(Content); x = b; Conversie naar “kleinere” waarde is gevaarlijk n = (int) d; c = (char) n; b=(Ball) x;

Speciale char-waarden Letterlijk symbool ’A’ ’&’ Speciaal symbool ’\n’ ’\t’ Het quote-symbool ’\’’ ’\”’ Het backslash-symbool ’\\’ twee tekens in de broncode, toch één character!

Strings zijn immutable ! Iets meer over strings Methoden en properties in de string klasse: int Length bool Equals(string s) string SubString(int x, int y) string Concat(object s) string Insert(int p, string s) Strings zijn immutable ! Levert steeds een nieuwe string op!

concat en substring string s, t, u, v, w; s = "ham"; t = "burger"; hamburger burger burg s = "ham"; t = "burger"; u = s.Concat(t); s + t ; v = u.Substring(3); w = u.Substring(3, 4); 012345678 vanaf aantal karakters hamburger

Iets meer over strings Je kunt strings uitlezen als arrays: Maar aanpassen mag niet! Dubbele aanhalingstekens gebruiken we voor strings ("), enkele aanhalingstekens voor chars ('). string s = "Hallo"; char c = s[1]; s[1] = 'e';

string versus array Klasse Type met speciale syntax Indexer -notatie string s = new string(); char[] a = new char[10]; Indexer -notatie Speciale index-notatie c = s[2]; s[3] = c; c = a[2]; a[3] = c; Speciale quote-notatie s = "hallo"; Property s.Length Property a.Length Methoden s.IndexOf(t); s.Substring(3,5);

Score op het scherm tekenen Gebruik de methode DrawString uit de SpriteBatch klasse Uit het Painter voorbeeld: public void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Begin(); spriteBatch.Draw(background… …. spriteBatch.DrawString(gameFont, "Score: " + score, new Vector2(20, 18), Color.White); … spriteBatch.End(); } Tekst op het scherm tekenen