我正在控制台制作一个战舰游戏,我想实施一个重播系统,我可以重新打开游戏。为此,我使用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中使用的那个"。
答案 0 :(得分:1)
这正是Command Pattern非常适合的事情。这是您可以做的简化版本:
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
个对象的历史记录。
答案 1 :(得分:0)
您可以尝试使用XMLSerialize自动将整个类导出到Structured XMl。这是一种用XML制作对象的完整副本的方法。