C# "我怎么能";“保存”;随机生成的类对象的特定副本?
我正在控制台中制作战舰游戏,我想实现一个重播系统,在那里我可以重新观看游戏。为此,我使用StreamWriter记录玩家的动作,在另一个循环中,StreamReader使用这些动作在屏幕上“回放”游戏。但是,船的位置不同,因为它是在新游戏开始时生成的。 NEWGAME循环与REPLAY相同,但在REPLAY中,comp会通过streamreader自动进行移动,但是,地图不同,因为它总是随机生成的。 我的问题是,在这种情况下,如何将“地图”的精确副本保存为类? 提前谢谢!如果你有任何问题我可以回答C# "我怎么能";“保存”;随机生成的类对象的特定副本?,c#,class,object,save,C#,Class,Object,Save,我正在控制台中制作战舰游戏,我想实现一个重播系统,在那里我可以重新观看游戏。为此,我使用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
类来生成映射,因此最好只保存种子,而不是完整关卡映射。例如,种子在调试时非常有帮助,因为它将生成相同的序列。我宁愿保存将地图上的船只保持原样。有什么方法可以轻松做到这一点吗?我有一种方法可以将船只放置在地图上。如果我能保存一个实例并重用它,那就太好了。