The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,

Slides:



Advertisements
Verwante presentaties
Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Advertisements

Programmeren in Java met BlueJ
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 2 Hallo, C# !.
Server side scripting 1 Webtechnologie Lennart Herlaar.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
Spatial classificatie
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 13 Animatie, game physics. De speler Wordt aangestuurd via toetsenbord Kent verschillende soorten bewegingen Rennen Stilstaan Springen Doodgaan.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Hoorcollege 14 Vijanden, excepties. Wat zit allemaal in een level? Startpositie van de speler Waterdruppels Tiles Vijanden Einde van het level Achtergronden.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Hoofdstuk 19: Worlds contain Spaces. Organizing your Game Space Linear Grid Web Points in Space Divided Space.
#3Software planning. refactor  Vermijdt dubbele code Welke code lijkt veel op elkaar?
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
Hoofdstuk 5 – Object Based Programmeren
Hoorcollege 12 Afronding Penguin Pairs & overzicht Tick Tick.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
Hoofdstuk 9 Objecten en klassen.
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
Internetapplicaties - IV Collecties 1 Internetapplicaties Deel 4: Java hulpklassen: Collecties.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoorcollege 5 Herhaling, game object interactie. Ball class class Ball { Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position,
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Algoritmiek Class Hierarchies, Inheritance. Hoorcollege 12 - Ma. 20 nov L.M. Bosveld-de Smet.
Hoorcollege 2 Basis gameprogrammeren. Soorten programma’s Console- applicatie.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
Hoorcollege 4 Objecten en methoden. Eigen methode toevoegen class Painter : Game { public void HandleInput() { … } protected override void Update(GameTime.
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Game Object Structuren
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Overerving
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Willekeurigheid (Randomness)
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Abstracte klassen
Willekeurigheid en Herhaling
Gameprogrammeren: Interfaces
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)
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Transcript van de presentatie:

The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet, PC)

Hoorcollege 6 Afronding Painter, overerving

opdrachten methoden variabelen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken Programma en geheugen

Dat moet handiger kunnen! Voortborduren op eerder gedaan werk Veel dingen zijn hetzelfde tussen de Cannon, PaintCan en Ball klassen – Bijna dezelfde membervariabelen – Constructormethoden lijken op elkaar – Draw-methode is soms helemaal hetzelfde!

class Painter : Game Painter is een subklasse van Game Game is de superklasse van Painter Elk Painter-object is tevens een Game-object Een Painter-object is een bijzonder geval van een Game-object Subklassen

Over-erving Objecten van een subklasse erven variabelen en methoden&properties van de superklasse Overgeërfd Zelf gedeclareerd Painter IsMouseVisible Content GraphicsDevice game spriteBatch screen inputHelper randomgameWorld graphics

Een object uitbreiden Hoe kunnen we een object uitbreiden? – Meer variabelen toevoegen – Extra methoden/properties toevoegen – Bestaande methoden/properties veranderen/vervangen Hiervoor gebruiken we het keyword virtual in combinatie met override

Een object uitbreiden Voorbeeld: Painter klasse als subklasse van Game – Variabelen toevoegen (spriteBatch, …) – Methodes toevoegen (HandleInput) – Methodes vervangen (Update, Draw, …) Ander voorbeeld: ThreeColorGameObject klasse als basis voor alle game objecten in Painter (Ball, PaintCan, Cannon)

class ThreeColorGameObject { protected Texture2D colorRed, colorGreen, colorBlue; protected Texture2D currentColor; protected Vector2 position, velocity; protected Color color; public ThreeColorGameObject(Texture2D colorRed, Texture2D colorGreen, Texture2D colorBlue) { this.colorRed = colorRed; this.colorGreen = colorGreen; this.colorBlue = colorBlue; Color = Color.Blue; position = Vector2.Zero; velocity = Vector2.Zero; } … Toegang verlenen aan subklassen Parameters van de constructormethode

Protectiemechanisme public – Iedereen mag het gebruiken protected – Alleen subklassen mogen het gebruiken private – Alleen de eigen klasse mag het gebruiken Mechanisme kun je gebruiken voor membervariabelen, methoden en properties

Protectiemechanisme In Painter: class Ball {... protected float mass; public Vector2 position; public float Mass { get {... } } public void Update(); private void InterneMethode();... } Ball ball = new Ball(...); float a = ball.mass; float s = ball.Mass; ball.position = Vector2.Zero; ball.Update(); ball.InterneMethode(); Nee, dat mag niet! Ja, dat mag! Ja, dat mag ook! En zelfs dat mag. Maar dit mag niet!

class ThreeColorGameObject {... public virtual void HandleInput(InputHelper inputHelper) { } public virtual void Update(GameTime gameTime) { position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds; } public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Draw(currentColor, position, Color.White); } Handige methoden voor game objecten! = de methode mag vervangen worden in een subklasse

De klasse ThreeColorGameObject class ThreeColorGameObject {... public Vector2 Center { get { return new Vector2(currentColor.Width, currentColor.Height) / 2; } public Vector2 Position { get { return position; } } public Color Color... } Handige properties voor game objecten!

De nieuwe Ball-klasse class Ball : ThreeColorGameObject { bool shooting; public Ball(ContentManager Content) : base(Content.Load ("spr_ball_red"), Content.Load ("spr_ball_green"), Content.Load ("spr_ball_blue")) { } … Informatie doorgeven aan ThreeColorGameObject constructormethode Speciale versie van ThreeColorGameObject… base wijst naar het huidige object alsof hij het type van de superklasse heeft! … namelijk met een extra membervariabele!

Base versus this Painter IsMouseVisible Content GraphicsDevice game this “base  this” spriteBatch screen inputHelper randomgameWorld graphics base

Een Ball object maken Declaratie Geheugen reserveren Base constructor This constructor Toekenning object aan variabele Ball b; b = new Ball(Content); b Ball colorRed positionvelocitycolor colorBlue currentColor colorGreen shooting false Texture2D

Omdat Ball ook een ThreeColorGameObject is, mag dit ook: Aanroepen van methode: – Die van Ball! Dit effect noemen we polymorfisme Object-verwijzingen ThreeColorGameObject b = new Ball(Content); b.HandleInput(); Welke versie van HandleInput wordt nu aangeroepen?

Virtual - Override A a = new B (); dit mag, als class B : A a. m( ); deze methode komt uit klasse: B als m virtual in A en override in B A anders

Voordelen van overerving Je hoeft je code niet telkens te knippen/plakken Uitbreidingen van ThreeColorGameObject kun je in alle subklassen gebruiken Vastleggen van interface voor gebruik Als we de PaintCan-klasse laten overerven van ThreeColorGameObject – gratis property Center!

Superklassen in libraries Texture2D : Texture Texture : GraphicsResource superklasse super- superklasse

Ball public override void HandleInput(InputHelper inputHelper) { if (inputHelper.MouseLeftButtonPressed() && !shooting) { shooting = true; velocity = (inputHelper.MousePosition - position) * 1.2f; } Vervang de originele versie

public override void Reset() { base.Reset(); position = new Vector2(65, 390); velocity = Vector2.Zero; shooting = false; } Roep de originele versie aan Andere methoden in de Ball klasse

Ball public override void Update(GameTime gameTime) { if (shooting) { velocity.X *= 0.99f; velocity.Y += 6; } else { Color = Painter.GameWorld.Cannon.Color; position = Painter.GameWorld.Cannon.BallPosition - Center; } if (Painter.GameWorld.IsOutsideWorld(position)) Reset(); base.Update(gameTime); } Welke versie wordt hier aangeroepen?

Omgaan met ‘game over’ Member variabelen in de GameWorld klasse: Texture2D background, gameover; Ball ball; PaintCan can1, can2, can3; Cannon cannon; int lives; Texture2D livesSprite; Game over overlay Bijhouden en tekenen aantal levens

HandleInput public void HandleInput(InputHelper inputHelper) { if (lives > 0) { cannon.HandleInput(inputHelper); ball.HandleInput(inputHelper); } else { if (inputHelper.KeyPressed(Keys.Space)) Reset(); } Ander gedrag afhankelijk van het aantal overgebleven levens

Update public void Update(GameTime gameTime) { if (lives > 0) { ball.Update(gameTime); can1.Update(gameTime); can2.Update(gameTime); can3.Update(gameTime); } Objecten alleen updaten indien speler nog levens heeft

public void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); ball.Draw(gameTime, spriteBatch); cannon.Draw(gameTime, spriteBatch); can1.Draw(gameTime, spriteBatch); can2.Draw(gameTime, spriteBatch); can3.Draw(gameTime, spriteBatch); for (int i = 0; i < lives; i++) spriteBatch.Draw(livesSprite, new Vector2(i * livesSprite.Width + 15, 20), Color.White); if (lives <= 0) spriteBatch.Draw(gameover, new Vector2(Painter.Screen.X – gameover.Width, Painter.Screen.Y - gameover.Height) / 2, Color.White); spriteBatch.End(); } Teken game over overlay

Tekst op het scherm tekenen Gebruik de methode DrawString uit de SpriteBatch klasse Type: string – Lijst van karakters Er is ook een type om 1 karakter te representeren: 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 = symbols +Grieks, Cyrillisch, Japans, Devangari,... IBM/DOS Geschiedenis van char ASCII ANSI/ISO Unicode

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

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;

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

Strings string altijd tussen dubbele aanhalingstekens: Syntaxdiagram voor constanten: string test = "Dit is een test";

Score op het scherm tekenen Draw methode van GameWorld uitbreiden: public void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Begin(); spriteBatch.Draw(background… …. spriteBatch.DrawString(gameFont, "Score: " + score, new Vector2(20, 18), Color.White); for (int i = 0; i < lives; i++) spriteBatch.Draw(livesSprite, … if (lives <= 0) spriteBatch.Draw(gameover, … spriteBatch.End(); } Tekst op het scherm tekenen

Geluidseffecten ( finishing touch ) In de Ball klasse: – Membervariabele toevoegen: – Effect laden in constructor: – Afspelen bij afschieten: protected SoundEffect ballShot; ballShot = Content.Load ("snd_shoot_paint"); if (inputHelper.MouseLeftButtonPressed() && !shooting) { shooting = true; velocity = (inputHelper.MousePosition - position) * 1.2f; ballShot.Play(); }

Hiërarchie-ontwerp class Voertuig :Vervoermiddel class Boot :Vervoermiddel “is een” Vervoer middel Voertuig Boot

Hiërarchie-ontwerp ontwerpkeuze: ondergrond gaat voor motorisatie ontwerpkeuze: motorfiets is meer motor dan fiets Vervoer middel Auto Motor Fiets Voertuig Boot Vliegtuig Vracht Wagen Stoom Boot Motor Voertuig Fiets Motor Boot Zeil Boot

Practicumdeadline Komende zondag – Middernacht Lever je opdracht in via Submit …probeer dat eerder dan 23:59:59 te doen Te laat inleveren = geen practicumcijfer!

Toets vrijdag Zaal: Ruppert-Blauw Tijd: uur Let op: geen open-boek! Je krijgt een bijlage met XNA/C# klassen en methoden Vrijdag zijn er geen andere bijeenkomsten voor Gameprogrammeren!