评估 2 组枚举

本文关键字:枚举 评估 | 更新日期: 2023-09-27 17:56:25

我正在编写一款基于旧策划游戏的简单主机游戏。游戏从 emuns 列表中生成 4 种随机钉子颜色;绿色,蓝色,红色,紫色,黄色,浅绿色,用户需要以正确的顺序猜测正确的颜色。为了帮助用户每次输入不成功的猜测时,游戏需要返回黑色或白色钉子。黑色表示它们在正确的位置具有正确的颜色,白色表示它们具有正确的颜色但处于错误的位置。

即如果随机挂钩生成为

位置 1 = 绿色

位置 2 = 蓝色

位置 3 = 红色

位置 4 = 紫色

用户猜测是

位置 1 = 蓝色

位置 2 = 红色

位置 3 = 绿色

位置 4 = 紫色

我需要返回 1 个黑色钉子和 3 个白色钉子,因为 Positon 4 的颜色匹配和位置 1-3 是正确的颜色,但顺序错误。

在我的代码中,颜色表示为分配给 Peg 类的枚举。我还有一个 PegContainer 类,它有 4 个 Peg 类型的挂钩位置属性

我正在实例化 2 个新的 PegContainers 对象,一个用于随机挂钩 (m_GameGeneratedPegs),一个用于用户的猜测(playerPegConatiner)

我有一个不成功的lGuess方法,我必须扩展它来评估m_GameGeneratedPegs和playerPegConatiner对象并将结果写回控制台

所以我需要计算与颜色和位置匹配的钉子并返回类似的东西(使用上面的例子)

1 x 黑色3 x 白

我当前的代码如下所示

 #region Method
    /// <summary>
    /// Sets the randomly generated PegContainer positions
    /// </summary>
    public void GeneratePegs()
    {
        m_GameGeneratedPegs = new PegContainer
                               {
                                   PegPosition1 = new Peg { Colour = GetRandomColourPeg() },
                                   PegPosition2 = new Peg { Colour = GetRandomColourPeg() },
                                   PegPosition3 = new Peg { Colour = GetRandomColourPeg() },
                                   PegPosition4 = new Peg { Colour = GetRandomColourPeg() }
                               };
        Output.WriteColourLine(ConsoleColor.Red, "DEBUG ONLY");
        m_ConsoleCommunicator.Write(string.Format("'n"));
        m_ConsoleCommunicator.Write(string.Format("Peg 1: {0}'nPeg 2: {1}'nPeg 3: {2}'nPeg 4: {3}'n'n",
            m_GameGeneratedPegs.PegPosition1.Colour,
            m_GameGeneratedPegs.PegPosition2.Colour,
            m_GameGeneratedPegs.PegPosition3.Colour,
            m_GameGeneratedPegs.PegPosition4.Colour));
    }
    /// <summary>
    /// Validates the user guess
    /// </summary>
    public void ValidateGuess(PegContainer userGuess)
    {
        if (m_GameGeneratedPegs.Equals(userGuess))
            Susscess();
        UnsuccessfullGuess(m_GameGeneratedPegs, userGuess);
    }
    private PegColour GetRandomColourPeg()
    {
        PegColour colour = (PegColour)m_Rnd.Next(0, Enum.GetNames(typeof(PegColour)).Length - 2);
        return colour;
    }
    private void Susscess()
    {
        m_ConsoleCommunicator.Write("You have won!!");
        Console.ReadLine();
    }
    /// <summary>
    /// todo
    /// </summary>
    /// <param name="gameGeneratedGuess"> </param>
    /// <param name="userGuess"></param>
    private void UnsuccessfullGuess(PegContainer gameGeneratedGuess, PegContainer userGuess)
    {
       ////......
    }
    #endregion

请帮忙

评估 2 组枚举

来吧,算法设计是有趣的部分!这个网站更多的是解决特定的编程问题,而不是"为我编写我的程序逻辑!但如果有帮助,这里有几件事我会建议:

  1. 数据结构:您可以使用Dictionary、数组或PegList,而不是PegContainer。这将允许您使用for循环或 LINQ 查询,而不是硬编码每个猜测位置与每个答案位置的所有排列。然后,如果您想从 4 个挂钩扩展到 5 个挂钩,那就不费吹灰之力了。
  2. 算法:我首先检查完全匹配,然后从部分匹配的考虑中排除任何完全匹配的挂钩。否则,如果正确答案是四个绿色钉子,而用户猜出一个绿色(反之亦然),则可能会显示一个黑色和三个白色钉子的结果分数,而不是单个黑色。
  3. 游戏详细信息:当您向用户显示结果时,我会首先显示所有确切的(黑色)匹配项,然后显示所有部分(白色)匹配项。如果你不这样做,而是逐个位置,结果可能会泄露,比如说,位置 1 和 3 是完全匹配的,而位置 2 和 4 是部分匹配的。

祝你好运!