游戏中的“说话/说话”功能

时间:2012-09-29 18:59:13

标签: c#

所以我一直绞尽脑汁试图弄清楚如何在我的游戏中实现“谈话”功能。我是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和谷歌搜索答案,但没有提出任何建议。

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

感谢。

3 个答案:

答案 0 :(得分:1)

您似乎在这里寻找pattern matching,但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 case作为方法名称。

答案 1 :(得分:1)

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

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

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

之后的所有内容

答案 2 :(得分:0)

if (InputBox.Text.ToUpper().StartsWith("SAY "))
{
    OutputBox.AppendText(comm.do_say(message));
}

这将检查用户是否使用了单词say,无论使用何种情况。