我正在创建一个基于文本的RPG。你能帮我创建一个方法吗?我想学习如何创建方法,这样我就不必将"help"
case
复制粘贴到每个循环中。
以下是我想要的方法:
string command;
while (command != "exit game")
{
command=Console.ReadLine();
switch(command){
case (help):
Console.WriteLine("List of useableverbs and nouns");
break;
default:
Console.WriteLine("Invalidcommand");
break;
}
}
另外,我如何设置它以便“退出游戏”退出游戏?
几个星期前我开始编程,所以任何帮助都会受到赞赏
答案 0 :(得分:1)
这是一种方法:
void HandleCommand(string command)
{
switch (command)
{
case (help):
Console.WriteLine("List of useable verbs and nouns");
break;
default:
Console.WriteLine("Invalid command");
break;
}
}
使用它:
while (command != "exit game")
{
command=Console.ReadLine();
HandleCommand(command);
}
答案 1 :(得分:1)
您可以将其设置为method中的do。方法创建可重用的代码。这避免了复制和粘贴相同逻辑的需要。您只需通过(在本例中)调用方法,而不是复制粘贴代码:
CheckCommand();
该方法可能看起来像......
private static void CheckCommand()
{
string command;
do
{
command = Console.ReadLine();
switch (command)
{
case ("help"):
Console.WriteLine("List of useable verbs and nouns");
break;
default:
Console.WriteLine("Invalid command");
break;
}
}
while (command != "exit game");
}
这是设置,所以如果用户键入“退出游戏”,循环将退出。另一方面,扩展这种逻辑的一个好方法是进行case insensitive比较。
答案 2 :(得分:0)
除非你有一个名为help的变量,否则你需要在它周围加上引号。 IE:
case("help"):
如上所述,键入“退出游戏”应该打破循环并关闭控制台窗口,如果你把它放在你的情况下。它可以更干净,就像使用常量而不是硬编码字符串一样。
答案 3 :(得分:0)
在C#中,您可以像创建方式一样创建方法。假设你想要显示你的帮助文本,然后在任何其他方法之外(可能是你的主要方法),你会写下以下内容:
static void ShowHelp() {
Console.WriteLine("This is some text. Enter some command!");
var command = Console.ReadLine();
//Do other things
}
然后,只要您希望显示该文字,就可以使用ShowHelp()
进行调用。
答案 4 :(得分:0)
您可以使用布尔变量来表示游戏结束到循环。必须在循环中查询该命令,并且由于循环开始时该命令未知,我将把循环条件放在循环的末尾。
bool doExit = false;
do {
string command = Console.ReadLine().ToLower();
switch (command) {
case "exit":
case "quit":
doExit = true;
break;
case "otherCommand":
HandleOtherCommand();
break;
case "?":
case "h":
case "help":
PrintHelp();
break;
default:
Console.WriteLine("Invalid command!");
PrintHelp();
break;
}
} while (!doExit);
使用布尔变量的优势在于,当满足其他条件时,您可以轻松终止游戏。例如,当玩家赢了或输掉游戏时。
现在为方法。您可以将方法放在相同的源代码(Program.cs)中或创建新类。在Program.cs中,您可以编写类似
的内容private static void PrintHelp()
{
Console.WriteLine("Valid commands:");
Console.WriteLine("help, h, ?: Print this help.");
Console.WriteLine("exit, quit: End this game.");
Console.WriteLine("...");
}
请注意,由于Main
方法是静态的,因此同一类中的其他方法也必须是静态的。如果要为命令创建其他类,则可以选择是否要创建静态类。静态类只是放置方法的地方。
static class GameCommands
{
// The `public` modifier makes it visible to other classes.
public static void PrintHelp()
{
...
}
public static void SomeOtherCommand()
{
...
}
}
您可以使用className.MethodName()
语法调用此类方法。
GameCommands.PrintHelp();
如果您必须存储不同的状态(例如分数)。适合创建非静态类。您可以创建称为类实例或对象的类的副本。这实际上只复制类的状态而不复制方法代码。非静态方法可以对此状态(字段,属性)起作用。
class Player
{
// Constructor. Initializes an instance of the class (an object).
public Player (string name)
{
Name = name;
}
// Property
public int Score { get; private set; }
// Property
public string Name { get; private set; }
// Instance method (non-static method) having a parameter.
public void IncreaseScoreBy(int points)
{
Score += points;
}
public void PrintWinner()
{
Console.WriteLine("The winner is {0} with a score of {2} points." Name, Score);
}
}
你可以使用像这样的类
Player player1 = new Player("John"); // Pass an argument to the constructor.
Player player2 = new Player("Sue");
player1.IncreaseScoreBy(5);
player2.IncreaseScoreBy(100);
if (player1.Score > player2.Score) {
player1.PrintWinner();
} else if (player2.Score > player1.Score)
player2.PrintWinner();
} else {
Console.WriteLine("The score is even!");
}
到目前为止,我们使用的方法没有返回值。这由用于替换返回类型的void关键字指示。
void MethodWithNoReturnValue() { ... }
如果您有返回值(即您的方法是函数),则必须指定返回类型。 return
语句终止函数并指定返回值。
double Reciprocal(double x)
{
return 1.0 / x;
}
您可以在同一个班级中将其称为
double y = Reciprocal(x);
或者在对象名称或类名称前加上它是静态的。