Object Communication (Jewel Jam)

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 6: Controle structuren
Advertisements

Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
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(
Algoritmiek Object-georiënteerd Programmeren
Hoorcollege 12 Afronding Penguin Pairs & overzicht Tick Tick.
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
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.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
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.
Animatie & Game Physics
Partial Classes, Enemies, Exceptions
Game Object Structuren
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
Gameprogrammeren: Expressies
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Basis Gameprogrammeren
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
OOS Object geOrienteerd Software-ontwerp - 5
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Arjan Egges & Paul Bergervoet
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
Implementatie Zoekboom
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Gameprogrammeren: Arrays
Transcript van de presentatie:

Object Communication (Jewel Jam) Arjan Egges & Paul Bergervoet

Hierarchie van game objecten Game object (lijst) Game object Game object (grid) Game object (lijst) Game object Game object Game object

Game object communicatie Hoe ‘praten’ game objecten met elkaar? Verschillende mogelijkheden Ze praten niet met elkaar  alle interactie handelen we af in de game wereld Objecten zoeken zelf uit met wie ze willen praten, en kunnen andere objecten vinden in de game wereld

Wat hebben we nodig? Game objecten moeten toegang hebben tot de gamewereld GameWorld object is beschikbaar als static variabele Game objecten moeten andere game objecten kunnen vinden GameObject instanties hebben een ID nodig

Communicatie via GameWorld object class GameObject { // members … protected string id; public GameObject(int layer = 0, string id = "") { … } public virtual void HandleInput(InputHelper inputHelper) public virtual void Update(GameTime gameTime) public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch) GameObject instanties hebben een ID

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

RowSelectGameObject public override void HandleInput(InputHelper inputHelper) { JewelGrid grid = GameWorld.Find("grid") as JewelGrid; if (inputHelper.KeyPressed(Keys.Up)) selectedRow--; else if (inputHelper.KeyPressed(Keys.Down)) selectedRow++; selectedRow = (int)MathHelper.Clamp(selectedRow,0,grid.Rows-1); this.position = new Vector2(-10, grid.CellHeight*selectedRow - 10); if (inputHelper.KeyPressed(Keys.Left)) grid.ShiftRowLeft(selectedRow); else if (inputHelper.KeyPressed(Keys.Right)) grid.ShiftRowRight(selectedRow); } Grid object zoeken Gebruikmaken van het object.

JewelGrid class JewelGrid : GameObjectGrid { We erven van GameObjectGrid class JewelGrid : GameObjectGrid { public JewelGrid(int rows, int columns, int layer = 0, string id = "") : base(rows, columns, layer, id) } ...

Geldige combinaties vinden Elk juweel heeft drie eigenschappen: kleur, vorm en aantal Encoderen dmv. 3 getallen in verzameling {0, 1, 2} Drie elementen hebben dezelfde eigenschap: 0+0+0=0, of 1+1+1=3 of 2+2+2=6 Som is altijd deelbaar door 3! Drie elementen hebben verschillende eigenschap: 0+1+2=3  ook deelbaar door 3!

Geldige combinaties vinden Hoe vinden we de encodering? We hebben een getal (variation) tussen 0-27 Variation/9  geeft de kleur Variation%9 is dan een getal tussen 0-8 Variation%9/3  geeft de vorm Rest is een getal tussen 0-2  geeft het aantal weer

public bool IsValidCombination(Jewel a, Jewel b, Jewel c) { int curra = a.Variation; int currb = b.Variation; int currc = c.Variation; int divider = 9; for (int i = 0; i < 3; i++) if ((curra/divider + currb/divider + currc/divider)%3 != 0) return false; curra %= divider; currb %= divider; currc %= divider; divider /= 3; } return true;

HandleInput methode (JewelGrid) if (!inputHelper.KeyPressed(Keys.Space)) return; int middleCol = this.Columns / 2, i = 0; ScoreGameObject score = GameWorld.Find("score") as ScoreGameObject; while (i < this.Rows - 2) { if (IsValidCombination((Jewel)grid[middleCol, i], (Jewel)grid[middleCol, i + 1], (Jewel)grid[middleCol, i + 2])) { ReplaceJewel(middleCol, i, -objsize); ReplaceJewel(middleCol, i + 1, -objsize * 2); ReplaceJewel(middleCol, i + 2, -objsize * 3); score.Score += 10; ... i = 0; } else i++; Het score game object zoeken. HandleInput methode (JewelGrid)

public void ReplaceJewel(int x, int y, int newYPosition) { this.Clear(x, y); Jewel s = new Jewel(); this.Add(s); s.Position = new Vector2(x * CellWidth, newYPosition); }

JewelCart

class JewelCart : SpriteGameObject { protected float push, minxpos; public JewelCart(int layer = 0, string id = "") : base("spr_jewelcart", layer, id) velocity.X = 6; push = 50.0f; } public void Push() position.X = MathHelper.Max(position.X - push, minxpos); ... We erven van SpriteGameObject

if (!inputHelper.KeyPressed(Keys.Space)) return; int middleCol = this.Columns / 2, i = 0; while (i < this.Rows - 2) { if (IsValidCombination((Jewel)grid[middleCol, i], (Jewel)grid[middleCol, i + 1], (Jewel)grid[middleCol, i + 2])) ... JewelCart jewelCart = GameWorld.Find("jewelcart") as JewelCart; jewelCart.Push(); i = 0; } else i++;

Paar seconden laten zien