public static void Start(string mapfile) { Renderer.Initialize(); PlayerPosition = new Point(0, 0); Health = 100; Inventory = new Dictionary <int, Item>(); HandSlots = new int[5]; MapUtil.Load(mapfile); HandCraftingRecipes = new Recipe[] { new Recipe(new[] { new Item(4, '▓') }, new Item(1, '◰')), new Recipe(new[] { new Item(8, '█') }, new Item(1, '◘')) }; CraftingRecipes = new Recipe[] { new Recipe(new[] { new Item(4, '▓') }, new Item(1, '◰')), new Recipe(new[] { new Item(8, '█') }, new Item(1, '◘')), new Recipe(new[] { new Item(8, '▓') }, new Item(1, '⊠')), new Recipe(new[] { new Item(2, '▓') }, new Item(2, '|')), new Recipe(new[] { new Item(2, '|'), new Item(3, '▓') }, new Item(1, '┬')), new Recipe(new[] { new Item(2, '|'), new Item(3, '█') }, new Item(1, '┯')), new Recipe(new[] { new Item(2, '|'), new Item(3, '▃') }, new Item(1, '╤')), new Recipe(new[] { new Item(2, '|'), new Item(2, '█') }, new Item(1, '┍')), new Recipe(new[] { new Item(2, '|'), new Item(2, '▃') }, new Item(1, '╒')), new Recipe(new[] { new Item(1, '|'), new Item(2, '▃') }, new Item(1, '╀')), new Recipe(new[] { new Item(1, '|'), new Item(2, '◆') }, new Item(1, '╬')), new Recipe(new[] { new Item(2, '|'), new Item(4, '§') }, new Item(1, 'D')), new Recipe(new[] { new Item(1, '|'), new Item(1, '▃') }, new Item(4, '↟')), new Recipe(new[] { new Item(2, 'Y') }, new Item(1, '§')), new Recipe(new[] { new Item(10, '‖') }, new Item(1, '§')), new Recipe(new[] { new Item(2, '§') }, new Item(1, '▦')), new Recipe(new[] { new Item(4, '▦') }, new Item(1, '⊑')), }; FurnaceRecipes = new Recipe[] { new Recipe(new[] { new Item(1, '▓') }, new Item(1, '⊚')), new Recipe(new[] { new Item(1, '⊡'), new Item(1, '⊚') }, new Item(1, '▃')), new Recipe(new[] { new Item(1, 'q'), new Item(1, '⊚') }, new Item(1, 'Q')), }; Renderer.MapSection = new Point(PlayerPosition.X, PlayerPosition.Y); Renderer.PlayerScreenPosition = new Point(0, 0); WorldName = mapfile; Running = true; Renderer.RenderMap(); Renderer.DrawPlayer(); DrawInventorySlots(); DrawHealth(); while (Running) { Cycle(); } }
public static void Crafting(Recipe[] recs, string utilTitle) { Console.ForegroundColor = ConsoleColor.Yellow; Console.SetCursorPosition(3, 1); Console.Write("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"); Console.SetCursorPosition(3, 2); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(5, 2); Console.Write(utilTitle); Console.SetCursorPosition(3, 3); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 4); Console.Write("\u2551 \u2551"); int rw = 0; int le = 5; if (recs.Length < le) { le = recs.Length; } for (int i = rw; i < rw + le; i++) { Console.SetCursorPosition(3, 5 + i - rw); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(5, 5 + i - rw); Console.Write(recs[i].Result.Glyph + " " + recs[i].Result.Name); } Console.SetCursorPosition(3, 5 + le); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 6 + le); Console.Write("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"); int ci = 0; int sci = 0; for (; ;) { Console.ForegroundColor = ConsoleColor.Yellow; for (int i = rw; i < rw + le; i++) { Console.SetCursorPosition(3, 5 + i - rw); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(7, 5 + i - rw); string strIng = ""; foreach (Item it in recs[i].Ingredients) { strIng += it.Count.ToString() + it.Glyph.ToString() + " "; } Console.Write(recs[i].Result.Glyph + " " + recs[i].Result.Name + " (" + strIng.Remove(strIng.Length - 1) + ")"); } for (int i = 0; i < le; i++) { Console.SetCursorPosition(5, i + 5); Console.Write(" "); } Console.SetCursorPosition(5, sci + 5); Console.Write("\u00BB"); ConsoleKey k = Console.ReadKey(true).Key; if (k == ConsoleKey.DownArrow) { ci += 1; sci += 1; if (sci == le) { rw++; sci = le - 1; } if (ci == recs.Length) { ci = 0; rw = 0; sci = 0; } } else if (k == ConsoleKey.UpArrow) { ci -= 1; sci -= 1; if (sci == -1) { rw--; sci = 0; } if (ci == -1) { ci = recs.Length - 1; rw = recs.Length - le; sci = le - 1; } } else if (k == ConsoleKey.Enter) { Renderer.RenderMap(); Renderer.DrawPlayer(); Craft(recs[ci]); Renderer.RenderMap(); Renderer.DrawPlayer(); Console.ForegroundColor = ConsoleColor.Yellow; Console.SetCursorPosition(3, 1); Console.Write("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"); Console.SetCursorPosition(3, 2); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(5, 2); Console.Write(utilTitle); Console.SetCursorPosition(3, 3); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 4); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 5 + le); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 6 + le); Console.Write("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"); } else if (k == ConsoleKey.Escape) { Renderer.RenderMap(); Renderer.DrawPlayer(); return; } } }
public static void ShowInventory(Dictionary <int, Item> inv) { Console.ForegroundColor = ConsoleColor.Yellow; Console.SetCursorPosition(3, 1); Console.Write("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"); Console.SetCursorPosition(3, 2); Console.Write("\u2551 Inventory \u2551"); Console.SetCursorPosition(3, 3); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 4); Console.Write("\u2551 \u2551"); List <Item> its = new List <Item>(); foreach (KeyValuePair <int, Item> i in inv) { its.Add(i.Value); } if (its.Count == 0) { Renderer.RenderMap(); Renderer.DrawPlayer(); return; } for (int i = 5; i < 5 + inv.Count; i++) { Console.SetCursorPosition(3, i); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(4, i); Console.Write(" " + its[i - 5].Glyph + " " + its[i - 5].Count + " x " + its[i - 5].Name + ((its[i - 5].Durability == -1) ? "" : " (" + its[i - 5].Durability + " D)")); } Console.SetCursorPosition(3, 5 + its.Count); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 6 + its.Count); Console.Write("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"); int ci = 0; for (; ;) { Console.ForegroundColor = ConsoleColor.Yellow; for (int i = 0; i < its.Count; i++) { Console.SetCursorPosition(5, i + 5); Console.Write(" "); } Console.SetCursorPosition(5, ci + 5); Console.Write("\u00BB"); ConsoleKey k = Console.ReadKey(true).Key; if (k == ConsoleKey.DownArrow) { ci += 1; if (ci == its.Count) { ci = 0; } } else if (k == ConsoleKey.UpArrow) { ci -= 1; if (ci == -1) { ci = its.Count - 1; } } else if (k == ConsoleKey.D1) { HandSlots[0] = GetInventoryID(its[ci].Glyph); DrawInventorySlots(); } else if (k == ConsoleKey.D2) { HandSlots[1] = GetInventoryID(its[ci].Glyph); DrawInventorySlots(); } else if (k == ConsoleKey.D3) { HandSlots[2] = GetInventoryID(its[ci].Glyph); DrawInventorySlots(); } else if (k == ConsoleKey.D4) { HandSlots[3] = GetInventoryID(its[ci].Glyph); DrawInventorySlots(); } else if (k == ConsoleKey.D5) { HandSlots[4] = GetInventoryID(its[ci].Glyph); DrawInventorySlots(); } else if (k == ConsoleKey.Escape) { Renderer.RenderMap(); Renderer.DrawPlayer(); return; } } }
public static void Menu() { Console.ForegroundColor = ConsoleColor.Yellow; Console.SetCursorPosition(3, 1); Console.Write("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"); Console.SetCursorPosition(3, 2); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 3); Console.Write("\u2551 Game Paused \u2551"); Console.SetCursorPosition(3, 4); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 5); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 6); Console.Write("\u2551 Resume game \u2551"); Console.SetCursorPosition(3, 7); Console.Write("\u2551 Save game \u2551"); Console.SetCursorPosition(3, 8); Console.Write("\u2551 Exit \u2551"); Console.SetCursorPosition(3, 9); Console.Write("\u2551 \u2551"); Console.SetCursorPosition(3, 10); Console.Write("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"); int ci = 0; for (; ;) { Console.ForegroundColor = ConsoleColor.Yellow; for (int i = 0; i < 3; i++) { Console.SetCursorPosition(5, i + 6); Console.Write(" "); } Console.SetCursorPosition(5, ci + 6); Console.Write("\u00BB"); ConsoleKey k = Console.ReadKey(true).Key; if (k == ConsoleKey.DownArrow) { ci += 1; if (ci == 3) { ci = 0; } } else if (k == ConsoleKey.UpArrow) { ci -= 1; if (ci == -1) { ci = 2; } } else if (k == ConsoleKey.Enter) { if (ci == 0) { Renderer.RenderMap(); Renderer.DrawPlayer(); return; } else if (ci == 1) { MapUtil.Save(WorldName); Renderer.RenderMap(); Renderer.DrawPlayer(); return; } else if (ci == 2) { Running = false; return; } } else if (k == ConsoleKey.Escape) { Renderer.RenderMap(); Renderer.DrawPlayer(); return; } } }
public static void UpdatePlayer() { try { LastInput = Console.ReadKey(true).Key; Console.ForegroundColor = ConsoleColor.Green; HandleBreakPlace(); Console.SetCursorPosition(Renderer.PlayerScreenPosition.X, Renderer.PlayerScreenPosition.Y); switch (LastInput) { case ConsoleKey.Escape: Menu(); break; case ConsoleKey.I: ShowInventory(Inventory); break; case ConsoleKey.C: Crafting(HandCraftingRecipes, "Crafting"); break; case ConsoleKey.W: if (!Obstacle(Renderer.Screen[Renderer.PlayerScreenPosition.Y - 1][Renderer.PlayerScreenPosition.X])) { Console.Write(Renderer.Screen[Renderer.PlayerScreenPosition.Y][Renderer.PlayerScreenPosition.X]); PlayerPosition.Y -= 1; } break; case ConsoleKey.S: if (PlayerPosition.Y < Map.Length - 1) { if (!Obstacle(Renderer.Screen[Renderer.PlayerScreenPosition.Y + 1][Renderer.PlayerScreenPosition.X])) { Console.Write(Renderer.Screen[Renderer.PlayerScreenPosition.Y][Renderer.PlayerScreenPosition.X]); PlayerPosition.Y += 1; } } break; case ConsoleKey.A: if (!Obstacle(Renderer.Screen[Renderer.PlayerScreenPosition.Y][Renderer.PlayerScreenPosition.X - 1])) { Console.Write(Renderer.Screen[Renderer.PlayerScreenPosition.Y][Renderer.PlayerScreenPosition.X]); PlayerPosition.X -= 1; } break; case ConsoleKey.D: if (PlayerPosition.X < Map[0].Length - 1) { if (!Obstacle(Renderer.Screen[Renderer.PlayerScreenPosition.Y][Renderer.PlayerScreenPosition.X + 1])) { Console.Write(Renderer.Screen[Renderer.PlayerScreenPosition.Y][Renderer.PlayerScreenPosition.X]); PlayerPosition.X += 1; } } break; } if (PlayerPosition.X < Map[0].Length - 1) { Renderer.PlayerScreenPosition.X = PlayerPosition.X - Renderer.MapSection.X; } else { PlayerPosition.X = Map[0].Length - 2; } if (PlayerPosition.Y < Map.Length - 1) { Renderer.PlayerScreenPosition.Y = PlayerPosition.Y - Renderer.MapSection.Y; } else { PlayerPosition.Y = Map.Length - 2; } Renderer.DrawPlayer(); } catch (Exception ex) { if (ex.GetType().ToString() == "System.IndexOutOfRangeException") { if (PlayerPosition.Y > 0) { if (LastInput == ConsoleKey.W || LastInput == ConsoleKey.S) { if (PlayerPosition.Y == Renderer.MapSection.Y) { if (!Obstacle(Map[PlayerPosition.Y - 1][PlayerPosition.X])) { Renderer.MapSection.Y -= 1; Renderer.PlayerScreenPosition.Y = 0; PlayerPosition.Y -= 1; } for (int i = 0; i < 3; i++) { if (Renderer.MapSection.Y > 0) { Renderer.MapSection.Y -= 1; Renderer.PlayerScreenPosition.Y += 1; } } Renderer.RenderMap(); Renderer.DrawPlayer(); } else if (PlayerPosition.Y == Renderer.MapSection.Y + Renderer.MapSecHeight - 1) { if (!Obstacle(Map[PlayerPosition.Y + 1][PlayerPosition.X])) { Renderer.MapSection.Y += 1; Renderer.PlayerScreenPosition.Y = Renderer.MapSecHeight - 1; PlayerPosition.Y += 1; } for (int i = 0; i < 3; i++) { if (Renderer.MapSection.Y + Renderer.MapSecHeight < Map.Length - 1) { Renderer.MapSection.Y += 1; Renderer.PlayerScreenPosition.Y -= 1; } } Renderer.RenderMap(); Renderer.DrawPlayer(); } } } if (PlayerPosition.X > 0) { if (LastInput == ConsoleKey.A || LastInput == ConsoleKey.D) { if (PlayerPosition.X == Renderer.MapSection.X) { if (!Obstacle(Map[PlayerPosition.Y][PlayerPosition.X - 1])) { Renderer.MapSection.X -= 1; Renderer.PlayerScreenPosition.X = 0; PlayerPosition.X -= 1; } for (int i = 0; i < 3; i++) { if (Renderer.MapSection.X > 0) { Renderer.MapSection.X -= 1; Renderer.PlayerScreenPosition.X += 1; } } Renderer.RenderMap(); Renderer.DrawPlayer(); } else if (PlayerPosition.X == Renderer.MapSection.X + Renderer.MapSecWidth - 1) { if (!Obstacle(Map[PlayerPosition.Y][PlayerPosition.X + 1]) && PlayerPosition.X < Map[0].Length - 1) { Renderer.MapSection.X += 1; Renderer.PlayerScreenPosition.X = Renderer.MapSecWidth - 1; PlayerPosition.X += 1; } for (int i = 0; i < 3; i++) { if (Renderer.MapSection.X + Renderer.MapSecWidth < Map[0].Length - 1) { Renderer.MapSection.X += 1; Renderer.PlayerScreenPosition.X -= 1; } } Renderer.RenderMap(); Renderer.DrawPlayer(); } } } } } }