From 9a1c6646dd9292f97c7ed69f246181799df67326 Mon Sep 17 00:00:00 2001 From: Colin McMillen Date: Wed, 15 Jan 2020 16:45:55 -0500 Subject: [PATCH] properly handle non-rectangular input string[]s GitOrigin-RevId: eb580f2e9c5a6d93827982240fd295ba30fdb0c4 --- Shared/World.cs | 67 ++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/Shared/World.cs b/Shared/World.cs index 76e75cb..1a3ce07 100644 --- a/Shared/World.cs +++ b/Shared/World.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; -using System; using System.Collections.Generic; +using System.Linq; namespace SemiColinGames { enum Terrain { @@ -111,41 +111,44 @@ namespace SemiColinGames { "...................................................................] [.............] [..............................................................] [......................................................." }; public World(Texture2D texture) { - width = worldDesc[0].Length; + width = worldDesc.AsQueryable().Max(a => a.Length); height = worldDesc.Length; + Debug.WriteLine("world size: {0}x{1}", width, height); tiles = new Tile[width, height]; for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { - Terrain terrain; - switch (worldDesc[j][i]) { - case '=': - terrain = Terrain.Grass; - break; - case '<': - terrain = Terrain.GrassL; - break; - case '>': - terrain = Terrain.GrassR; - break; - case '.': - terrain = Terrain.Rock; - break; - case '[': - terrain = Terrain.RockL; - break; - case ']': - terrain = Terrain.RockR; - break; - case '~': - terrain = Terrain.Water; - break; - case 'X': - terrain = Terrain.Block; - break; - case ' ': - default: - terrain = Terrain.Empty; - break; + Terrain terrain = Terrain.Empty; + if (i < worldDesc[j].Length) { + switch (worldDesc[j][i]) { + case '=': + terrain = Terrain.Grass; + break; + case '<': + terrain = Terrain.GrassL; + break; + case '>': + terrain = Terrain.GrassR; + break; + case '.': + terrain = Terrain.Rock; + break; + case '[': + terrain = Terrain.RockL; + break; + case ']': + terrain = Terrain.RockR; + break; + case '~': + terrain = Terrain.Water; + break; + case 'X': + terrain = Terrain.Block; + break; + case ' ': + default: + terrain = Terrain.Empty; + break; + } } var position = new Rectangle(i * TileSize, j * TileSize, TileSize, TileSize); tiles[i, j] = new Tile(texture, terrain, position);