De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Object Communication (Jewel Jam)

Verwante presentaties


Presentatie over: "Object Communication (Jewel Jam)"— Transcript van de presentatie:

1 Object Communication (Jewel Jam)
Arjan Egges & Paul Bergervoet

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

3 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

4 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

5 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

6 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

7 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.

8 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) } ...

9 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!

10 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

11 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;

12 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)

13 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); }

14 JewelCart

15 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

16 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++;

17 Paar seconden laten zien


Download ppt "Object Communication (Jewel Jam)"

Verwante presentaties


Ads door Google