C# Использование других переменных метода класса в Main - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь сделать простую текстовую игру и только что закончил писать код меню создания персонажа в Main. Теперь я решил создать библиотеку с отдельным классом Player и создать там метод CharacterCreation с этим кодом. Проблема в том, что я не понимаю, как сделать переменные метода Player.CharCreation (например, имя игрока и атрибуты) теперь видимыми в главной программе, чтобы использовать их после.

public class Player
{
    public static void CharCreation()
    {
        Console.WriteLine("\t=== Character creation menu ===\n");
        Console.Write("Write the name and press Enter: ");
        string name = Console.ReadLine();
        string Again;
        string RaceChoise;
        Console.Write("\nChoose your race(print number and press Enter):\n 1.Human\n 2.Dwarf\n 3.Elf\n");

        // Race choise

        do
        {
            Again = "No";
            RaceChoise = Console.ReadLine();
            switch (RaceChoise)
            {
                case "1":
                    Console.WriteLine("\nYou was born as human (Charisma +1)\n");
                    RaceChoise = "Human";
                    break;
                case "2":
                    Console.WriteLine("\nYou was born as dwarf(Constitution +1)\n");
                    RaceChoise = "Dwarf";
                    break;
                case "3":
                    Console.WriteLine("\nYou was born as elf (Agility +1)\n");
                    RaceChoise = "Elf";
                    break;
                default:
                    Console.WriteLine("Wrong number");
                    Again = RaceChoise;
                    break;
            }
        } while (Again != "No");

        // Base attributes according to the race choise

        Console.WriteLine("Character attributes\n");
        int Str = 1;
        int Agi = 1;
        int Int = 1;
        int Con = 1;
        int Cha = 1;
        Agi = RaceChoise == "Elf" ? (Agi + 1) : (Agi);
        Con = RaceChoise == "Dwarf" ? (Con + 1) : (Con);
        Cha = RaceChoise == "Human" ? (Cha + 1) : (Cha);
        Console.Write($"Strengh: {Str}\nAgility: {Agi}\nIntelligence: {Int}\nConstitution: {Con}\nCharisma: {Cha}\n\n");
        Console.WriteLine("Above is your character base attributes. Now distribute 5 points more");

        // Attributes points destribution

        int Counter = 5;
        for (int i = 0; i < 1; i++)
        {
            Console.Write("To strengh: ");
            int StrChange = Convert.ToInt32(Console.ReadLine());
            if (StrChange > Counter) { StrChange = Counter; }
            Counter = Counter - StrChange;
            Str = Str + StrChange;
            if (Counter == 0)
            {
                break;
            }
            else
            {
                Console.WriteLine($"Points remains: {Counter}");
                Console.Write("To agility: ");
                int AgiChange = Convert.ToInt32(Console.ReadLine());
                if (AgiChange > Counter) { AgiChange = Counter; }
                Counter = Counter - AgiChange;
                Agi = Agi + AgiChange;
                if (Counter == 0)
                {
                    break;
                }
                else
                {
                    Console.WriteLine($"Points remains: {Counter}");
                    Console.Write("To intelligence: ");
                    int IntChange = Convert.ToInt32(Console.ReadLine());
                    if (IntChange > Counter) { IntChange = Counter; }
                    Counter = Counter - IntChange;
                    Int = Int + IntChange;
                    if (Counter == 0)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine($"Points remains: {Counter}");
                        Console.Write("To constitution: ");
                        int ConChange = Convert.ToInt32(Console.ReadLine());
                        if (ConChange > Counter) { ConChange = Counter; }
                        Counter = Counter - ConChange;
                        Con = Con + ConChange;
                        if (Counter == 0)
                        {
                            break;
                        }
                        else
                        {
                            Console.WriteLine($"Points remains: {Counter}");
                            Console.Write("To charisma: ");
                            int ChaChange = Convert.ToInt32(Console.ReadLine());
                            if (ChaChange > Counter) { ChaChange = Counter; }
                            Cha = Cha + ChaChange;

Ну, я думаю, это может быть какой-то конструктор, но попробовал несколько опций, и он не работает. Мой код выглядит как неуклюжий, но я изучаю C# только за месяц, поэтому не судите строго:)

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

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

Сначала вам нужно назначить переменные для класса игрока, а затем использовать «this». ссылаться на них и устанавливать их в методе CharCreation ().

Это должно выглядеть так для вашего класса игрока.

public class Player
{

    public string Name { get; set; } // users name
    public string RaceChoice { get; set; } // users Race

    public void CharCreation()
    {
        Console.WriteLine("\t=== Character creation menu ===\n");
        Console.Write("Write the name and press Enter: ");

        this.Name = Console.ReadLine(); // set the players name

        string Again;
        string RaceChoise;
        Console.Write("\nChoose your race(print number and press Enter):\n 1.Human\n 2.Dwarf\n 3.Elf\n");

        // Race choise

        do
        {

            Again = "No";
            RaceChoise = Console.ReadLine();
            switch (RaceChoise)
            {
                case "1":
                    Console.WriteLine("\nYou was born as human (Charisma +1)\n");
                    this.RaceChoice = "Human"; // set the players race
                    break;
                case "2":
                    Console.WriteLine("\nYou was born as dwarf(Constitution +1)\n");
                    this.RaceChoice = "Dwarf"; // set the players race
                    break;
                case "3":
                    Console.WriteLine("\nYou was born as elf (Agility +1)\n");
                    this.RaceChoice = "Elf"; // set the players race
                    break;
                default:
                    Console.WriteLine("Wrong number");
                    Again = RaceChoise;
                    break;
            }
        } while (Again != "No");

        // Base attributes according to the race choise

        Console.WriteLine("Character attributes\n");
        int Str = 1;
        int Agi = 1;
        int Int = 1;
        int Con = 1;
        int Cha = 1;
        Agi = this.RaceChoice == "Elf" ? (Agi + 1) : (Agi);
        Con = this.RaceChoice == "Dwarf" ? (Con + 1) : (Con);
        Cha = this.RaceChoice == "Human" ? (Cha + 1) : (Cha);

        Console.Write($"Strengh: {Str}\nAgility: {Agi}\nIntelligence: {Int}\nConstitution: {Con}\nCharisma: {Cha}\n\n");
        Console.WriteLine("Above is your character base attributes. Now distribute 5 points more");

        // Attributes points destribution

        int Counter = 5;
        for (int i = 0; i < 1; i++)
        {
            Console.Write("To strengh: ");
            int StrChange = Convert.ToInt32(Console.ReadLine());
            if (StrChange > Counter) { StrChange = Counter; }
            Counter = Counter - StrChange;
            Str = Str + StrChange;
            if (Counter == 0)
            {
                break;
            }
            else
            {
                Console.WriteLine($"Points remains: {Counter}");
                Console.Write("To agility: ");
                int AgiChange = Convert.ToInt32(Console.ReadLine());
                if (AgiChange > Counter) { AgiChange = Counter; }
                Counter = Counter - AgiChange;
                Agi = Agi + AgiChange;
                if (Counter == 0)
                {
                    break;
                }
                else
                {
                    Console.WriteLine($"Points remains: {Counter}");
                    Console.Write("To intelligence: ");
                    int IntChange = Convert.ToInt32(Console.ReadLine());
                    if (IntChange > Counter) { IntChange = Counter; }
                    Counter = Counter - IntChange;
                    Int = Int + IntChange;
                    if (Counter == 0)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine($"Points remains: {Counter}");
                        Console.Write("To constitution: ");
                        int ConChange = Convert.ToInt32(Console.ReadLine());
                        if (ConChange > Counter) { ConChange = Counter; }
                        Counter = Counter - ConChange;
                        Con = Con + ConChange;
                        if (Counter == 0)
                        {
                            break;
                        }
                        else
                        {
                            Console.WriteLine($"Points remains: {Counter}");
                            Console.Write("To charisma: ");
                            int ChaChange = Convert.ToInt32(Console.ReadLine());
                            if (ChaChange > Counter) { ChaChange = Counter; }
                            Cha = Cha + ChaChange;


                        }
                    }
                }
            }
        }
    }

    public string GetPlayerName()
    {
        return this.Name;
    }
}

Посмотрите, как в верхней части класса я добавил переменные, которые будут принадлежат этому игроку. Теперь внутри класса создания вы можете использовать клавишу работы «это». ссылаться на эти переменные и получить / установить их. также посмотрите, как я добавил метод GetPlayerName (), который возвращает имя игрока. это потому, что если вы хотите сделать переменные частными, вам нужны средства получения / установки для доступа к этим переменным

Это ваши программы Основной метод

static void Main(string[] args)
{
    Player player1 = new Player(); // create the player instance
    player1.CharCreation(); // go through player creation setup
    var name = player1.GetPlayerName(); // get the players name
}

Теперь вы можете добавить столько переменных как вы хотите, чтобы класс игрока и получить / установить их, как вам нужно.

Небольшой совет. посмотрите c# соглашения об именах вот краткий справочник , но посмотрите и другие статьи. потому что цель состоит в том, чтобы добиться чистого кода, но ваши локальные переменные начинаются с заглавной буквы, когда они должны начинаться со строчной буквы.

Также обратите внимание на упрощение / выполнение меньших действий в методе. Таким образом, вы можете легко понять, что метод пытается сделать. Например, ваш метод CharCreation () обрабатывает множество действий, возможно, вы хотите разбить каждое действие на отдельный метод, чтобы вы могли легко go вернуться позже и обновить его, не разбираясь в том, что все это делает.

0 голосов
/ 01 мая 2020
public class Player
{
    public string Name { get; set; }
    public string Race { get; set; }

    public static Player CharCreation()
    {
        // do your stuff...
        string name = "Player";
        string race = "Human";
        return new Player()
        {
            Name = name,
            Race = race,
        };
    }
}

class Program
{
    static void Main()
    {
        Player player = Player.CharCreation();
        // do something with player.Name or player.Race
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...