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