Esempio n. 1
0
 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();
     }
 }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
        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;
                }
            }
        }
Esempio n. 5
0
        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();
                            }
                        }
                    }
                }
            }
        }