C#如何在多个类中使用变量?
我已经决定尝试制作一个基于文本的游戏,此时我正试图找到一种方法,在使用Console.Clear之后,将角色的统计信息保留在屏幕上 我尝试的方法是创建一个函数:C#如何在多个类中使用变量?,c#,C#,我已经决定尝试制作一个基于文本的游戏,此时我正试图找到一种方法,在使用Console.Clear之后,将角色的统计信息保留在屏幕上 我尝试的方法是创建一个函数: static void Stats() 我遇到的问题是,我必须使用位于代码主要部分的变量: static void Main(string[] args) 然而,我不知道如何做到这一点,我在查找时发现的一种方法是在函数之外创建一个字符串: public static string Player_Gende
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的教程网站-然后回来问你有什么问题。在这里获取编程教程是不合主题的。此问题应关闭。要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题与堆栈溢出无关。