Esempio n. 1
0
        public static bool SelectOption(Character character)
        {
            ConsoleKey key = Console.ReadKey(true).Key;

            while (key != ConsoleKey.Escape)
            {
                switch (key)
                {
                case ConsoleKey.DownArrow:
                case ConsoleKey.S:
                {
                    RemoveHighlight(CurrentOption);
                    CurrentOption = (ImproveStatsOption)((int)(CurrentOption + 1) % NumberOfOptions);
                    HighlightOption(CurrentOption, character);
                }
                break;

                case ConsoleKey.UpArrow:
                case ConsoleKey.W:
                {
                    RemoveHighlight(CurrentOption);
                    CurrentOption = CurrentOption - 1 < 0
                             ? ImproveStatsOption.Back
                            : (ImproveStatsOption)(CurrentOption - 1);
                    HighlightOption(CurrentOption, character);
                }
                break;

                case ConsoleKey.Enter:
                {
                    var ctx = new ConsoleWorldContext();
                    if (character.Points <= 0 && CurrentOption.ToString() != "Back")
                    {
                        Console.SetCursorPosition(40, 5);
                        Console.WriteLine("You don't have enough points for that!");
                        key = Console.ReadKey(true).Key;

                        continue;
                    }
                    switch (CurrentOption.ToString())
                    {
                    case "MaxHp":
                        character.MaxHp += 1;
                        character.Points--;
                        DrawStats(character, "MaxHp");
                        break;

                    case "MaxMp":
                        character.MaxMp += 1;
                        character.Points--;
                        DrawStats(character, "MaxMp");
                        break;

                    case "Attack":
                        character.Attack += 1;
                        character.Points--;
                        DrawStats(character, "Attack");
                        break;

                    case "MagicAttack":
                        character.MagicAttack += 1;
                        character.Points--;
                        DrawStats(character, "MagicAttack");
                        break;

                    case "Defense":
                        character.Defense += 1;
                        character.Points--;
                        DrawStats(character, "Defense");
                        break;

                    case "MagicDefense":
                        character.MagicDefense += 1;
                        character.Points--;
                        DrawStats(character, "MagicDefense");
                        break;

                    case "Accuracy":
                        character.Accuracy += 1;
                        character.Points--;
                        DrawStats(character, "Accuracy");
                        break;

                    case "Evade":
                        character.Evade += 1;
                        character.Points--;
                        DrawStats(character, "Evaded");
                        break;

                    case "Back":
                        return(true);
                    }

                    ctx.SaveChanges();
                }
                break;
                }

                Console.SetCursorPosition(40, 5);
                Console.WriteLine(new string(' ', "You don't have enough points for that!".Length));
                key = Console.ReadKey(true).Key;
            }

            return(false);
        }
        private static void NameCharacter()
        {
            bool characterIsValid = false;

            while (!characterIsValid)
            {
                Console.CursorVisible = true;
                Console.SetCursorPosition(TextX, TextY);
                Console.Write("Character Name: ");
                StringBuilder sb = new StringBuilder();
                char          ch = Console.ReadKey(true).KeyChar;
                while (ch == BackspaceCode)
                {
                    ch = Console.ReadKey(true).KeyChar;
                }
                while (ch != EnterCode)
                {
                    int backspace = TextX + "Character Name: ".Length + sb.Length;
                    if (sb.Length < MaxNameLength)
                    {
                        if (ch != BackspaceCode)
                        {
                            Console.Write(ch);
                        }
                        if (ch == BackspaceCode && sb.Length >= 1)
                        {
                            sb.Remove(sb.Length - 1, 1);
                            Console.SetCursorPosition(backspace - 1, TextY);
                            Console.Write(" ");
                            Console.SetCursorPosition(backspace - 1, TextY);
                        }
                        else
                        {
                            sb.Append(ch);
                        }
                    }
                    else if (sb.Length == MaxNameLength)
                    {
                        if (ch == BackspaceCode)
                        {
                            sb.Remove(sb.Length - 1, 1);
                            Console.SetCursorPosition(TextX + "Character Name: ".Length + MaxNameLength - 1, TextY);
                            Console.Write(" ");
                            Console.SetCursorPosition(TextX + "Character Name: ".Length + sb.Length, TextY);
                        }
                    }
                    ch = Console.ReadKey(true).KeyChar;
                }

                characterName = sb.ToString();

                if (characterName.Length > MinNameLength)
                {
                    var ctx = new ConsoleWorldContext();

                    if (ctx.Characters.Any(c => c.Name == characterName))
                    {
                        // TODO: Check if character exist
                        characterIsValid = false;
                    }
                    else
                    {
                        characterIsValid = true;

                        Console.SetCursorPosition(TextX, TextY + 1);
                        Console.WriteLine(new string(' ', "Invalid character name! Character name should be at least 3 symbols!".Length));
                    }
                }
                else
                {
                    Console.SetCursorPosition(TextX + "Character Name: ".Length, TextY);
                    Console.Write(new string(' ', MaxNameLength));
                    Console.SetCursorPosition(TextX, TextY + 1);
                    Console.WriteLine("Invalid character name! Character name should be at least 3 symbols!");
                }
            }

            Console.CursorVisible = false;
            Console.SetCursorPosition(TextX, TextY + 1);
            Console.WriteLine("Choose a class: ");
            HighlightClass(characterClass.ToString());
        }