Я немного запутался в том, как вы это настроили. но я собираюсь попытаться 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 вернуться позже и обновить его, не разбираясь в том, что все это делает.