C#如何在多个类中使用变量?

C#如何在多个类中使用变量?,c#,C#,我已经决定尝试制作一个基于文本的游戏,此时我正试图找到一种方法,在使用Console.Clear之后,将角色的统计信息保留在屏幕上 我尝试的方法是创建一个函数: static void Stats() 我遇到的问题是,我必须使用位于代码主要部分的变量: static void Main(string[] args) 然而,我不知道如何做到这一点,我在查找时发现的一种方法是在函数之外创建一个字符串: public static string Player_Gende

我已经决定尝试制作一个基于文本的游戏,此时我正试图找到一种方法,在使用Console.Clear之后,将角色的统计信息保留在屏幕上

我尝试的方法是创建一个函数:

    static void Stats()
我遇到的问题是,我必须使用位于代码主要部分的变量:

     static void Main(string[] args)
然而,我不知道如何做到这一点,我在查找时发现的一种方法是在函数之外创建一个字符串:

     public static string Player_Gender;
据我所知,虽然这是不赞成的。如果我不相信这一点,请让我知道,我可以继续这样做,但如果这是正确的,请你给我一个替代方案

我还没有完成这个函数,因为我想在修改代码之前解决这个问题,但这就是添加其他统计信息后的大致情况

    static void Stats()
    {
        Console.Clear();
        Console.WriteLine("| |================================| |");
        Console.WriteLine("| | Character description + stats: | |");
        Console.WriteLine("| | Gender: {0}                    | |", Player_Gender);
    }
但是,当前变量存储在此处:

    static void Main(string[] args)
    {
        //Ints:
        int correct = 0;
        int Player_One_Handed = 0;
        int Player_Two_Handed = 0;
        int Player_Ranged_Weapon = 0;
        int Player_Magic = 0;
        int Arraycount = 0;
        int Player_Attack_Type = 0;
        int Player_One_Weapon_Damage = 2;
        int Player_Two_Weapon_Damage = 2;
        int Player_Ranged_Weapon_Damage = 2;
        int Player_Magic_Damage = 2;
        int Player_Health_Points = 20;
        int Player_Mana_Points = 12;
        int Enemy_Health_Points;
        int Enemy_Maximum_Damage;
        int Player_Inventory_Money = 0;
        int Player_Inventory_Experience = 0;
        int Player_Quest_Progress = 0;
        int Player_Quest_Goal;
        int Player_EXP = 0;
        int Player_Checked_For_Item = 0;
        int Player_Quest_Objective_Complete = 0;

        //Strings:
        string Player_Gender_Confirm;
        string Player_Race;
        string Player_Race_Confirm;
        string Player_Class;
        string Player_Class_Confirm;
        string[] Inventory = new string[20];
        string Enemy_Name;
        string Player_Quest = " ";
        string Quest_Accepted;
        string Player_Quest_Enemy;

最简单的方法是将值作为参数传入:

static void Stats(string gender)
{
    Console.Clear();
    Console.WriteLine("| |================================| |");
    Console.WriteLine("| | Character description + stats: | |");
    Console.WriteLine("| | Gender: {0}                    | |", gender);
}
像这样使用:

Stats(Player_Gender);
但这毕竟不是一个好主意,因为您不想传入25个不同的参数

相反,编写一个包含所有玩家变量的新类。包括描述玩家的每个变量,不包括不描述玩家的变量

public class Player
{
    public int OneHanded { get; set; }

    public string Name { get; set; }
    public string Race { get; set; }
    public string Gender { get; set; }
    public string Class { get; set; }

    //  ...etc. etc. -- include EVERYTHING that is a property of a player. 

    //  Now your Stats() method has direct access to all the player's properties
    //  Print stats for THIS player
    public void PrintStats()
    {
        Console.Clear();
        Console.WriteLine("| |================================| |");
        Console.WriteLine("| | Character description + stats: | |");
        Console.WriteLine("| | Gender: {0}                    | |", Gender);
        Console.WriteLine("| | Race: {0}                    | |", Race);
    }
}
在那些
Console.WriteLine()调用中,您将遇到对齐问题
Console.WriteLine()
的工作方式与
String.Format()
的工作方式相同

总的来说

static void Main(string[] args)
{
    var player = new Player();

    //  Whatever
    player.Name = "Bob";
    player.Gender = "Male";

    //  print stats for Bob
    player.PrintStats();

    var otherPlayer = new Player();
    otherPlayer.Name = "Fred";

    //  print stats for Fred
    otherPlayer.PrintStats();
在这里,我们开始看到编写一个类的价值:几乎没有额外的工作和几乎没有额外的代码混乱,您可以有两个具有相同属性集的玩家,而不是一个。您可以在一行中重新初始化播放机:

player = new Player();
您可以非常简单地将有关给定玩家的所有信息传递给另一种方法:

player.Assault(otherPlayer);

等等。

你知道如何编写
?不幸的是,不知道,你能告诉我如何使用类来解决这个问题吗?@MethodMan我目前在计算机科学学院学习C#,我想我们将了解这一点,但我们还没有完全触及it@Kian-请阅读一些C#和OOP的教程网站-然后回来问你有什么问题。在这里获取编程教程是不合主题的。此问题应关闭。要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题与堆栈溢出无关。