1

単語に空白がある場合 (2 つの単語があることを意味します)、そのインデックスにスラッシュを入れたいと思います。

だから: こんにちは = _ _ _ _ / _ _ _ _

現時点では、私のゲームはすべての文字をアンダースコアに変換するため、ユーザーが 2 つの単語を入力すると、他のプレイヤーはその単語を正しく理解できません。

したがって、基本的に EMPTY SPACE をスラッシュに置き換え、ユーザーからの入力を処理している間に、実際の単語が _ _ _ _ / _ _ _ などに等しいかどうかを確認する必要があります。

つまり、スラッシュでチェックします。

私のコード: これはアンダースコアを生成するコードです:

for (int i = 0; i < word.Length; i++) { label += "_ "; }

これは、ユーザーが選択した文字を処理するコードです:

public string Process(string gameLetter, string currentWord)
    {
        underscoredWord = currentWord;
        if (word.Contains(gameLetter))
        {
            correctLetters += gameLetter;
            underscoredWord = Regex.Replace(word.Replace(" ", "/"), "[^" + correctLetters + "]", " _");

            if (underscoredWord == word)
                return underscoredWord;
        }
        else
            tries++;

        return underscoredWord; //return with no amendments
    }

ゲームが2つの単語で動作できるように、両方を変更する方法はありますか? どんな助けでも大歓迎です。

4

3 に答える 3

1

各文字をループする代わりに、正規表現パターンを使用して最初に空白を照合して置換し、次に英数字文字を置換します

    static void Main(string[] args)
    {
        string word = args[0];
        string label = string.Empty;

        label = new Regex(" ").Replace(word, " / ");
        label = new Regex("([a-zA-z0-9])").Replace(label, "_ ");            

        Console.WriteLine(word);
        Console.WriteLine(label);

        Console.ReadLine();
    }

これがお役に立てば幸いです:)

于 2012-04-05T12:41:26.267 に答える
0

正規表現を使用して表示と入力の一部を修正するのは素晴らしいアイデアだと思いますが、さらに一歩進んで、ほとんどの入力と状態を処理するクラス内にゲーム関連のすべてのロジックを配置します。

よろしければ、Windows Phone 用にコンパイルする必要がある単純な概念実証クラスをまとめました: https://github.com/jcoder/nHangman

主なアイデア:

  • スペースまたは推測された文字である場合は、それぞれに関連付けられた情報を含む解決文字の内部リスト
  • 単一の文字の推測を処理します
  • 完全な解の推測を処理する
  • すべての推測と失敗した推測の数を保存します
  • 推測の現在の状態で文字列を取得するメソッドを提供します

もちろん、このクラスは完全ではありませんが、メインの「ゲーム エンジン」を実装する方法についていくつかのアイデアを提供する可能性があります。

于 2012-04-05T16:33:30.943 に答える
0

あなたのために、上記のコードをどのように変更してゲームを実装するかをまとめました。それがあなたを助けることを願っています!

namespace Hangman
    {
        class Program
        {
            static string word = string.Empty;
            static string label = string.Empty;
            static int tries = 0;
            static string misses = string.Empty;

            static void Main(string[] args)
            {
                word = args[0];

                label = new Regex(" ").Replace(word, "/");
                label = new Regex("([a-zA-z0-9])").Replace(label, "_");

                ProcessKeyStroke();

                Console.Read();
            }


            static void ProcessKeyStroke()
            {
                // Write the latest game information
                Console.Clear();
                Console.WriteLine("Tries remaining: {0}", 9 - tries);
                Console.WriteLine(label);
                Console.WriteLine("Misses: {0}", misses);

                // Check if the player won
                if (!label.Contains("_"))
                {
                    Console.WriteLine("You won!");
                    return;
                }

                // Check if the player lost
                if (tries == 9)
                {
                    Console.WriteLine("You lost!\n\nThe word was: {0}", word);
                }

                // Process the key stroke
                char gameLetter = Console.ReadKey().KeyChar;
                bool MatchFound = false;

                int Index = 0;
                foreach (char currentLetter in word.ToLower())
                {
                    if (currentLetter == gameLetter)
                    {
                        MatchFound = true;

                        label = label.Remove(Index, 1);
                        label = label.Insert(Index, gameLetter.ToString());
                    }
                    Index++;
                }

                // Add the miss if the playe rmissed
                if (!MatchFound)
                {
                    tries++;
                    misses += gameLetter + ", ";
                }

                // Recurse
                ProcessKeyStroke();
            }
        }
    }
于 2012-04-05T13:11:54.867 に答える