Gameprogrammeren: Tiles in Tick Tick Arjan Egges Paul Bergervoet Wouter van Toll
Tick Tick Resterende tijd Exit Speler Wall tile Waterdruppel Background tile Achtergrondlagen
Opbouw van de game Levels worden geladen uit een tekstbestand We hebben verschillende soorten game-objecten De speler Vijanden Waterdruppels Tiles Overlays
Levels en tiles .................... .................X.. ..........########## WWW....WWWW......... ---....####......... WWW................. ###.........WWWWW... ............#####... ....WWW............. ....###............. .1........W.W.W.W.W. #################### Eind van het level Achtergrondtile Waterdruppel Walltile Startpositie van de speler
Na het laden van het level
Levels uit een file lezen Voordelen: Levels worden onafhankelijk van de game-code geproduceerd Makkelijk nieuwe levels toe te voegen Makkelijker om te testen Nadelen: Levels kunnen door iedereen ge-edit worden (makkelijker om vals te spelen) Extra code nodig om levels uit files te lezen Misschien zelfs een speciale level-editor nodig
Levels uit een file lezen private void LoadTiles(string path) { // lees het level in List<string> tekstlines = new List<string>(); StreamReader fileReader = new StreamReader(path); string line = fileReader.ReadLine(); int width = line.Length; while (line != null) tekstlines.Add(line); line = fileReader.ReadLine(); } // maak alle tiles … Een List om alle gelezen regels in te bewaren. We gebruiken de StreamReader klasse. Lees 1 regel. Blijf lezen totdat er geen regels meer zijn.
private void LoadTiles(string path) { // lees het level in … // maak alle tiles TileField tiles = new TileField(textlines.Count - 1, width, 1, "tiles"); this.Add(tiles); tiles.CellWidth = 72; tiles.CellHeight = 55; for (int x = 0; x < width; ++x) for (int y = 0; y < textlines.Count - 1; ++y) Tile t = LoadTile(textlines[y][x], x, y); tiles.Add(t, x, y); } Subklasse van GameObjectGrid Methode die gegeven een karakter een Tile oplevert.
private Tile LoadTile(char tileType, int x, int y) { switch (tileType) { case '.': return new Tile(); case '-': return LoadBasicTile("spr_platform", TileType.Platform); case 'X': return LoadEndTile(x, y); case 'W': return LoadWaterTile(x, y); case '1': return LoadStartTile(x, y); case '#': return LoadBasicTile("spr_wall", TileType.Normal); default: }
Laden van een waterdruppel-tile private Tile LoadWaterTile(int x, int y) { GameObjectList wd = this.Find("waterdrops") as GameObjectList; GameObjectGrid tiles = this.Find("tiles") as GameObjectGrid; WaterDrop w = new WaterDrop(); w.Origin = w.Center; w.Position = new Vector2(x*tiles.CellWidth, y*tiles.CellHeight - 10); w.Position += new Vector2(tiles.CellWidth, tiles.CellHeight) / 2; wd.Add(w); return new Tile(); }