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".

C#我怎么能;保存“;随机生成的Class对象的特定副本

中使用的那个

这正是命令模式非常适合做的事情。下面是你可以做的事情的简化版本:

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制作对象完整副本的方法。