Exemplo n.º 1
0
        // Create the player and display the created player
        public static BaseCriminal CreatePlayer(List <BaseCriminal> crew)
        {
            string playerName = "this is not an empty string";

            // Ask user to enter a name until they enter anything other than an empty string
            while (true)
            {
                Console.WriteLine("");
                Console.WriteLine("Who are you?");
                Console.Write("Enter your name: ");

                playerName = Console.ReadLine();
                if (!string.IsNullOrWhiteSpace(playerName))
                {
                    break;
                }
            }
            // Create player object
            BaseCriminal player = new BaseCriminal(playerName, true, crew);

            // Display created player
            Console.WriteLine($@"{player.Face}

{player.Name}
_________
  
  skill level: {player.BaseSkill}
 ");
            return(player);
        }
Exemplo n.º 2
0
        // Add associates to crew both on initial crew creation and later in game
        public static BaseCriminal RecruitNewAssociate(List <BaseCriminal> crew)
        {
            bool nameAvailable = true;
            // Set a blank new criminal that we can return after the loop completes
            BaseCriminal newAssociate = null;

            while (nameAvailable)
            {
                Console.Write("Enter associate's nickname: ");
                string enteredName = Console.ReadLine();

                BaseCriminal isNameTaken = crew.Find(c => c.Name == enteredName);

                if (isNameTaken == null && !string.IsNullOrWhiteSpace(enteredName))
                {
                    newAssociate  = new BaseCriminal(enteredName, false, crew);
                    nameAvailable = false;
                    DisplayCreatedAssociate(newAssociate);
                    // Reset isNameTaken so more associates can be created
                    isNameTaken = null;
                }
            }
            // Exit loop and return new criminal
            return(newAssociate);
        }
Exemplo n.º 3
0
        // Display player's speech
        public static void DisplayEncouragingSpeech(BaseCriminal player, bool isSplitMenu)
        {
            Color.SuccessGreen();
            Console.WriteLine(Heading.DisplaySubheadingSpeech());
            Console.WriteLine(player.Face);
            Console.WriteLine("");
            // for the speeches, get names of the crew members and saying something dramatic about each person
            // will need to make some random compliments
            if (isSplitMenu == false)
            {
                Console.WriteLine("You give a big speech complimenting the crew's skills.\n");
                Console.WriteLine("You promise everyone will get rich.");
            }

            if (isSplitMenu == true)
            {
                Console.WriteLine("You give a big speech congratulating the crew's heist expertise.");
            }

            Console.WriteLine("");
            Console.WriteLine("Crew morale increased.");
            Console.WriteLine("");

            Menu.Continue();
        }
Exemplo n.º 4
0
        // Allow player to encourage crew
        public static List <BaseCriminal> EncourageCrew(List <BaseCriminal> crew, bool isSplitMenu)
        {
            // Takes an isSplitMenu because different encouragements require different speeches
            BaseCriminal player = crew.Find(c => c.IsPlayer);

            if (player.HasPlayerEncouragedCrew == false)
            {
                Random r = new Random();
                crew.ForEach(c =>
                {
                    if (!c.IsPlayer)
                    {
                        int improvedMorale = c.Morale + r.Next(4, 25);
                        if (improvedMorale > c.MoraleMax)
                        {
                            c.Morale = c.MoraleMax;
                        }
                        else
                        {
                            c.Morale = improvedMorale;
                        }
                    }
                    if (c.IsPlayer)
                    {
                        c.HasPlayerEncouragedCrew = true;
                    }
                });
                DisplayEncouragingSpeech(player, isSplitMenu);
                return(crew);
            }
            return(crew);
        }
Exemplo n.º 5
0
        public static void WillCrewMemberShoot(List <BaseCriminal> crew, List <BaseLocation> locations, bool isPlayerAttemptingMoneySplit)
        // Check every crew member's morale to see if they will turn
        {
            // SIMILAR to WillCrewMemberTurnAfterHeist
            BaseCriminal player = crew.Find(c => c.IsPlayer);

            crew.ForEach(c =>
            {
                int morale = c.Morale;
                if (c.IsPlayer == false && morale <= 40)
                {
                    // Save as traitor for easy understanding
                    BaseCriminal traitor = c;

                    // Generate a new random number between 1-10 to handle the % a person will turn
                    Random r         = new Random();
                    int randomNumber = r.Next(101);
                    int chance30     = 0;
                    int chance50     = 0;
                    int chance70     = 0;
                    int chance100    = 0;

                    // Based on this member's morale, generate a number by chance
                    if (morale >= 30 && morale <= 40)
                    {
                        chance30 = r.Next(31);
                    }
                    else if (morale >= 20 && morale <= 29)
                    {
                        chance50 = r.Next(51);
                    }
                    else if (morale >= 10 && morale <= 19)
                    {
                        chance70 = r.Next(71);
                    }
                    // Chance100 equals the randomNumber so if they're at that level, they'll always turn
                    else if (morale <= 9)
                    {
                        chance100 = randomNumber;
                    }

                    ChanceToShoot(chance30, randomNumber, crew, locations, traitor, isPlayerAttemptingMoneySplit);
                    ChanceToShoot(chance50, randomNumber, crew, locations, traitor, isPlayerAttemptingMoneySplit);
                    ChanceToShoot(chance70, randomNumber, crew, locations, traitor, isPlayerAttemptingMoneySplit);
                    ChanceToShoot(chance100, randomNumber, crew, locations, traitor, isPlayerAttemptingMoneySplit);
                }
            });
            // Find criminals WHERE they have not been marked as ICED and set them as the new crew
            crew = crew.Where(c => !c.isAssociateIced).ToList();
            // After we have looped through every associate, go to the correct view
            if (isPlayerAttemptingMoneySplit)
            {
                Outro.GameOver(crew, locations, true, player);
            }
            if (!isPlayerAttemptingMoneySplit)
            {
                Outro.SplitCash(crew, locations);
            }
        }
Exemplo n.º 6
0
        // Display who the associate is
        static void DisplayCreatedAssociate(BaseCriminal associate)
        {
            Console.WriteLine($@"{associate.Face}

{associate.Name} recruited!
_________
   
   base skill: {associate.BaseSkill}
 ");
        }
Exemplo n.º 7
0
        // Check if any crew members will turn on player/crew
        public static void WillCrewMemberTurnAfterHeist(List <BaseCriminal> crew, List <BaseLocation> locations, string locName)
        {
            // Get selected location
            BaseLocation selectedLocation = locations.Find(l => l.Name == locName);

            int locationCash = selectedLocation.Cash;

            // Loop through criminals to see if any fail the morale check
            // If criminal fails, heist is a success
            crew.ForEach(c =>
            {
                if (!c.IsPlayer)
                {
                    int morale = c.Morale;
                    // if morale is less than 40 and another crew member hasn't turned and stole the money first
                    if (morale <= 40 && selectedLocation.crewMemberStoleCash == false)
                    {
                        // Save as traitor for easy understanding
                        BaseCriminal traitor = c;

                        // Generate a new random number between 1-10 to handle the % a person will turn
                        Random r         = new Random();
                        int randomNumber = r.Next(101);
                        int chance30     = 0;
                        int chance50     = 0;
                        int chance70     = 0;
                        int chance100    = 0;

                        // Based on this member's morale, generate a number by chance
                        if (morale >= 30 && morale <= 40)
                        {
                            chance30 = r.Next(31) + 10;
                        }
                        else if (morale >= 20 && morale <= 29)
                        {
                            chance50 = r.Next(51) + 20;
                        }
                        else if (morale >= 10 && morale <= 19)
                        {
                            chance70 = r.Next(71) + 30;
                        }
                        // Chance100 equals the randomNumber so if they're at that level, they'll always turn
                        else if (morale <= 9)
                        {
                            chance100 = randomNumber;
                        }

                        ChanceToTurnAfterHeist(chance30, randomNumber, crew, locations, traitor, locName);
                        ChanceToTurnAfterHeist(chance50, randomNumber, crew, locations, traitor, locName);
                        ChanceToTurnAfterHeist(chance70, randomNumber, crew, locations, traitor, locName);
                        ChanceToTurnAfterHeist(chance100, randomNumber, crew, locations, traitor, locName);
                    }
                }
            });
        }
Exemplo n.º 8
0
        public static void ChanceToShoot(
            int chanceInt,
            int randFrom100,
            List <BaseCriminal> crew,
            List <BaseLocation> locations,
            BaseCriminal traitor,
            bool isPlayerAttemptingMoneySplit)
        {
            if (chanceInt != 0 && chanceInt >= randFrom100 && !traitor.isAssociateIced)
            {
                // This traitor WILL shoot
                // Get the traitor's index value
                int traitorIndex = crew.IndexOf(traitor);
                // Declare a target's index
                BaseCriminal target           = null;
                Random       r                = new Random();
                bool         lookingForTarget = true;
                // WHILE we do not have a person to shoot
                while (lookingForTarget)
                {
                    int possibleTargetIndex = 0;
                    // Player is a possible target, only if the crew is smaller than a certain number
                    if (crew.Count() > 2)
                    {
                        possibleTargetIndex = r.Next(1, crew.Count());
                    }
                    else
                    {
                        possibleTargetIndex = r.Next(0, crew.Count());
                    }
                    // If the target is not the shooter
                    if (possibleTargetIndex != traitorIndex)
                    {
                        target           = crew[possibleTargetIndex];
                        lookingForTarget = false;
                    }
                }

                // Instead of removing the target, mark the target as "Iced."
                // Otherwise we crash because we've 'Modified a collection' while attempting to loop over it.
                crew.ForEach(c =>
                {
                    if (target.Name == c.Name)
                    {
                        c.isAssociateIced = true;
                    }
                });

                // pass traitor and target into display message
                DisplayWhoIcedWho(crew, locations, traitor, target, isPlayerAttemptingMoneySplit);
            }
        }
Exemplo n.º 9
0
 public static BaseCriminal ChanceToRun(
     int chanceInt,
     int randFrom100,
     BaseCriminal possibleTraitor)
 {
     // Check if they're a traitor
     if (chanceInt != 0 && chanceInt >= randFrom100)
     {
         possibleTraitor.HasRanInFear = true;
         AssociateRanInFear(possibleTraitor);
         return(possibleTraitor);
     }
     // Not a traitor
     return(possibleTraitor);
 }
Exemplo n.º 10
0
        public static void DisplayWhoWasIced(BaseCriminal whoWasIced)
        {
            Color.IcedRed();

            // Display ASCII artwork for who was killed
            Console.WriteLine(Heading.DisplayHeadingIced());
            Console.WriteLine($"{whoWasIced.FaceIced}");
            Console.WriteLine("");

            // Summary of events
            Console.WriteLine($"You iced {whoWasIced.Name}!");
            Console.WriteLine("");
            Console.WriteLine("Crew morale decreased.");
            Console.WriteLine("Everyone's cut increased.");

            // Player input to continue
            Console.WriteLine("");
            Menu.Continue();
        }
Exemplo n.º 11
0
        // If an associate turns, lower morale
        public static void ChanceToTurnAfterHeist(
            int chanceInt,
            int randFrom100,
            List <BaseCriminal> crew,
            List <BaseLocation> locations,
            BaseCriminal traitor,
            string locName)
        {
            // If the percentage chance is under the random value picked
            if (chanceInt != 0 && chanceInt >= randFrom100)
            {
                // Get selected location
                BaseLocation selectedLocation = locations.Find(l => l.Name == locName);

                // Lower everyone's Morale
                crew.ForEach(c =>
                {
                    if (c.IsPlayer == false)
                    {
                        c.Morale = c.Morale - new Random().Next(10, 35);
                    }
                });

                // Set the current location to stolen
                locations.ForEach(l =>
                {
                    if (l.Name == locName)
                    {
                        l.crewMemberStoleCash = true;
                    }
                });

                // Get the traitor's index value
                int traitorsIndex = crew.IndexOf(traitor);
                // Remove that index value
                crew.RemoveAt(traitorsIndex);
                // Remove the cash from the crew
                crew.ForEach(c => c.CrewTotalCash = c.CrewTotalCash - selectedLocation.Cash);

                TraitorScreen(crew, locations, locName, traitor);
            }
        }
Exemplo n.º 12
0
        // Display a shortened list of crew's info
        public static void DisplayCrewInfoShortened(List <BaseCriminal> crew)
        {
            // Get crew's cash
            int TotalCash;

            BaseCriminal player = crew.Find(c => c.IsPlayer);

            TotalCash = player.CrewTotalCash;

            int CurrentSplit = (TotalCash / crew.Count());

            Console.WriteLine($@"Total associates in crew: {crew.Count()}");
            Console.WriteLine("--------");
            Console.WriteLine($"Cash: ${TotalCash}");
            if (crew.Count() > 1)
            {
                Console.WriteLine($"Current cut: ${CurrentSplit}");
            }
            Console.WriteLine("--------");
        }
Exemplo n.º 13
0
        // Display crew info summary
        public static void DisplayCrewInfo(List <BaseCriminal> crew)
        {
            // Get crew's skills
            List <int> TotalSkills = new List <int>();
            // Get morale skill bonus
            List <int> MoraleSkillBonus = new List <int>();
            // Get crew's cash
            int TotalCash;

            crew.ForEach(c =>
            {
                TotalSkills.Add(c.BaseSkill);
                MoraleSkillBonus.Add(c.MoraleSkillBonus);
            });

            BaseCriminal player = crew.Find(c => c.IsPlayer);

            TotalCash = player.CrewTotalCash;

            int CurrentSplit = (TotalCash / crew.Count());

            int CrewSkill = TotalSkills.Sum();

            if (player.PlayerContactCount > 0)
            {
                Console.WriteLine($"Total associates available to hire: {player.PlayerContactCount}");
            }
            Console.WriteLine($@"Total associates in crew: {crew.Count()}");
            Console.WriteLine($"Crew's base skill level: {CrewSkill}");
            if (crew.Count() > 1)
            {
                Console.WriteLine($"Morale bonus to skill: {MoraleSkillBonus.Sum()}");
            }
            Console.WriteLine("--------");
            Console.WriteLine($"Cash: ${TotalCash}");
            if (crew.Count() > 1)
            {
                Console.WriteLine($"Current cut: ${CurrentSplit}");
            }
            Console.WriteLine("--------");
        }
Exemplo n.º 14
0
        public static void HeistSuccess(List <BaseCriminal> crew, List <BaseLocation> locations, string locName)
        {
            Color.SuccessGreen();

            // Morale check before continuing
            CrewLogicHeist.WillCrewMemberTurnAfterHeist(crew, locations, locName);

            Console.WriteLine(Heading.DisplayHeistSuccess());
            Console.WriteLine(Misc.DisplayMoney());
            Console.WriteLine(Heading.DisplaySuccessOveriew());

            BaseLocation currentLocation = locations.Find(l => l.Name == locName);
            BaseCriminal player          = crew.Find(c => c.IsPlayer);
            int          cashEarned      = player.CrewTotalCash;

            // Display how much money we earned from location
            Console.WriteLine($"Crew stole: ${currentLocation.Cash}");
            // Total earned
            if (cashEarned != currentLocation.Cash)
            {
                Console.WriteLine($"Total cash: ${cashEarned}");
            }
            // how much the current split will be if it's more than one crew member
            if (crew.Count() > 1)
            {
                Console.WriteLine($"The split per crew member will be: ${cashEarned / crew.Count()}");
                Console.WriteLine("----");
                Console.WriteLine("Crew skill increased");
                Console.WriteLine("Crew morale increased");
            }
            else if (crew.Count() == 1)
            {
                Console.WriteLine("Your skill increased");
            }
            Console.WriteLine("");
            Menu.Continue();
            Level.LevelSelect(crew, locations);
        }
Exemplo n.º 15
0
        static void AssociateRanInFear(BaseCriminal scared)
        {
            Color.CrewTurnedYellow();
            Console.WriteLine(Heading.DisplayHeadingFled());
            if (scared.CrewTotalCash == 0)
            {
                Console.WriteLine(Vehicle.DisplayAssociateRanInFear());
                Console.WriteLine(scared.Face);
                Console.WriteLine("");
                Console.WriteLine($"{scared.Name} fled from your horrifically violent action!");
            }
            else
            {
                Console.WriteLine(Vehicle.DisplayAssociateRanWithCash());
                Console.WriteLine(scared.Face);
                Console.WriteLine("");
                Console.WriteLine($"Your horrifically violent act terrified {scared.Name}.");
                Console.WriteLine($"{scared.Name} fled with a large portion of the cash!");
            }

            Console.WriteLine("");
            Menu.Continue();
        }
Exemplo n.º 16
0
        public static void DisplayWhoIcedWho(List <BaseCriminal> crew,
                                             List <BaseLocation> locations,
                                             BaseCriminal traitor,
                                             BaseCriminal gotShot,
                                             bool isPlayerAttemptingMoneySplit)
        {
            Color.IcedRed();

            Console.WriteLine(Heading.DisplayHeadingIced());
            Console.WriteLine(gotShot.FaceIced);
            Console.WriteLine("");
            if (gotShot.IsPlayer)
            {
                Console.WriteLine($"{traitor.Name} iced YOU in the face!");
                Console.WriteLine("");
                Menu.Continue();
                Outro.GameOver(crew, locations, false, gotShot);
            }

            else if (!gotShot.IsPlayer)
            {
                Console.WriteLine($"{traitor.Name} iced {gotShot.Name} in the face!");
                Console.WriteLine("");
                Console.WriteLine("Survivors' morale decreased.");
                Console.WriteLine("");
                Menu.Continue();

                // If player is NOT attempting to split the cash, return to SplitCash view
                if (!isPlayerAttemptingMoneySplit)
                {
                    // Loop through the crew and find the members WHERE they have not been iced
                    crew = crew.Where(c => !c.isAssociateIced).ToList();
                    Outro.SplitCash(crew, locations);
                }
                // Otherwise, continue the forEach check for each crew member
            }
        }
Exemplo n.º 17
0
        public static List <BaseCriminal> IceAssociateCheck(List <BaseCriminal> crew, List <BaseLocation> locations, bool splitCashMenu)
        {
            Console.Clear();
            string name = "not empty for a base value";

            if (!splitCashMenu)
            {
                while (name != "" && crew.Count() > 1)
                {
                    Console.Clear();
                    Console.WriteLine(Heading.DisplayIce());
                    CrewManagement.DisplayCrewInfo(crew);
                    DisplayIceAssociateWarning(crew);
                    name = Console.ReadLine();

                    // Store the criminal who was iced for use in display
                    BaseCriminal whoWasIced = crew.Find(c => c.Name == name);
                    // Make a new list of criminals WITHOUT the iced crew member
                    List <BaseCriminal> icedCrew = crew.Where(c => c.Name != name || c.IsPlayer == true).ToList();

                    // Only lower morale if we have iced a crew member
                    if (icedCrew.Count() < crew.Count())
                    {
                        // Lower the crews morale
                        List <BaseCriminal> newCrew = LowerMoraleFromIce(icedCrew);
                        // Display Who was iced, if not null
                        if (whoWasIced != null)
                        {
                            DisplayWhoWasIced(whoWasIced);
                        }
                        WillCrewMemberRunAfterIce(newCrew, locations);
                        crew = newCrew;
                    }
                    // We didn't type in a name, so return the new crew
                    else
                    {
                        crew = icedCrew;
                    }
                }
            }
            else if (splitCashMenu)
            {
                Console.Clear();
                Console.WriteLine(Heading.DisplayIce());
                CrewManagement.DisplayCrewInfoShortened(crew);
                DisplayIceAssociateWarning(crew);
                name = Console.ReadLine();

                // Store the criminal who was iced for use in display
                BaseCriminal whoWasIced = crew.Find(c => c.Name == name);
                // Make a new list of criminals WITHOUT the iced crew member
                List <BaseCriminal> icedCrew = crew.Where(c => c.Name != name || c.IsPlayer == true).ToList();

                // Only lower morale if we have iced a crew member
                if (icedCrew.Count() < crew.Count())
                {
                    // Lower the crews morale
                    List <BaseCriminal> newCrew = LowerMoraleFromIce(icedCrew);
                    // Display Who was iced, if not null
                    if (whoWasIced != null)
                    {
                        DisplayWhoWasIced(whoWasIced);
                    }
                    newCrew.ForEach(c =>
                    {
                        if (c.IsPlayer)
                        {
                            c.PlayerFiredWeapon = true;
                        }
                    });
                    crew = newCrew;
                }
                // We didn't type in a name, so return the new crew, and do not let anyone shoot
                else
                {
                    crew = icedCrew.Select(c =>
                    {
                        if (c.IsPlayer)
                        {
                            c.PlayerFiredWeapon = false;
                            return(c);
                        }
                        else
                        {
                            return(c);
                        }
                    }).ToList();
                }
            }
            // If the first check is false, return a crew
            return(crew);
        }
Exemplo n.º 18
0
        // Display traitor info
        public static void TraitorScreen(List <BaseCriminal> crew, List <BaseLocation> locations, string locName, BaseCriminal traitor)
        {
            Color.CrewTurnedYellow();

            BaseLocation currentLocation = locations.Find(l => l.Name == locName);

            Console.WriteLine(Heading.DisplayHeadingTraitor());
            Console.WriteLine(Heading.DisplaySubheadingTraitor());
            Console.WriteLine("");
            Console.WriteLine($"{traitor.Face}");
            Console.WriteLine("");
            Console.WriteLine($"{traitor.Name} stole ${currentLocation.Cash}");
            Console.WriteLine("--------------------");
            Console.WriteLine("Crew skill improved.");
            Console.WriteLine("Crew morale decreased.");
            Console.WriteLine("");
            Console.WriteLine("Watch the crew. Unhappy members may turn.");
            Console.WriteLine("");

            Menu.Continue();
            Level.LevelSelect(crew, locations);
        }
Exemplo n.º 19
0
        public static void LevelSelect(List <BaseCriminal> crew, List <BaseLocation> locations)
        {
            Color.DefaultGray();
            // While there are levels not yet completed, allow user to continue selecting levels
            List <BaseLocation> locationsLeftToRob = locations.Where(l => l.Completed == false).ToList();

            BaseCriminal player = crew.Find(c => c.IsPlayer);

            while (locationsLeftToRob.Count() > 0)
            {
                Console.Clear();
                Console.Write(Heading.DisplayPlanning());
                CrewManagement.DisplayCrewInfo(crew);
                Console.WriteLine(LevelArt.DisplayNashville());

                if (player.PlayerContactCount == 0 && crew.Count() == 1)
                {
                    Console.WriteLine("No crew left to manage");
                    Console.WriteLine("______________________");
                    Console.WriteLine("");
                }
                else
                {
                    Console.WriteLine("1) manage crew");
                    Console.WriteLine("______________");
                    Console.WriteLine("");
                }

                // Iterate through locations, for those that are not completed, then show those options
                locations.ForEach(l =>
                {
                    if (!l.Completed)
                    {
                        if (l.Name == "Annoying Neighbor's House")
                        {
                            Console.WriteLine("2) stakeout Annoying Neighbor's House");
                        }
                        if (l.Name == "Corner Evan-Eleven")
                        {
                            Console.WriteLine("3) stock-up at Corner Evan-Eleven");
                        }
                        if (l.Name == "Welts Fargo")
                        {
                            Console.WriteLine("4) stakeout Welts Fargo");
                        }
                        if (l.Name == "Pinnackle National Bank")
                        {
                            Console.WriteLine("5) stakeout Pinnackle National Bank");
                        }
                        if (l.Name == "Bank of Amereeka")
                        {
                            Console.WriteLine("6) stakeout Bank of Amereeka");
                        }
                    }
                });

                // IF you have ANY money, option 7 is available

                if (player.CrewTotalCash > 0)
                {
                    Console.WriteLine("____________");
                    Console.WriteLine("");
                    if (crew.Count() == 1)
                    {
                        Console.WriteLine("7) end heist spree");
                    }
                    else
                    {
                        Console.WriteLine("7) end heist spree and split cash");
                    }
                }

                // Check to ensure user typed only a number
                int selection = Menu.MenuInput(7);

                switch (selection)
                {
                case 1:
                    if (player.PlayerContactCount == 0 && crew.Count() == 1)
                    {
                        LevelSelect(crew, locations);
                    }
                    else
                    {
                        CrewManagement.ManageCrew(crew, locations);
                    }
                    break;

                case 2:
                    // Annoying Neighbor
                    StakeOutLocation(crew, locations, 2);
                    break;

                case 3:
                    // Evan-Eleven
                    StakeOutLocation(crew, locations, 3);
                    break;

                case 4:
                    // Welts Fargo
                    StakeOutLocation(crew, locations, 4);
                    break;

                case 5:
                    // Pinnackle
                    StakeOutLocation(crew, locations, 5);
                    break;

                case 6:
                    // Amereeka
                    StakeOutLocation(crew, locations, 6);
                    break;

                case 7:
                    // End game - split cash
                    if (player.CrewTotalCash > 0)
                    {
                        Outro.SplitCash(Outro.PrepCrewForEndGame(crew), locations);
                    }
                    break;
                }

                locationsLeftToRob = locations.Where(l => l.Completed == false).ToList();
            }

            Outro.SplitCash(Outro.PrepCrewForEndGame(crew), locations);
        }
Exemplo n.º 20
0
        public static void WillCrewMemberRunAfterIce(List <BaseCriminal> crew, List <BaseLocation> locations)
        {
            // SIMILAR to WillCrewMemberTurnAfterHeist
            // But this checks EVERY member instead of until one turns
            List <BaseCriminal> checkedCrew   = new List <BaseCriminal>();
            List <BaseCriminal> notScaredCrew = new List <BaseCriminal>();

            BaseCriminal player           = crew.Find(c => c.IsPlayer);
            int          currentCashTotal = player.CrewTotalCash;

            // Loop through criminals & check their morale
            checkedCrew = crew.Select(c =>
            {
                if (!c.IsPlayer)
                {
                    int morale = c.Morale;
                    // if morale is less than 40, chance to run
                    if (morale <= 40)
                    {
                        BaseCriminal possibleTraitor = c;

                        // Get new random
                        Random r        = new Random();
                        int randFrom100 = r.Next(101);
                        int chance10    = 0;
                        int chance20    = 0;
                        int chance40    = 0;
                        int chance100   = 0;

                        // Based on this member's morale, generate a number by chance
                        if (morale >= 30 && morale <= 40)
                        {
                            chance10 = r.Next(11);
                        }
                        else if (morale >= 20 && morale <= 29)
                        {
                            chance20 = r.Next(21);
                        }
                        else if (morale >= 10 && morale <= 19)
                        {
                            chance40 = r.Next(41);
                        }
                        // Chance100 equals the randomNumber so if they're at that level, they'll always turn
                        else if (morale <= 9)
                        {
                            chance100 = randFrom100;
                        }

                        possibleTraitor = ChanceToRun(chance10, randFrom100, possibleTraitor);
                        possibleTraitor = ChanceToRun(chance20, randFrom100, possibleTraitor);
                        possibleTraitor = ChanceToRun(chance40, randFrom100, possibleTraitor);
                        possibleTraitor = ChanceToRun(chance100, randFrom100, possibleTraitor);

                        return(possibleTraitor);
                    }
                }
                return(c);
            }).ToList();

            // Check if any traitors stole cash
            if (currentCashTotal > 2)
            {
                checkedCrew.ForEach(c =>
                {
                    // Did anyone run in fear?
                    if (c.HasRanInFear)
                    {
                        // Reset the cash to the current amount
                        c.CrewTotalCash = currentCashTotal;
                        // Remove 50% of cash
                        currentCashTotal = currentCashTotal - (currentCashTotal / 2);
                    }
                });
            }

            // Updated everyone's cash amount
            checkedCrew.ForEach(c => c.CrewTotalCash = currentCashTotal);

            // Filter only the crew members who didn't run in fear
            notScaredCrew = checkedCrew.Where(c => c.HasRanInFear == false).ToList();

            CrewManagement.ManageCrew(notScaredCrew, locations);
        }
Exemplo n.º 21
0
        // Main view for managing crew
        public static void ManageCrew(List <BaseCriminal> crew, List <BaseLocation> locations)
        // Must always return the current crew and the current locations
        {
            Color.DefaultGray();

            List <BaseCriminal> modifiedCrew = crew;

            DisplayCurrentCrew(modifiedCrew);

            BaseCriminal player = crew.Find(c => c.IsPlayer);

            // If only the player is in the crew & player has 0 contacts, return to level select
            if (crew.Count == 1 && player.PlayerContactCount == 0)
            {
                Level.LevelSelect(crew, locations);
            }

            Console.WriteLine();
            if (player.PlayerContactCount > 0)
            {
                Console.WriteLine($"1) recruit an associate [{player.PlayerContactCount} associates available to contact]");
            }
            else if (player.PlayerContactCount == 0)
            {
                Console.WriteLine("You've contacted every associate you know.");
            }
            if (crew.Count() > 1)
            {
                if (player.HasPlayerEncouragedCrew == false)
                {
                    Console.WriteLine("2) give an encouraging speech");
                }
                else if (player.HasPlayerEncouragedCrew == true)
                {
                    Console.WriteLine("You can give another speech after a successful heist.");
                }
                Console.WriteLine("3) ice crew member");
            }
            ;
            Console.WriteLine("4) return to planning");

            int input = Menu.MenuInput(4);

            switch (input)
            {
            case 1:
                modifiedCrew = CrewManagement.ModifyCrew(modifiedCrew);
                ManageCrew(modifiedCrew, locations);
                break;

            case 2:
                if (crew.Count() > 1)
                {
                    modifiedCrew = EncourageCrew(modifiedCrew, false);
                }
                ManageCrew(modifiedCrew, locations);
                break;

            case 3:
                modifiedCrew = Ice.IceCrewMember(modifiedCrew, locations, false);
                ManageCrew(modifiedCrew, locations);
                break;

            case 4:
                Level.LevelSelect(modifiedCrew, locations);
                break;
            }
        }
Exemplo n.º 22
0
        public static void SplitCash(List <BaseCriminal> crew, List <BaseLocation> locations)
        {
            Color.SplitYellow();
            // get crew cash
            int totalCash = 0;

            crew.ForEach(c => totalCash = c.CrewTotalCash);
            BaseCriminal player = crew.Find(c => c.IsPlayer);

            if (totalCash > 0)
            {
                // If there is a crew, split cash. Else, end game
                if (crew.Count() > 1)
                {
                    Console.Clear();

                    // Display headings and crew info
                    Console.WriteLine(Heading.DisplayHeadingSplit());
                    Console.WriteLine(Heading.DisplaySubheadingSplit());
                    CrewManagement.DisplayCrewInfoShortened(crew);

                    // Money bag image
                    Console.WriteLine(Misc.DisplayMoneyBag());

                    // Display crews name and current morale status
                    Console.WriteLine("Crew");
                    Console.WriteLine("-----");
                    crew.ForEach(c =>
                    {
                        if (!c.IsPlayer)
                        {
                            Console.WriteLine($"{c.Name} - {c.MoraleDescription}");
                        }
                    });

                    Console.WriteLine("");
                    Console.WriteLine("The more money you take, the better off you'll be when you skip town.");
                    Console.WriteLine("");
                    Console.WriteLine("1) attempt to split cash evenly among crew members and part ways");
                    Console.WriteLine("2) ice a crew member");
                    if (player.HasPlayerEncouragedCrew == false)
                    {
                        Console.WriteLine("3) give congratulations speech");
                    }

                    int select = Menu.MenuInput(3);

                    switch (select)
                    {
                    case 1:
                        // Player gives up chance to shoot. Otherwise the player will always have the chance to ice the last person
                        Ice.WillCrewMemberShoot(crew, locations, true);
                        GameOver(crew, locations, true, player);
                        break;

                    case 2:
                        // Player ices an associate
                        List <BaseCriminal> smallerCrew = Ice.IceCrewMember(crew, locations, true);
                        if (player.PlayerFiredWeapon)
                        {
                            Ice.WillCrewMemberShoot(smallerCrew, locations, false);
                        }
                        smallerCrew.ForEach(c =>
                        {
                            if (c.IsPlayer)
                            {
                                c.PlayerFiredWeapon = false;
                            }
                        });
                        SplitCash(smallerCrew, locations);
                        break;

                    case 3:
                        SplitCash(CrewManagement.EncourageCrew(crew, true), locations);
                        break;
                    }
                    GameOver(crew, locations, true, player);
                }
                else
                {
                    GameOver(crew, locations, true, player);
                }
            }
            else
            {
                GameOver(crew, locations, true, player);
            }
        }
Exemplo n.º 23
0
        public static void HeistFailure(List <BaseCriminal> crew, List <BaseLocation> locations)
        {
            Color.PoliceBlue();
            BaseCriminal player    = crew.Find(c => c.IsPlayer);
            string       moraleMsg = "Crew morale decreased.";
            // 50-50 chance for arrested or escaped
            Random random = new Random();
            int    r      = random.Next(1, 3);

            // Arrested
            if (r == 1)
            {
                // Generate arrested summary
                Console.WriteLine(Heading.DisplayHeadingArrested());
                Console.WriteLine(Heading.DisplaySubheadingArrested());

                // If only player is in crew
                if (crew.Count == 1)
                {
                    crew.ForEach(c => c.IsPlayerArrested = true);
                    Console.WriteLine(Face.DisplayArrested());
                    Menu.Continue();
                    Outro.GameOver(crew, locations, true, player);
                }
                // If multiple crew members
                else if (crew.Count > 1)
                {
                    // arrest a random crew member
                    int crewSize         = crew.Count();
                    int randomCrewMember = new Random().Next(1, crewSize);

                    BaseCriminal arrestedMember = crew.ElementAt(randomCrewMember);
                    Console.WriteLine("");
                    Console.WriteLine($"{arrestedMember.Face}");
                    Console.WriteLine("");
                    Console.WriteLine($"The cops got {arrestedMember.Name}!\n");
                    Console.WriteLine(moraleMsg);
                    Console.WriteLine("");
                    Menu.Continue();

                    crew.RemoveAt(randomCrewMember);
                    // Randomly lower every non-player's morale
                    crew.ForEach(c =>
                    {
                        if (c.IsPlayer == false)
                        {
                            int loweredMorale = c.Morale - new Random().Next(25, 54);
                            if (loweredMorale < c.MoraleMin)
                            {
                                c.Morale = c.MoraleMin;
                            }
                            else
                            {
                                c.Morale = loweredMorale;
                            }
                        }
                    });
                    // Return to level select menu
                    Level.LevelSelect(crew, locations);
                }
            }
            // Escaped
            else if (r == 2)
            {
                // Randomly lower every non-player's morale
                crew.ForEach(c =>
                {
                    if (c.IsPlayer == false)
                    {
                        int loweredMorale = c.Morale - new Random().Next(15, 35);
                        if (loweredMorale < c.MoraleMin)
                        {
                            c.Morale = c.MoraleMin;
                        }
                        else
                        {
                            c.Morale = loweredMorale;
                        }
                    }
                });
                // Display escaped summary
                Console.WriteLine(Heading.DisplayHeadingEscaped());
                Console.WriteLine(Heading.DisplaySubheadingEscaped());
                Console.WriteLine(Vehicle.DisplayPoliceCar());
                if (crew.Count() > 1)
                {
                    Console.WriteLine(moraleMsg);
                }
                Console.WriteLine("");
                Menu.Continue();
                // Return to level select menu
                Level.LevelSelect(crew, locations);
            }
        }
Exemplo n.º 24
0
        public static void GameOver(List <BaseCriminal> crew, List <BaseLocation> locations, bool playerAlive, BaseCriminal player)
        {
            BaseCriminal firstIndex         = crew[0];
            int          cashStolen         = firstIndex.CrewTotalCash;
            int          playersCut         = cashStolen / crew.Count();
            int          totalCashAvailable = 0;

            locations.ForEach(l => totalCashAvailable = l.Cash + totalCashAvailable);

            Color.EndingBlue();
            Console.WriteLine(Heading.DisplayHeadingGameOver());
            Console.WriteLine(Heading.DisplaySubHeadingSummary());
            Console.WriteLine($"Total cash stolen: ${cashStolen} / ${totalCashAvailable}");

            if (playerAlive)
            {
                // Arrested Ending
                if (player.IsPlayerArrested == true)
                {
                    // If we have a crew
                    if (crew.Count() > 1)
                    {
                        // Minus you from crew.Count
                        Console.WriteLine($"The cut per members not in jail: ${cashStolen / crew.Count() - 1}");
                        DisplayCrewMembersWhoSurvived(crew);
                    }

                    if (player.PlayerContactCount > 0)
                    {
                        Console.WriteLine($"Number of associates left you could have hired: {player.PlayerContactCount}");
                    }

                    Console.WriteLine("");
                    Console.WriteLine(Face.DisplayArrested());

                    Console.WriteLine("You should have known, crime never pays.");

                    ExitGame();
                }

                if (player.CrewTotalCash == 0)
                {
                    DisplayCrewMembersWhoSurvived(crew);
                    if (player.PlayerContactCount > 0)
                    {
                        Console.WriteLine($"Number of associates left you could have hired: {player.PlayerContactCount}");
                    }

                    Console.WriteLine(Heading.DisplaySubheadingWanted());
                    Console.WriteLine($"{player.Name} for multiple attempts at robbery.");
                    Console.WriteLine($"{player.Face}");
                    Console.WriteLine("");
                    Console.WriteLine("You somehow ended up with nothing. You can't even get out of town.");
                    Console.WriteLine("Police all over Tennessee and the ajoining states are hunting you.");
                    Console.WriteLine($"Enjoy your freedom while you can, {player.Name}.");

                    ExitGame();
                }
                // the crew does have cash
                else
                {
                    if (crew.Count() > 1)
                    {
                        Console.WriteLine($"Cut per member: ${cashStolen / crew.Count()}");

                        DisplayCrewMembersWhoSurvived(crew);

                        if (player.PlayerContactCount > 0)
                        {
                            Console.WriteLine($"Number of associates left you could have hired: {player.PlayerContactCount}");
                        }
                    }

                    // Based on how much the playersCut was, display ending message
                    if (playersCut > 0 && playersCut <= 10_000)
                    {
                        Console.WriteLine(Ending.DisplayEndingCamp());
                    }
                    if (playersCut >= 10_001 && playersCut <= 999_999)
                    {
                        Console.WriteLine(Ending.DisplayEndingRoad());
                    }
                    if (playersCut > 1_000_000)
                    {
                        Console.WriteLine(Ending.DisplayEndingBeach());
                    }
                }
            }

            else if (!playerAlive)
            {
                // REMOVE the player from the crew
                crew = crew.Where(c => !c.IsPlayer || !c.isAssociateIced).ToList();

                Console.WriteLine($"The cut per member: ${cashStolen / crew.Count()}");

                if (crew.Count() == 1)
                {
                    Console.WriteLine($"The only survivor was: ");
                }
                else
                {
                    Console.WriteLine($"Crew members who survived:");
                }

                crew.ForEach(c => Console.WriteLine($"  {c.Name}"));

                if (player.PlayerContactCount > 0)
                {
                    Console.WriteLine($"Number of associates left you could have hired: {player.PlayerContactCount}");
                }

                Console.WriteLine(player.FaceIced);
                Console.WriteLine("");
                Console.WriteLine("Crime doesn't pay when you're dead.");
            }

            ExitGame();
        }