创建方法

时间:2013-02-11 14:00:11

标签: c# methods console

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

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

几个星期前我开始编程,所以任何帮助都会受到赞赏

5 个答案:

答案 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);

或者在对象名称或类名称前加上它是静态的。