private void DrawRooms(RogueLevel level)
		{
			foreach (var room in level.Rooms)
			{
				for (var x = 0; x < room.Size.X; x++)
				{
					for (var y = 0; y < room.Size.Y; y++)
					{
						ITile tile;
						Coordinate coordinate = new Coordinate(
							room.Position.X + x,
							room.Position.Y + y);

						if (x == 0 || y == 0 || x == room.Size.X - 1 || y == room.Size.Y - 1)
						{
							tile = new Tile("wall", coordinate, true).AddTag("visionblocker");
						}
						else
						{
							tile = new Tile("floor", coordinate);
						}

						level.SetTile(coordinate, tile);
					}
				}
			}
		}
		private void DrawCorridor(RogueLevel level, RogueLevel.Room first, RogueLevel.Room second)
		{
			Coordinate startPoint, endPoint, delta, turnDelta;
			RogueLevel.Room from, to;
			bool right;
			int distance;
			int turnPoint;
			int turnLength;

			from = first.Index < second.Index ? first : second;
			to = first.Index < second.Index ? second : first;
			right = from.Index + 1 == to.Index;

			if (right)
			{
				startPoint = new Coordinate(
					from.Position.X + from.Size.X - 1,
					from.Position.Y + DmRandom.Next(from.Size.Y - 2) + 1);
				endPoint = new Coordinate(
					to.Position.X,
					to.Position.Y + DmRandom.Next(to.Size.Y - 2) + 1);

				delta = new Coordinate(1, 0);
				distance = System.Math.Abs(startPoint.X - endPoint.X) - 1;
				turnDelta = new Coordinate(0, startPoint.Y < endPoint.Y ? 1 : -1);
				turnLength = System.Math.Abs(startPoint.Y - endPoint.Y);
			}
			else
			{
				// downward corridor
				startPoint = new Coordinate(
					from.Position.X + DmRandom.Next(from.Size.X - 2) + 1,
					from.Position.Y + from.Size.Y - 1);
				endPoint = new Coordinate(
					to.Position.X + DmRandom.Next(to.Size.X - 2) + 1,
					to.Position.Y);

				delta = new Coordinate(0, 1);
				distance = System.Math.Abs(startPoint.Y - endPoint.Y) - 1;
				turnDelta = new Coordinate(startPoint.X < endPoint.X ? 1 : -1, 0);
				turnLength = System.Math.Abs(startPoint.X - endPoint.X);
			}

			turnPoint = DmRandom.Next(1, distance - 1);

			var current = new Coordinate(startPoint);
			System.Action drawAtCurrent = () =>
				level.SetTile(current, new Tile("passage", current));

			while (distance > 0)
			{
				current += delta;

				if (distance == turnPoint)
				{
					while (turnLength-- > 0)
					{
						drawAtCurrent();
						current += turnDelta;
					}
				}

				drawAtCurrent();
				distance--;
			}

			var startDoor = new Tile("door", startPoint);
			startDoor.AddTag(DmRandom.Next(2) == 0
				? "open"
				: "closed");

			level.SetTile(startPoint, startDoor);

			var endDoor = new Tile("door", endPoint);
			endDoor.AddTag(DmRandom.Next(2) == 0
				? "open"
				: "closed");

			level.SetTile(
				endPoint,
				endDoor);
		}