Как мне получить доступ к этому списку в C# в других функциях? - PullRequest
0 голосов
/ 10 марта 2020

Я нахожусь на ранней стадии создания игры, в которой люди делают ставки на лошадей. Мне нужно получить доступ к «HorseList» в функции «BetOnARace». Это была моя попытка, но в конце есть сообщение об ошибке для слова «Main» в классе «Program». Оно говорит, что оно «имеет неверную подпись, чтобы быть точкой входа».

class RunGame
{

    public void StartMenu(List<Horse> HorseList)
    {
        Console.WriteLine("**********    MENU     **********");
        Console.WriteLine("*********************************");
        Console.WriteLine("1. LOAD GAME");
        Console.WriteLine("2. NEW GAME");
        Console.WriteLine("3. EXIT GAME");
        Console.WriteLine("Enter your choice: ");
        string choice = Console.ReadLine();
        if (choice == "3")
        {
            Environment.Exit(0);
        }
        if (choice == "1" || choice == "2")
        {
            StartingBalance(HorseList);
        }
    }

    public void StartingBalance(List<Horse> HorseList)
    {
        int balance;
        Console.WriteLine("****    STARTING BALANCE     ****");
        Console.WriteLine("*********************************");
        Console.WriteLine("1. DEFAULT (£500)");
        Console.WriteLine("2. CUSTOM");
        Console.WriteLine("3. BACK TO MAIN MENU");
        Console.WriteLine("Enter your choice: ");
        string choice = Console.ReadLine();
        if (choice == "1")
        {
            balance = 500;
            GameMenu(HorseList);
        }
        if (choice == "2")
        {
            Console.WriteLine("Enter balance: ");
            Console.Write("£");
            balance = Convert.ToInt32(Console.ReadLine());
            if (balance <= 0)
            {
                Console.WriteLine("Balance must start above £0");
                Console.WriteLine("Enter balance: ");
                Console.Write("£");
                balance = Convert.ToInt32(Console.ReadLine());
                GameMenu(HorseList);
            }
            else
            {
                GameMenu(HorseList);
            }
        }
        if (choice == "3")
        {
            RunGame rg = new RunGame();
            rg.Run(HorseList);
        }
    }


    public void GameMenu(List<Horse> HorseList)
    {
        Console.WriteLine("**********    MENU     **********");
        Console.WriteLine("*********************************");
        Console.WriteLine("1. BET ON A RACE");
        Console.WriteLine("2. VISIT STABLES");
        Console.WriteLine("3. EXIT TO START MENU");
        Console.WriteLine("Enter your choice: ");
        string choice = Console.ReadLine();
        switch (choice)
        {
            case "1":
                BetOnRace(HorseList);
                break;
            case "2":
                DisplayHorses();
                break;
            case "3":
                Console.WriteLine("GAME PROGRESS SAVED");
                RunGame rg = new RunGame();
                rg.Run(HorseList);
                break;
        }
    }

    public void DisplayHorses()
    {
        List<Horse> HorseList = new List<Horse>();
        HorseList.Add(new Horse("Purple Haze", 2, 0, 0));
        HorseList.Add(new Horse("Druggo", 3, 0, 0));
        HorseList.Add(new Horse("Mr Crowley", 7, 0, 0));
        HorseList.Add(new Horse("I Am Monky", 10, 0, 0));
        HorseList.Add(new Horse("Roy", 12, 0, 0));
        HorseList.Add(new Horse("Egg Mayo", 14, 0, 0));
        HorseList.Add(new Horse("Crash My Horse Into A Bridge", 17, 0, 0));
        HorseList.Add(new Horse("Chubungundy", 20, 0, 0));
        HorseList.Add(new Horse("Uncle Barry", 22, 0, 0));
        HorseList.Add(new Horse("Widgetygrub", 2, 0, 0));
        HorseList.Add(new Horse("Paid In Raisins", 8, 0, 0));
        HorseList.Add(new Horse("Crayzee", 15, 0, 0));
        HorseList.Add(new Horse("Camster", 25, 0, 0));
        HorseList.Add(new Horse("Cheese N Peas", 18, 0, 0));
        HorseList.Add(new Horse("Master Oogway", 20, 0, 0));
        HorseList.Add(new Horse("Danny DeVito", 11, 0, 0));
        HorseList.Add(new Horse("Yobungus", 4, 0, 0));
        HorseList.Add(new Horse("Hot Cheetos", 14, 0, 0));
        HorseList.Add(new Horse("Bobby", 22, 0, 0));
        HorseList.Add(new Horse("This Horse Will Win", 50, 0, 0));

        Console.WriteLine("********    STABLES     *********");
        Console.WriteLine("*********************************");
        Console.WriteLine("1. DISPLAY HORSES");
        Console.WriteLine("2. BUY HORSE");
        Console.WriteLine("3. SELL HORSE");
        Console.WriteLine("4. BACK");
        Console.WriteLine("Enter your choice: ");
        string choice = Console.ReadLine();
        switch (choice)
        {
            case "1":
                foreach (var horse in HorseList)
                {
                    Console.WriteLine("Name of Horse: {0}, Odds: {1}/1, Races: {2}, Wins: {3}", horse.GetHorseName, horse.GetOdds, horse.GetRaces, horse.GetWins);
                }
                DisplayHorses();
                Console.ReadLine();
                break;
            case "2":
                break;
            case "3":
                break;
            case "4":
                GameMenu(HorseList);
                break;
        }
    }

    public void BetOnRace(List<Horse> HorseList)
    {
        Random rnd = new Random();
        HorseList.OrderBy(x => rnd.Next()).Take(5);
    }

    public void Run(List<Horse> HorseList)
    {
        StartMenu(HorseList);
    }
}
class Program
{
    static void Main(string[] args, List<Horse>HorseList)
    {
        RunGame rg = new RunGame();
        rg.Run(HorseList);
    }
}
}

1 Ответ

3 голосов
/ 10 марта 2020

Ошибка связана с этой строкой:

static void Main(string[] args, List<Horse>HorseList)

Вы не можете изменить сигнатуру этого метода Main для консольного приложения, для этого нужно просто указать один параметр типа string[] (обычно называется args, но может называться как угодно).

Но я вижу, что вы пытаетесь сделать.

У вас есть класс RunGame и что вам следует do - это двойное число

  1. Добавьте в этот класс конструктор, который принимает ваш список лошадей (или, если вы предпочитаете фактически генерировать список внутри конструктора)
  2. Сохраните этот список в приватном свойство класса

Затем вы можете использовать его повсюду, не пропуская его через каждый метод этого класса.

class RunGame
{
     private readonly List<Horse> horsesList;

    public RunGame()
    {
         this.horseList = new List<Horse>
         {
           new Horse("Purple Haze", 2, 0, 0),
           new Horse("Druggo", 3, 0, 0),
           // .. etc .. //
         };
    }

    public void DisplayHorses()
    {
        foreach(var horse in horsesList)
        {
            // TODO: display details of horse
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...