评估 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
请帮忙
来吧,算法设计是有趣的部分!这个网站更多的是解决特定的编程问题,而不是"为我编写我的程序逻辑!但如果有帮助,这里有几件事我会建议:
-
数据结构:您可以使用
Dictionary
、数组或Peg
的List
,而不是PegContainer
。这将允许您使用for
循环或 LINQ 查询,而不是硬编码每个猜测位置与每个答案位置的所有排列。然后,如果您想从 4 个挂钩扩展到 5 个挂钩,那就不费吹灰之力了。 - 算法:我首先检查完全匹配,然后从部分匹配的考虑中排除任何完全匹配的挂钩。否则,如果正确答案是四个绿色钉子,而用户猜出一个绿色(反之亦然),则可能会显示一个黑色和三个白色钉子的结果分数,而不是单个黑色。
- 游戏详细信息:当您向用户显示结果时,我会首先显示所有确切的(黑色)匹配项,然后显示所有部分(白色)匹配项。如果你不这样做,而是逐个位置,结果可能会泄露,比如说,位置 1 和 3 是完全匹配的,而位置 2 和 4 是部分匹配的。
祝你好运!