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()); }