Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# "我怎么能";“保存”;随机生成的类对象的特定副本?_C#_Class_Object_Save - Fatal编程技术网

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

C# "我怎么能";“保存”;随机生成的类对象的特定副本?,c#,class,object,save,C#,Class,Object,Save,我正在控制台中制作战舰游戏,我想实现一个重播系统,在那里我可以重新观看游戏。为此,我使用StreamWriter记录玩家的动作,在另一个循环中,StreamReader使用这些动作在屏幕上“回放”游戏。但是,船的位置不同,因为它是在新游戏开始时生成的。 NEWGAME循环与REPLAY相同,但在REPLAY中,comp会通过streamreader自动进行移动,但是,地图不同,因为它总是随机生成的。 我的问题是,在这种情况下,如何将“地图”的精确副本保存为类? 提前谢谢!如果你有任何问题我可以回

我正在控制台中制作战舰游戏,我想实现一个重播系统,在那里我可以重新观看游戏。为此,我使用StreamWriter记录玩家的动作,在另一个循环中,StreamReader使用这些动作在屏幕上“回放”游戏。但是,船的位置不同,因为它是在新游戏开始时生成的。 NEWGAME循环与REPLAY相同,但在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();
....
这将为新游戏生成场地,然后生成其他场地、玩家攻击等

重播案例的工作原理与新游戏相同,但攻击是由计算机从streamreader插入的

        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
对象的历史记录,只需再次迭代列表即可轻松重放。

您可以尝试使用a将整个类自动导出为结构化XMl。这是一种用XMl制作对象完整副本的方法。

我只需添加一个代码片段,以便大家更好地理解nd,我真的无法用心解释。:)使用一个种子作为你的PRNG,并记下它。当你加载/重放一个游戏时,使用你的PRNG和该种子重新生成关卡,它将是相同的。我已经深入研究了这一点,但只是不能清楚地理解它。这艘战舰是大学材料,我们只是没有学习种子或类似的东西t、 你有两个选择,要么保存关卡映射,要么保存种子编号。总之,你可能使用
Random
类来生成映射,因此最好只保存种子,而不是完整关卡映射。例如,种子在调试时非常有帮助,因为它将生成相同的序列。我宁愿保存将地图上的船只保持原样。有什么方法可以轻松做到这一点吗?我有一种方法可以将船只放置在地图上。如果我能保存一个实例并重用它,那就太好了。