C# 评估2组枚举
我正在写一个基于旧的智囊团游戏的简单控制台游戏。 游戏从一系列鸸鹋中随机生成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白色 我当前的代码如下所示C# 评估2组枚举,c#,C#,我正在写一个基于旧的智囊团游戏的简单控制台游戏。 游戏从一系列鸸鹋中随机生成4种颜色;绿色、蓝色、红色、紫色、黄色、浅绿色,用户需要按照正确的顺序猜出正确的颜色。为了帮助用户每次输入不成功的猜测,游戏需要返回黑色或白色标记。黑色表示它们在正确的位置有正确的颜色,白色表示它们有正确的颜色,但在错误的位置 即。 如果生成的随机桩为 位置1=绿色 位置2=蓝色 位置3=红色 位置4=紫色 用户猜测是 位置1=蓝色 位置2=红色 位置3=绿色 位置4=紫色 我需要返回1个黑钉和3个白钉作为位置4。颜色匹
#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个钉子,那就不费吹灰之力了
祝你好运 怎么帮?你有什么问题?这里有一些建议:成功不是拼成sussess:)