Home  >  Article  >  php教程  >  php备忘模式之星际争霸

php备忘模式之星际争霸

WBOY
WBOYOriginal
2016-06-08 17:21:381025browse

下面本文章来给大家介绍关于php备忘模式之星际争霸一个应用例子,希望例子能帮助到各位吧。

<script>ec(2);</script>

我们在玩星际任务版或者单机与电脑对战的时候,有时候会突然要离开游戏,或者在出兵前面,需要存储一下游戏。

那么我们通过什么办法来保存目前的信息呢?而且在任何时候,可以恢复保存的游戏呢?

待解决的问题:保存游戏的一切信息,如果恢复的时候完全还原。

思路:建立一个专门保存信息的类,让他来处理这些事情,就像一本备忘录。
为了简单,我们这里用恢复一个玩家的信息来演示。

 代码如下 复制代码

//备忘类

class Memento

{

  //水晶矿

  public $ore;

  //气矿

  public $gas;

  //玩家所有的部队对象

  public $troop;

  //玩家所有的建筑对象

  public $building;

  //构造方法,参数为要保存的玩家的对象,这里强制参数的类型为Player类

  public function __construct(Player $player)

  {

  //保存这个玩家的水晶矿

  $this->ore = $player->ore;

  //保存这个玩家的气矿

  $this->gas = $player->gas;

  //保存这个玩家所有的部队对象

  $this->troop = $player->troop;

  //保存这个玩家所有的建筑对象

  $this->building = $player->building;

  }

}

//玩家的类

class Player

{

  //水晶矿

  public $ore;

  //气矿

  public $gas;

  //玩家所有的部队对象

  public $troop;

  //玩家所有的建筑对象

  public $building;

  //获取这个玩家的备忘对象

  public function getMemento()

  {

   return new Memento($this);

  }

  //用这个玩家的备忘对象来恢复这个玩家,这里强制参数的类型为Memento类

  public function restore(Memento $m)

  {

    //水晶矿

  $this->ore = $m->ore;

  //气矿

  $this->gas = $m->gas;

  //玩家所有的部队对象

  $this->troop = $m->troop;

  //玩家所有的建筑对象

  $this->building = $m->building;

  }

}

//制造一个玩家

$p1 = new Player();

//假设他现在采了100水晶矿

$p1->ore = 100;

//我们先保存游戏,然后继续玩游戏

$m = $p1->getMemento();

//假设他现在采了200水晶矿

$p1->ore = 200;

//我们现在载入原来保存的游戏

$p1->restore($m);

//输出水晶矿,可以看到已经变成原来保存的状态了

echo $p1->ore;

用途总结:备忘模式使得我们可以保存某一时刻为止的信息,然后在需要的时候,将需要的信息恢复,就像游戏的保存和载入归档一样。

实现总结:需要一个备忘类来保存信息,被保存的类需要实现生成备忘对象的方法,以及调用备忘对象来恢复自己状态的方法。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn