-1

我正在创建一个基于文本的 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;
      }
    }

另外,我该如何设置它以使“退出游戏”退出游戏?

我几周前开始编程,所以任何帮助将不胜感激

4

5 回答 5

1

您可以在方法中将其设置为 do while 。方法创建可重用的代码。这避免了复制和粘贴相同逻辑的需要。您只需通过以下方式调用方法,而不是复制粘贴代码:

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");

}

这是设置的,因此如果用户输入“退出游戏”,循环将退出。另一方面,扩展此逻辑的一个好方法是进行不区分大小写的比较。

于 2013-02-11T14:08:10.707 回答
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);
}
于 2013-02-11T14:06:17.143 回答
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);

或者如果它是静态的,则在它前面加上对象名称或类名称。

于 2013-02-11T14:11:51.350 回答
0

除非你有一个名为 help 的变量,否则你会想在它周围加上引号。IE:

case("help"):

如前所述,输入“退出游戏”应该会中断循环并关闭控制台窗口(如果您将其放入您的案例中)。它可能更简洁,例如使用常量而不是硬编码字符串。

于 2013-02-11T14:07:11.743 回答
0

在 C# 中,您可以像看起来一样创建方法。假设您想显示帮助文本,然后在任何其他方法(可能是您的主要方法)之外,您将编写以下内容:

static void ShowHelp() {
    Console.WriteLine("This is some text. Enter some command!");
    var command = Console.ReadLine();
    //Do other things
}

然后,每当您希望显示该文本时,您都可以使用ShowHelp().

于 2013-02-11T14:07:34.753 回答