Пример #1
0
        public Ship newShip(bool keepLooping)
        {
            Console.Clear();
            Menus.WelcomeScreen();
            string model = "";

            do
            {
                try
                {
                    Console.WriteLine($"\nWallet: {this.GetWallet()} credits");

                    string[] modelNames = { "Volkswagon Creeper", "Church Van", "Ford F150", "Cadallac Escalade" };
                    Console.Write($"\nSelect the type of ship you want to purchase:\n" +
                                  $"\n1. {modelNames[0]}\t\t1,000 credits" +
                                  $"\n2. {modelNames[1]}\t\t\t2,000 credits" +
                                  $"\n3. {modelNames[2]}\t\t\t10,000 credits" +
                                  $"\n4. {modelNames[3]}\t\t20,000 credits\n\nC: Cancel\n\n>>> ");
                    MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                    if (selection.GetSelection() == 0)
                    {
                        break;
                    }
                    else if (Enumerable.Range(1, 4).Contains(selection.GetSelection()))
                    {
                        model = modelNames[selection.GetSelection() - 1];
                        Ship newShip = new Ship(model);
                        if (this.GetWallet() >= newShip.GetPrice())
                        {
                            keepLooping = false;
                        }
                        else
                        {
                            Console.Clear();
                            throw new Exception("\nYou don't have enough credits to purchase the selected model.");
                        }
                    }
                    else
                    {
                        Console.Clear();
                        throw new Exception("\nInvalid Entry");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
            return(new Ship(model));
        }
Пример #2
0
        // Allows the user to buy fuel
        public void Refuel(bool keepLooping)
        {
            // Adjusts the fuel price based on the planet the user is currently on
            double fuelPrice = 100;

            Console.Clear();
            Menus.WelcomeScreen();

            do
            {
                try
                {
                    double tank      = this.GetShip().GetTankCapacity();
                    double fuelLevel = this.GetFuel();
                    Console.WriteLine($"\nFuel Level:\t\t{fuelLevel} tons" +
                                      $"\nTank Capacity:\t\t{tank} tons" +
                                      $"\nFuel Price:\t\t{fuelPrice} credits per ton");
                    Console.Write("\nHow many tons of fuel do you wish to buy?\n\nC: Cancel\n>>>>");
                    MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                    if (selection.GetSelection() == 0)
                    {
                        break;
                    }
                    else if (selection.GetSelection() > 0 && selection.GetSelection() <= tank - fuelLevel)
                    {
                        if (this.GetWallet() >= selection.GetSelection() * fuelPrice)
                        {
                            // Updating fuel level
                            this.SetFuel(selection.GetSelection());
                            // Updating the user's wallet
                            this.SetWallet(-selection.GetSelection() * fuelPrice);
                            keepLooping = false;
                        }
                        else
                        {
                            throw new Exception("\nYou don't have enough credits to buy that much fuel. Enter a smaller amount.");
                        }
                    }
                    else
                    {
                        Console.Clear();
                        throw new Exception("\nInvalid Entry");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
        }
Пример #3
0
        // Executes the trading decisions
        private static void Trade(Items[] tradingGoods, Character myCharacter, string[] TradeMenu)
        {
            string buyMenu     = TradeMenu[0];
            string sellMenu    = TradeMenu[1];
            bool   keepLooping = true;

            do
            {
                Console.Write("\nSelect from the following options:\n\n1. Buy\n2. Sell\n\nC: Cancel\n\n>>> ");
                MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                try
                {
                    if (selection.GetSelection() == 0)
                    {
                        break;
                    }
                    else if (selection.GetSelection() == 1)
                    {
                        myCharacter.BuyGoods(buyMenu, tradingGoods);
                    }
                    else if (selection.GetSelection() == 2)
                    {
                        myCharacter.SellGoods(sellMenu, tradingGoods);
                    }
                    else
                    {
                        throw new Exception("\nInvalid Entry");
                    }
                    keepLooping = false;
                }
                catch (Exception ex)
                {
                    Console.Clear();
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
        }
Пример #4
0
        // Updates user location and travel time
        public void Travel(List <SolarSystem> universe)
        {
            // Establishing starting coordinates
            double[] from = this.GetLocation().GetCoordinates();
            // Creating destination coordinates
            double[]      to              = new double[2];
            double        distance        = 0;
            double        travelTime      = 0;
            double        W               = this.GetShip().GetSpeed();
            List <Planet> destinationList = new List <Planet>();
            bool          keepLooping     = true;

            do
            {
                try
                {
                    // Creating list of planets that are reachable with the current fuel level
                    destinationList = ReachablePlanets(universe);

                    // building a menu list for planets that can be traveled to
                    string menuList = "\n";
                    if (destinationList.Count() != 0)
                    {
                        for (int i = 0; i < destinationList.Count(); i++)
                        {
                            menuList += $"{i + 1}. {destinationList[i].GetName()}";
                            if (((i + 1) % 5 != 0) || (i == 0))
                            {
                                menuList += "\t";
                            }
                            else
                            {
                                menuList += "\n";
                            }
                        }

                        Console.Write($"\nWhere would you like to travel to:\n" + menuList + "\n\nC: Cancel\n\n>>> ");
                        MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                        if (selection.GetSelection() == 0)
                        {
                            break;
                        }
                        else if (Enumerable.Range(1, destinationList.Count()).Contains(selection.GetSelection()))
                        {
                            // initializing destination coordinates
                            to = destinationList[selection.GetSelection() - 1].GetCoordinates();

                            Planet destination = destinationList[selection.GetSelection() - 1];
                            // Calculating the distance and time traveled
                            distance   = GetDistance(from, to);
                            travelTime = GetTimeElapsed(distance, this.GetShip().GetSpeed());
                            // Updates the user's travel time
                            this.SetTravelTime(travelTime);
                            // Checks to total time elapsed
                            if (this.GetTravelTime() >= 40)
                            {
                                Environment.Exit(-1);
                            }
                            // Update the fuel level. 1 fuel is used per lightyear of distance.
                            this.SetFuel(-distance);
                            // Updates the user's location
                            this.SetLocation(destination);
                            keepLooping = false;
                        }
                        else
                        {
                            Console.Clear();
                            throw new Exception("\nInvalid Entry");
                        }
                    }
                    else
                    {
                        Console.WriteLine("\nNo planets are reachable with the current fuel level, Buy more fuel.");
                        keepLooping = false;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
        }
Пример #5
0
        // Sell goods
        public void SellGoods(string sellMenu, Items[] tradingGoods)
        {
            bool keepLooping = true;

            do
            {
                try
                {
                    Console.Write(sellMenu);
                    MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                    if (selection.GetSelection() == 0)
                    {
                        break;
                    }
                    else if (Enumerable.Range(1, 10).Contains(selection.GetSelection()))
                    {
                        // Counts how many of selected items does the user have in his cargo
                        int count = 0;
                        foreach (Items items in this.GetCargo())
                        {
                            if (items.GetName() == tradingGoods[selection.GetSelection() - 1].GetName())
                            {
                                count++;
                            }
                        }
                        if (count > 0)
                        {
                            Console.Write("\nHow many units would you like to sell?\n\nC: Cancel\n\n>>> ");
                            MenuSelection quantity = new MenuSelection(Console.ReadLine().Trim());
                            if (quantity.GetSelection() == 0)
                            {
                                break;
                            }
                            if (quantity.GetSelection() <= count)
                            {
                                // removes the sold item from the user's cargo
                                for (int i = 0; i < quantity.GetSelection(); i++)
                                {
                                    this.RemoveCargo(tradingGoods[selection.GetSelection() - 1]);
                                }
                                // Updates the user's wallet. 10% sales tax is added.
                                this.SetWallet(tradingGoods[selection.GetSelection() - 1].GetPrice() * quantity.GetSelection() * this.GetLocation().GetMultiplier() * 1.1);
                                keepLooping = false;
                            }
                            else
                            {
                                int number = 0;
                                foreach (Items items in this.GetCargo())
                                {
                                    if (items.GetName() == tradingGoods[selection.GetSelection() - 1].GetName())
                                    {
                                        number++;
                                    }
                                }
                                throw new Exception($"\nYou have only {number} {tradingGoods[selection.GetSelection() - 1].GetName()} in your cargo bay.");
                            }
                        }
                        else
                        {
                            keepLooping = false;
                            throw new Exception("\nYou don't have any of the selected goods in the cargo bay.");
                        }
                    }
                    else
                    {
                        throw new Exception("\nInvalid Entry");
                    }
                }
                catch (Exception ex)
                {
                    Console.Clear();
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
        }
Пример #6
0
        public void BuyGoods(string buyMenu, Items[] tradingGoods)
        {
            bool keepLooping = true;

            do
            {
                try
                {
                    if (this.GetCargo().Count() != this.GetShip().GetCargoCapacity())
                    {
                        Console.Write(buyMenu);
                        MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                        if (selection.GetSelection() == 0)
                        {
                            break;
                        }
                        else if (Enumerable.Range(1, 10).Contains(selection.GetSelection()))
                        {
                            Console.Write("\nHow many units would you like to buy?\n\nC: Cancel\n\n>>> ");
                            MenuSelection quantity = new MenuSelection(Console.ReadLine().Trim());
                            // Checks if there is enough room in the ship's cargo bay
                            if (quantity.GetSelection() == 0)
                            {
                                break;
                            }
                            else if (this.GetCargo().Count() + quantity.GetSelection() <= this.GetShip().GetCargoCapacity())
                            {
                                if (this.GetWallet() >= quantity.GetSelection() * tradingGoods[selection.GetSelection() - 1].GetPrice())
                                {
                                    // Adds an item to the player's cargo
                                    for (int i = 0; i < quantity.GetSelection(); i++)
                                    {
                                        this.AddCargo(tradingGoods[selection.GetSelection() - 1]);
                                    }

                                    // Updates the user's wallet
                                    this.SetWallet(-quantity.GetSelection() * tradingGoods[selection.GetSelection() - 1].GetPrice() * this.GetLocation().GetMultiplier());
                                    keepLooping = false;
                                }
                                else
                                {
                                    throw new Exception("\nYou don't have enough credit to purchase this good.");
                                }
                            }
                            else
                            {
                                throw new Exception("\nThere isn't enough room in the ship's cargo bay for the selected quantity. Select fewer items.");
                            }
                        }
                        else
                        {
                            throw new Exception("\nInvalid Entry");
                        }
                    }
                    else
                    {
                        keepLooping = false;
                        throw new Exception("\nThe ship's cargo bay is full. Sell some goods before you attempt to purchase more.");
                    }
                }
                catch (Exception ex)
                {
                    Console.Clear();
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
        }
Пример #7
0
        public Character()
        {
            bool keepLooping = true;

            // enter user's name
            do
            {
                try
                {
                    Console.Write("\nType your name\n\n>>> ");
                    string input = Console.ReadLine().Trim();
                    if (input != "")
                    {
                        this.name   = input;
                        keepLooping = false;
                        Console.Clear();
                    }
                    else
                    {
                        Console.Clear();
                        throw new Exception("\nInvalid Entry");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
            //CharacterType
            keepLooping = true;
            do
            {
                try
                {
                    Menus.WelcomeScreen();
                    string[] classArray = { "Traveler", "Hauler", "Merchant" };
                    Console.Write($"Select your Class, {this.name}:\n\n1. {classArray[0]}\n2. {classArray[1]}\n3. {classArray[2]}\n\n>>>> ");
                    MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                    if (Enumerable.Range(1, 3).Contains(selection.GetSelection()))
                    {
                        this.classType = classArray[selection.GetSelection() - 1];
                        keepLooping    = false;
                        Console.Clear();
                    }
                    else
                    {
                        Console.Clear();
                        throw new Exception("\nInvalid Entry");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            } while (keepLooping);
            // mark starting point as Earth
            double[] startingPoint = { 0.0, 0.0 };
            this.location = new Planet("Earth", startingPoint, 1);
            // give starting credits to the player
            this.wallet = 5000;
            // Set travel time to zero at the beginning of the game
            this.travelTime = 0;
            Menus.WelcomeScreen();
            Console.WriteLine($"\nHello {this.GetName()}. Your character has been created and awarded with 5,000 credits to start the game.");
            Console.WriteLine("Your objective is to travel to as many planets as possible, trading items for as profit.");
            Console.WriteLine("Your success as an intersellar trader will be measured by your money, total fuel, and distance travelled...");
            Console.WriteLine("\nPress Enter to Continue");
            Console.ReadLine();
            Console.Clear();
            // prompt the user to purchase a ship
            this.ship = newShip(true);
            Console.Clear();
            // Updates user's wallet.
            SetWallet(-ship.GetPrice());
            Console.Clear();
            Refuel(true);
            Console.Clear();
        }
Пример #8
0
        private static void ShowActionMenu(Character myCharacter, List <SolarSystem> universe, Items[] tradingGoods, string[] TradeMenu)
        {
            bool keepLooping = true;

            do
            {
                bool commandNotExecuted = true;
                do
                {
                    Menus.WelcomeScreen();
                    try
                    {
                        Console.Write("\nSelect from the following options:\n\n1. Status\n2. Trade\n3. Travel to...\n4. Refuel\n5. Change ship\n6. Quit game\n\n>>> ");
                        MenuSelection selection = new MenuSelection(Console.ReadLine().Trim());
                        if (Enumerable.Range(1, 6).Contains(selection.GetSelection()))
                        {
                            switch (selection.GetSelection())
                            {
                            case 1:
                                Console.Clear();
                                Menus.WelcomeScreen();
                                myCharacter.ShowStatus();
                                break;

                            case 2:
                                Console.Clear();
                                Menus.WelcomeScreen();
                                Trade(tradingGoods, myCharacter, TradeMenu);
                                break;

                            case 3:
                                Console.Clear();
                                Menus.WelcomeScreen();
                                myCharacter.Travel(universe);
                                break;

                            case 4:
                                Console.Clear();
                                Menus.WelcomeScreen();
                                myCharacter.Refuel(true);
                                break;

                            case 5:
                                Console.Clear();
                                Menus.WelcomeScreen();
                                myCharacter.newShip(true);
                                break;

                            case 6:
                                Console.Clear();
                                Init i = new Init();
                                i.Run();
                                break;
                            }
                            commandNotExecuted = false;
                        }
                        else
                        {
                            Console.Clear();
                            throw new Exception("\nInvalid Entry");
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                } while (commandNotExecuted);
                Console.WriteLine("\nCommand successfully executed. Press Enter to Continue.");
                Console.ReadLine();
                Console.Clear();
            } while (keepLooping);
        }