private static void PrintMap(Map map) { var foodTiles = map.FoodPositions.Select(p => new PrintTile(p, "F", ConsoleColor.Red)); var obstacleTiles = map.ObstaclePositions.Select(p => new PrintTile(p, "*", ConsoleColor.Yellow)); var playerTiles = map.Snakes.Where(p => p.IsAlive) .SelectMany(p => { var headPosition = p.Positions.First(); var color = PlayerColors.GetColor(p.Id); var head = new PrintTile(headPosition, "@", color); return(new[] { head }.Concat(p.Positions.Skip(1).Select(pos => new PrintTile(pos, "#", color)))); }); Console.WriteLine(new string('-', map.Width + 2)); int rowIndex = 0; foreach (var row in obstacleTiles.Concat(playerTiles).Concat(foodTiles).GroupBy(t => t.Position.Y).OrderBy(x => x.Key)) { var stringBuilder = new StringBuilder(); Console.ForegroundColor = ConsoleColor.White; while (rowIndex++ < row.Key) { stringBuilder.Append('|').Append(' ', map.Width).Append('|').AppendLine(); } Console.Write(stringBuilder.ToString()); Console.ForegroundColor = ConsoleColor.White; Console.Write('|'); int column = 0; foreach (var tile in row.OrderBy(p => p.Position.ToIndex(map.Width))) { int diff = tile.Position.X - column; column = tile.Position.X + 1; if (diff < 0) { continue; } Console.ForegroundColor = tile.Color; Console.Write(new StringBuilder().Append(' ', diff).Append(tile.Character)); } Console.ForegroundColor = ConsoleColor.White; Console.Write(new StringBuilder().Append(' ', map.Width - column).AppendLine("|")); } var sb = new StringBuilder(); Console.ForegroundColor = ConsoleColor.White; while (rowIndex++ < map.Height) { sb.Append('|').Append(' ', map.Width).Append('|').AppendLine(); } sb.Append('-', map.Width + 2).AppendLine(); Console.Write(sb.ToString()); }
public UrbTile[] GetBorderingTiles(UrbTile Tile, bool GetLinked = false, int Distance = 0) { if (X < 2 && Y < 2 && Distance == 0) { return(Tile.GetAdjacent(GetLinked)); } Vector2 Voffset = GetOffset(); int Xoffset = (int)Voffset.x; int Yoffset = (int)Voffset.y; List <UrbTile> ReturnList = new List <UrbTile>(); for (int i = -1; i <= X; i++) { UrbTile CheckedTile = Tile.GetRelativeTile(i + Xoffset, Yoffset - (1 + Distance)); if (CheckedTile == null) { continue; } ReturnList.Add(CheckedTile); } for (int i = 0; i <= Y; i++) { UrbTile CheckedTile = Tile.GetRelativeTile(X + Xoffset + Distance, i + Yoffset); if (CheckedTile == null) { continue; } ReturnList.Add(CheckedTile); } for (int i = -1; i <= X; i++) { UrbTile CheckedTile = Tile.GetRelativeTile(i + Xoffset, Y + Yoffset + Distance); if (CheckedTile == null) { continue; } ReturnList.Add(CheckedTile); } for (int i = 0; i < Y; i++) { UrbTile CheckedTile = Tile.GetRelativeTile(Xoffset - (1 + Distance), Yoffset + i); if (CheckedTile == null) { continue; } ReturnList.Add(CheckedTile); } if (GetLinked) { UrbTile[] Tiles = GetAllPrintTiles(Tile); foreach (UrbTile PrintTile in Tiles) { if (PrintTile != null) { ReturnList.AddRange(PrintTile.GetLinked()); } } } return(ReturnList.ToArray()); }