刽子手两个词正则表达式

时间:2012-04-05 12:22:30

标签: c# regex

当一个单词有一个空格(意思是有两个单词)时,我想在该索引中加一个正斜杠。

所以:你好= _ _ _ _ _ / _ _ _ _ _

目前我的游戏将所有角色转换为下划线,因此如果用户输入两个单词,则另一个玩家将永远不会将该单词改为正确。

所以我需要做的是基本上用正斜杠替换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
    }

知道如何修改它们以允许游戏使用两个单词吗? 任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:1)

不是循环遍历每个char,只需使用正则表达式模式匹配并首先替换空格,然后替换字母数字字符

    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();
    }

希望您觉得这有用:)

答案 1 :(得分: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();
            }
        }
    }

答案 2 :(得分:0)

虽然我认为使用正则表达式来修复一些显示和输入内容是一个巧妙的想法,但我会更进一步将所有与游戏相关的逻辑放在一个处理大部分输入和状态的类中

如果你不介意的话,我已经组建了一个简单的概念验证类,它也应该为Windows Phone编译:https://github.com/jcoder/nHangman

主要观点:

  • 包含解决方案字符的内部列表,如果是空格或猜到的字符,则每个都包含相关信息
  • 处理单个字符猜测
  • 处理完整的解决方案猜测
  • 存储所有猜测的数量和失败的猜测
  • 提供了一种检索当前状态为猜测
  • 的字符串的方法

当然,这个课程并不完整,但可能会提供一些如何实现主要“游戏引擎”的想法。