所以我一直绞尽脑汁试图弄清楚如何在我的游戏中实现“谈话”功能。我是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和谷歌搜索答案,但没有提出任何建议。
任何有关如何修复它的帮助或提示都会很棒!
感谢。
答案 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,无论使用何种情况。