C# 评估2组枚举

C# 评估2组枚举,c#,C#,我正在写一个基于旧的智囊团游戏的简单控制台游戏。 游戏从一系列鸸鹋中随机生成4种颜色;绿色、蓝色、红色、紫色、黄色、浅绿色,用户需要按照正确的顺序猜出正确的颜色。为了帮助用户每次输入不成功的猜测,游戏需要返回黑色或白色标记。黑色表示它们在正确的位置有正确的颜色,白色表示它们有正确的颜色,但在错误的位置 即。 如果生成的随机桩为 位置1=绿色 位置2=蓝色 位置3=红色 位置4=紫色 用户猜测是 位置1=蓝色 位置2=红色 位置3=绿色 位置4=紫色 我需要返回1个黑钉和3个白钉作为位置4。颜色匹

我正在写一个基于旧的智囊团游戏的简单控制台游戏。 游戏从一系列鸸鹋中随机生成4种颜色;绿色、蓝色、红色、紫色、黄色、浅绿色,用户需要按照正确的顺序猜出正确的颜色。为了帮助用户每次输入不成功的猜测,游戏需要返回黑色或白色标记。黑色表示它们在正确的位置有正确的颜色,白色表示它们有正确的颜色,但在错误的位置

即。 如果生成的随机桩为

位置1=绿色

位置2=蓝色

位置3=红色

位置4=紫色

用户猜测是

位置1=蓝色

位置2=红色

位置3=绿色

位置4=紫色

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

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

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

我有一个失败的fullguess方法,我必须扩展它来评估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
#区域法
/// 
///设置随机生成的容器位置
/// 
公共void GeneratePegs()
{
m_GameGeneratedPegs=新PegContainer
{
PegPosition1=新Peg{color=GetRandomColourPeg()},
PegPosition2=新Peg{color=GetRandomColourPeg()},
PegPosition3=新Peg{color=GetRandomColourPeg()},
PegPosition4=新Peg{color=GetRandomColourPeg()}
};
Output.WriteColourLine(ConsoleColor.Red,“仅调试”);
m_控制台通讯器.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.color,
m_GameGeneratedPegs.PegPosition2.color,
m_GameGeneratedPegs.PegPosition3.color,
m_GameGeneratedPegs.peg位置4.颜色);
}
/// 
///验证用户猜测
/// 
公共void ValidateGuess(PegContainer userGuess)
{
if(m_GameGeneratedPegs.Equals(userGuess))
Susscess();
未成功的猜测(m_GameGeneratedPegs,userGuess);
}
私有PegColor GetRandomColorPeg()
{
PegColour=(PegColour)m_Rnd.Next(0,Enum.GetNames(typeof(PegColour)).Length-2);
返色;
}
私有空间Susscess()
{
m_ConsoleCommunicator.写下(“你赢了!!”);
Console.ReadLine();
}
/// 
///待办事项
/// 
///  
/// 
private void UnsuccessfullGuess(PegContainer gameGeneratedGuess,PegContainer userGuess)
{
////......
}
#端区

请帮助

来吧,算法设计是有趣的部分!这个网站更多的是为了解决一个特定的编程问题,而不是“为我写我的程序的逻辑!”但是如果它有帮助的话,下面是我的一些建议:

  • 数据结构:您可以使用
    Peg
    字典、数组或
    列表来代替
    Peg
    。这将允许您对循环或LINQ查询使用
    ,而不是对每个猜测位置与每个答案位置的所有排列进行硬编码。如果你想从4个钉子扩展到5个钉子,那就不费吹灰之力了
  • 算法:我首先检查精确匹配,然后从考虑部分匹配时排除任何精确匹配的PEG。否则,如果正确答案是四个绿色标记,并且用户猜测一个绿色标记(反之亦然),则可能会显示一个黑色标记和三个白色标记的结果分数,而不是一个黑色标记
  • 游戏详细信息:当您向用户显示结果时,我会首先显示所有精确(黑色)匹配,然后显示所有部分(白色)匹配。如果你不这样做,而是一个位置接一个位置,结果可能会泄露,比如说,位置1和3是完全匹配的,而位置2和4是部分匹配的

  • 祝你好运

    怎么帮?你有什么问题?这里有一些建议:成功不是拼成sussess:)