public void Initialize() { // Initialize tiles tiles = new Tile[width, height]; for (var y = 0; y < height; ++y) { for (var x = 0; x < width; ++x) { engine.AddTile(null, new Position(x, y)); } } // Initialize neighbors for (var y = 0; y < height; ++y) { for (var x = 0; x < width; ++x) { var targetPosition = new Position(x, y); Tile targetTile = GetTileAt(x, y); targetTile.neighbors = new List <Tile>(from delta in directionDeltas where Inside(targetPosition + delta) select tiles[x + delta.x, y + delta.y]); } } }