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とgoogleを検索しようとしましたが、何も思いつきませんでした。

それを修正する方法についてのヘルプやヒントは素晴らしいでしょう!

ありがとう。

4

3 に答える 3

1

message事前に何なのかわかりませんよね?「Say」を検索し、残りの文字列を入力として使用する必要があります。

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

SubString(4)文字列の最初の4文字の後のすべてを返し、その後のすべてを返します"Say "

于 2012-09-29T19:04:04.237 に答える
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 に答える
0
if (InputBox.Text.ToUpper().StartsWith("SAY "))
{
    OutputBox.AppendText(comm.do_say(message));
}

これは、使用されている大文字と小文字に関係なく、ユーザーが say という単語を使用したかどうかを確認します。

于 2012-09-29T19:02:54.207 に答える