/// <summary> /// Provides the core game loop functionality of the game and changes the state of the game based on input from user. /// </summary> public void runGameSequence() { ROLE winner = ROLE.None; string playerToMurder = ""; string playerToHeal = ""; string playerToAccuse = ""; //ROLE returned by roleHasWon() will remain ROLE.None until a role has been designated a winner. while (roleHasWon() == ROLE.None) { Prompt.goToSleepAndMafiaChooseVictim(out playerToMurder, this); while (!isValidPlayerAlive(playerToMurder)) { Prompt.invalidPlayerToKill(out playerToMurder); } Prompt.doctorSelectSomoneToHeal(numberOfDoctor, this, out playerToHeal); Prompt.sherrifSelectSomeoneToAccuse(numberOfSheriff, this, out playerToAccuse); Prompt.postNightSummary(playerToMurder, playerToHeal, playerToAccuse); //Doctor did not heal player that was murdered. if (playerToMurder != playerToHeal) { Player murdered = getAlivePlayerByName(playerToMurder); MafiaMember.kill(murdered, this); if (murdered.role == ROLE.Mafia) { numberOfMafia--; } else if (murdered.role == ROLE.Doctor) { numberOfDoctor--; } else if (murdered.role == ROLE.Sheriff) { numberOfSheriff--; } else if (murdered.role == ROLE.Civilian) { numberOfCivilian--; } } string playerToHang = ""; Prompt.civiliansChooseSomeoneToHang(this, out playerToHang); Player hung = getAlivePlayerByName(playerToHang); if (hung.role == ROLE.Mafia) { numberOfMafia--; } else if (hung.role == ROLE.Doctor) { numberOfDoctor--; } else if (hung.role == ROLE.Sheriff) { numberOfSheriff--; } else if (hung.role == ROLE.Civilian) { numberOfCivilian--; } playersAlive.Remove(getAlivePlayerByName(playerToHang)); winner = roleHasWon(); playerToMurder = ""; playerToHeal = ""; playerToAccuse = ""; } Console.WriteLine(winner.ToString() + " wins!"); }