2012-09-29 30 views
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和谷歌的答案,但沒有提出任何事。

任何幫助或提示如何解決這將是偉大的!

謝謝。

回答

1

你不知道什麼是message提前,對不對?您需要搜索「說」,並將字符串的其餘部分作爲輸入。

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

SubString(4)將返回字符串中的第4個字符後不管的,一切後,"Say "

+0

謝謝!這工作很好。非常簡單,正是我所需要的。 – BojinRx

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

這將檢查用戶是否使用單詞say,而不管使用的情況如何。

+0

除了明顯的答案,我用這個了。謝謝您的幫助。 – BojinRx

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