1

所以我一直在绞尽脑汁想弄清楚如何在我的游戏中实现“谈话”功能。我是 C# 编程的新手,但我一直在尽可能多地阅读和试验这门语言。

这是我到目前为止所拥有的:

Comm comm = new Comm();
string message = null;
if (InputBox.Text == "say " + message)
            {
                OutputBox.AppendText(comm.do_say(message));
            }

class Comm
{
    public string do_say(string message)
    {
        return "You say: " + message + "\n";
    }
}

现在,这行不通。我想我知道为什么,但我似乎无法弄清楚如何重做它所以它确实有效......我试图替换:

(InputBox.Text == "say " + message)

(InputBox.Text == "say {0}", message)

它也不起作用。所以,现在我对如何使这项工作没有想法。我尝试在 stackoverflow 和谷歌上搜索答案,但一无所获。

任何有关如何修复它的帮助或提示都会很棒!

谢谢。

4

3 回答 3

1

您似乎在这里寻找模式匹配,但 C# 不支持模式匹配。换句话说,简单地写

if (InputBox.Text == "say " + message)

每当用户键入“say foo”时,不会自动将“foo”分配给消息。

相反,您可能应该使用正则表达式,它们在 C# 中通过Regex类实现。尝试类似的东西

Match m = Regex.Match(InputBox.Text, @"^say\s+(.*)$", RegexOptions.IgnoreCase);
if (m.Success)
{
    OutputBox.AppendText(Comm.GetScreenoutput(m.Groups[1].Value));
}

您不需要创建do_say实例方法,因此在上面的代码中我假设将Comm其转换为

static class Comm
{
    public static string GetScreenOutput(string message)
    {
        return "You say: " + message + "\n";
    }
}

此代码遵循 C# 代码的命名约定,方法名称使用Pascal 大小写

于 2012-09-29T19:03:40.713 回答
1

message你事先不知道是什么,对吧?您需要搜索“Say”,并将字符串的其余部分作为输入。

if(InputBox.Text.StartsWith("Say ")) 
    OutputBox.Text += InputBox.Text.SubString(4);

SubString(4)将返回字符串中前 4 个字符之后的所有内容,之后的所有内容"Say "

于 2012-09-29T19:04:04.237 回答
0
if (InputBox.Text.ToUpper().StartsWith("SAY "))
{
    OutputBox.AppendText(comm.do_say(message));
}

这将检查用户是否使用了say这个词,而不管使用的大小写如何。

于 2012-09-29T19:02:54.207 回答