我目前正在使用Visual Studio控制台制作棋盘游戏,我想在最后使用队列重放整个游戏。为了做到这一点,我确保每次绘制我的板时都会排队,以便将该板的实例添加到队列中。
我如何实例化队列:
Queue replay = new Queue();
每次更新电路板时使用的代码:
draw.UpdateBoard(board);
replay.Enqueue(board);
用于在结尾显示董事会所有实例的代码:
foreach (int[,] q in replay)
{
draw.UpdateBoard(q);
System.Threading.Thread.Sleep(1000);
}
遇到的问题是队列中只包含其最终状态的板的实例,我认为这是因为队列只能包含唯一值,因此当尝试添加到队列时它会覆盖所有队列先前的价值观。通过阅读其他示例,可以建议创建对象的新实例或将原始数据添加到队列中。由于这些与2D数组没有关系,我很难与之相关,有没有办法解决这个问题而不会在很大程度上改变我的代码流程?
答案 0 :(得分:-1)
"当您将其排入重播时,您需要克隆该板。问题是当你将一个板状态排队时,你实际上是在指向代表该板的数据的指针。" - 萨姆纳埃文斯
replay.Enqueue(board.Clone);
然后会解决问题。