C#我怎么能;保存“;随机生成的Class对象的特定副本
本文关键字:Class 副本 对象 怎么能 保存 随机 | 更新日期: 2023-09-27 18:00:29
我正在控制台上制作一款战舰游戏,我想实现一个回放系统,在那里我可以重新观看游戏。为此,我使用StreamWriter记录玩家的动作,在另一个循环中,StreamReader使用这些动作在屏幕上"回放"游戏。然而,船只的位置并不相同,因为它是在新游戏开始时生成的。NEWGAME循环与REPLAY循环相同,但在回放中,comp会通过streamreader自动移动,但地图不同,因为它总是随机生成的。我的问题是,如何保存在这种情况下属于类的"地图"的精确副本?提前感谢!如果你有任何问题,我可以回答。
switch (x)
{
case "newgame":
Mezo Játékos2Hajói= new Mezo();
Mezo Játékos1AmitLát = new Mezo();
Mezo Játékos1Hajói = new Mezo();
Mezo Játékos2AmitLát = new Mezo();
....
这为新游戏生成了场地,然后来了休息、玩家攻击等。
重播案例的工作原理与新游戏相同,但攻击是由计算机从流媒体阅读器插入的。
case "replay":
Mezo Játékos2VHajói= new Mezo();
Mezo Játékos1VAmitLát = new Mezo();
Mezo Játékos1VHajói = new Mezo();
Mezo Játékos2VAmitLát = new Mezo();
问题就在这里。这个案例为自己生成了一个新的,因为它不起作用,但在这里我想使用newgame".
这正是命令模式非常适合做的事情。下面是你可以做的事情的简化版本:
interface ICommand { void Execute(); }
class PlaceShip : ICommand
{
int x;
int y;
Ship ship;
public PlaceShip(int x, int y, Ship ship)
{
// Initialize fields
}
public void Execute()
{
// Place the ship
}
}
class Fire : ICommand
{
int x;
int y;
Player player;
public Fire(int x, int y, Player player)
{
// Initialize fields
}
public void Execute()
{
// Try to hit enemy
}
}
然后,您可以保留ICommand
对象的历史记录,只需再次迭代列表即可轻松回放。
您可以尝试使用XMLSerialize将整个类自动导出到结构化XMl。这是一种用XML制作对象完整副本的方法。