/// <summary> /// Removes the current Player from its Team /// </summary> /// <param name="player">Player to remove</param> private void RemovePlayer(Player player) { // Little verification : we ask the user to validate his action if (Choice_Prefabs.CHOICE_REMOVEPLAYER.GetChoice() == 0) { // Asking to remove the Player Instructions instruction = Instructions.Team_RemovePlayer; Net.COMMUNICATION.Send(comm.GetStream(), new Communication(instruction, player)); // We receive whether it work or not if (Net.BOOL.Receive(comm.GetStream())) { // We remove the Player from its Team player.team.players.Remove(player); // We display a message accordingly CONSOLE.WriteLine(ConsoleColor.Green, "Player " + player.name + " removed !"); } else { // We display a message accordingly CONSOLE.WriteLine(ConsoleColor.Red, "Player " + player.name + "was not removed..."); } CONSOLE.WaitForInput(); } }
/// <summary> /// Manage a given Player /// </summary> /// <param name="player">Player we are managing</param> private void ManagePlayer(Player player) { bool continuingPlayer = true; while (continuingPlayer) { // CHOICE // We dynamically create a List containing all the players names List <string> choiceString = new List <string>(); choiceString.Add("See Data"); if (player.hasNewLevel) { choiceString.Add("New Level !"); } // We add another choice : "Remove Player" choiceString.Add("Remove Player"); // We add a last choice: "Go Back" choiceString.Add("Go Back"); // We create the Choice Choice c = new Choice("please Select an action for " + player.name + " (last one = leave) : ", choiceString); int index = c.GetChoice(); // Since we have a dynamic attribution of choices, the on-going program is quite... messy // If it is the first choice : SEE DATA if (index == 0) { Console.WriteLine(player); CONSOLE.WaitForInput(); } // If it is the second choice AND the player has a new level : NEW LEVEL else if (index == 1 && player.hasNewLevel) { PlayerLevelsUp(player); } // If it is the last choice : GO BACK else if (index == choiceString.Count - 1) { continuingPlayer = false; } // Otherwise : REMOVE PLAYER else { RemovePlayer(player); } } }
/// <summary> /// A panel displaying all options a user can perform while logged to the program (Topic / Chat) /// </summary> private void PanelConnected() { bool continuingConnection = true; while (continuingConnection) { int choice = Choice_Prefabs.CHOICE_CONNECTED.GetChoice(); switch (choice) { // COACH case 0: DisplayCoach(userData); break; // LEAGUE case 1: CONSOLE.WriteLine(ConsoleColor.Magenta, "Not yet implemented !"); break; case 2: CONSOLE.WriteLine(ConsoleColor.Magenta, "Not yet implemented !"); break; // TEAM case 3: PanelTeams(); break; case 4: NewTeam(); break; // LOG OUT case 5: LogOut(); continuingConnection = false; break; default: Console.WriteLine("Error at the Main menu"); break; } CONSOLE.WaitForInput(); } }
/// <summary> /// A panel displaying all options a user can perform while logged to the program (Topic / Chat) /// </summary> private void PanelTeam(Team team) { bool continuingTeam = true; while (continuingTeam) { int choice = Choice_Prefabs.CHOICE_TEAM.GetChoice(); switch (choice) { // display data case 0: DisplayTeam(team); break; // manage Players case 1: ManagePlayers(team); break; // buy Players case 2: NewPlayer(team); break; // Go Back case 3: continuingTeam = false; break; default: Console.WriteLine("Error at the detailled Team menu"); break; } CONSOLE.WaitForInput(); } }
/// <summary> /// When a Player levels up /// </summary> /// <param name="player"></param> private void PlayerLevelsUp(Player player) { // Asking to level up a Player Instructions instruction = Instructions.Player_LevelUp; Net.COMMUNICATION.Send(comm.GetStream(), new Communication(instruction, player)); // We receive / define some variables int dice1 = Net.INT.Receive(comm.GetStream()); int dice2 = Net.INT.Receive(comm.GetStream()); dice1 = 5; dice2 = 6; List <EffectType> types = EffectStuff.GetEffectTypesForLevelUp(player.role, dice1, dice2); // There are 2 steps : // PART 1 - display some useful info to the user // PART 2 - Wait for the user to choose a new Effect for his Player // PART 1 - display some useful info to the user Console.Clear(); Console.WriteLine("New level !\n\n\n\nyou rolled {0} - {1} !", dice1, dice2); Console.WriteLine("You can level up in any category :"); types.ForEach(type => Console.WriteLine(" - " + type)); CONSOLE.WaitForInput(); // PART 2 - Wait for the user to choose a new Effect for his Player // We initialize our variables List <List <Effect> > effects = EffectStuff.GetEffectsForLevelUp(types); bool continuing = true; Effect chosenEffect = effects[0][0]; int currentType = 0; int currentEffect = 0; // While the user doesn't press Enter, the loop continues do { // We clear the console, and display a given message Console.Clear(); // We display all our Types for (int t = 0; t < types.Count; t++) { // Display the current EffectType Console.WriteLine("\n" + types[t]); // Display all its Effects (with an arrow if it is the current one) for (int e = 0; e < effects[t].Count; e++) { // Initialize some variables Effect effect = effects[t][e]; string arrow = (currentType == t && currentEffect == e) ? "\t --> " : "\t "; ConsoleColor color = (player.effectsAll.Contains(effect)) ? ConsoleColor.Red : ConsoleColor.Blue; // Display the result CONSOLE.WriteLine(color, arrow + effect.name()); } } // We read the input ConsoleKeyInfo input = Console.ReadKey(); bool goToLastEffect = false; // If it is an Array key (UP or DOWN), we modify our index accordingly if (input.Key == ConsoleKey.UpArrow) { currentEffect--; // If the index goes too low, we change type if (currentEffect < 0) { currentType--; goToLastEffect = true; } } if (input.Key == ConsoleKey.DownArrow) { currentEffect++; // If the index goes too high, we change type if (currentEffect > effects[currentType].Count - 1) { currentType++; currentEffect = 0; } } // If it is a LEFT Array key : go to the previous type if (input.Key == ConsoleKey.LeftArrow) { currentType--; currentEffect = 0; } // If it is a RIGHT Array key : go to the next type if (input.Key == ConsoleKey.RightArrow) { currentType++; currentEffect = 0; } // If the type is too high / too low, we change it accordingly if (currentType < 0) { currentType = types.Count - 1; } if (currentType > types.Count - 1) { currentType = 0; } // If needed : we replace the effect counter to the last index of the current list if (goToLastEffect) { currentEffect = effects[currentType].Count - 1; } // We check if we end the loop if (input.Key == ConsoleKey.Enter) { // We set the chosen Effect chosenEffect = effects[currentType][currentEffect]; Console.Clear(); // We display a message, whether the Effect can be chosen or not if (player.effectsAll.Contains(chosenEffect)) { CONSOLE.WriteLine(ConsoleColor.Red, "You cannot choose the Effect " + chosenEffect.name() + " :\n\nyour Player already has it !!"); CONSOLE.WaitForInput(); } else { continuing = false; } } }while (continuing); // Small message CONSOLE.WriteLine(ConsoleColor.Green, "You have chosen the Effect " + chosenEffect.name() + " !!"); // Sending the chosen Effect Net.EFFECT.Send(comm.GetStream(), chosenEffect); // If the Effect was validated : add it to the Player if (Net.BOOL.Receive(comm.GetStream())) { CONSOLE.WriteLine(ConsoleColor.Green, "\n\n\tEffect validated !!"); player.effects.Add(chosenEffect); } else { CONSOLE.WriteLine(ConsoleColor.Red, "\n\n\tEffect refused..."); } CONSOLE.WaitForInput(); }
/// <summary> /// Creates a new Player /// </summary> /// <param name="team">Team the Player is in</param> private void NewPlayer(Team team) { bool continueNewPlayer = true; bool continueNewPlayerInputs = true; string errorMessage = ""; do { // CHOICE // We dynamically create a List containing all the roles names List <string> choiceString = new List <string>(); team.race.roles().ForEach(role => choiceString.Add(role.ToStringCustom())); // We add as a last choice the option to "Cancel" choiceString.Add("Cancel"); // We create the Choice Choice c = new Choice("please Select a Role (last one = cancel) : ", choiceString); int index = c.GetChoice(); if (index != choiceString.Count - 1) { // We save the Role Role role = team.race.roles()[index]; // if the role chosen is too cost-expensive if (role.price() > team.money) { CONSOLE.WriteLine(ConsoleColor.Red, PrefabMessages.NOT_ENOUGH_MONEY); CONSOLE.WaitForInput(); } // if the player can afford it : continue else { // Inputs do { Console.Clear(); // Displays a message if the credentials are incorrect CONSOLE.WriteLine(ConsoleColor.Red, errorMessage); // NAME Console.Write("\n Please enter the {0}'s name (empty = go back) : ", role.name()); string name = Console.ReadLine(); // All the fields are empty : go back to the menu if (name.Length == 0) { continueNewPlayerInputs = false; } // If at least one field is too long : ERROR else if (name.Length > PrefabMessages.INPUT_MAXSIZE_COACH_NAME) { errorMessage = PrefabMessages.INCORRECT_INPUT_SIZE; } // If at least one field has one incorrect character : ERROR else if (!Util.CorrectInput(name)) { errorMessage = PrefabMessages.INCORRECT_INPUT_CHARACTER; } // Otherwise : verify with the server else { // Sending the new Player Instructions instruction = Instructions.Team_AddPlayer; Player newPlayer = new Player(name, role, team); Net.COMMUNICATION.Send(comm.GetStream(), new Communication(instruction, newPlayer)); // We receive the id of the Player from the server Guid idReceived = Net.GUID.Receive(comm.GetStream()); // We see if the id received is valid if (idReceived != Guid.Empty) { // We set the received id newPlayer.id = idReceived; // We add the Player to the user's team team.players.Add(newPlayer); // We make the transaction (the team has less money now) team.money -= role.price(); // We display a success message CONSOLE.WriteLine(ConsoleColor.Green, PrefabMessages.PLAYER_CREATION_SUCCESS); // Ending the loops continueNewPlayerInputs = false; continueNewPlayer = false; } else { errorMessage = PrefabMessages.PLAYER_CREATION_FAILURE; } } }while (continueNewPlayerInputs); } } else { continueNewPlayer = false; } }while (continueNewPlayer); }