php备忘模式之星际争霸

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

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

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

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

 代码如下 复制代码

//备忘类

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;

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

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

时间: 2024-08-01 09:00:49

php备忘模式之星际争霸的相关文章

暴雪CEO否认星际争霸2免费模式 20美刀超值

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   <星际争霸2>在可预见的未来不可能变成 一款免费游戏,暴雪首席执行官Mike Morh aime称,"这样的一个概念还没有出现在<星际争霸2>的词典中".   在接受PC GamesN网采访时,Morhaime说,他听到这种涉及游戏免费的问题后,心情相当"沮丧",他说:"老是有人 提起这个

传《星际争霸2:自由之翼》单人战役模式破解补丁被放出

<星际争霸2:自由之翼>已经于27号正式上市,而今天传闻已有国外破解组织放出了该作单人战役模式的破解补丁.当然,大家完全可以稍微花点时间去台湾注册一个账号,公测期间免费.如果你只是想体验单人战役,那破解补丁可以帮你省去这些步骤. 具体是需要安装游戏后将补丁升级到16117升级补丁,然后再安装破解补丁就可以进入单人战役.有兴趣的玩家可以关注多玩星际2专区. (编辑 张澄)

不再支持局域网对战模式——这是暴雪对星际争霸2的最新决策

不再支持局域网对战模式--这是暴雪对星际争霸2的最新决策. 联系到之前暴雪对另一款游戏<暗黑破坏神3>同样的调整,这一切就显得"水到渠成".但我估计,做这一决策的时候,作为中国市场的运营方,网易公司也应该有推波助澜--假设星际争霸2和星际争霸一样,中国市场的正版率极低,也很少人到官方BN战网玩,网易代理这款游戏恐怕会赔得只剩下"为魔兽世界的运营做陪衬". 盗版.盈利模式的转型是暴雪痛下决心的两个主要原因,但这一次,暴雪的决定会是正确的么?起码它将面临一些

星际争霸2国服收费模式未定消息传月费25元

近日,<星际争霸2>的新闻不断,资深游戏行业从业人老刀99在腾讯微博上称,随着文化部过审星际2后,相信其余审批工作也即将完成.而较早前也有媒体透露网易已经开始着手3月份的重要产品宣传准备工作,日前据网易内部人事透露,相关的准备工作均已完成.如果网易顺利拿到版号,<星际争霸2>将于3月内在中国大陆上市.但是,目前星际2的收费模式还没有最终确定,之前有消息称将采用25元月卡的形式. 老刀99在腾讯微博上的发言 星际争霸2通过文化部审批 2月14日,有消息称<星际争霸2>已于

《星际争霸2》确认无局域网模式

据国外媒体报道,<星际争霸2>游戏设计高级副总裁Rob Pardo直截了当地说:"我们没有任何支持局域网的计划."然后进一步确认:"我们不会支持它." 五月中旬曾有流言称,<星际争霸2>将取消本地局域网对战模式,这让很多玩家觉得不可接受,消息的真实性也令人质疑.很遗憾,暴雪高管今天确认了这一传闻,<星际争霸2>确实不会再支持局域网了. 这样,想在<星际争霸2>里体验多人对战的乐趣就只能登陆官方战网Battle.net了

8G客户端无需下载星际争霸2光盘将可免费领取

4月2日消息,今日<星际争霸II>中文官方网站称中国玩家可在官方指定地点免费领取游戏客户端. <星际争霸2>客户端免费领取 据了解,此次网易在30个城市设置了136个客户端DVD免费领取点,玩家无需出示任何资料便可领取,但由于光盘数量有限,玩家将先到先得. 由于<星际争霸II>在中国采用点卡计费模式,购买客户端的性价比相对较低,玩家想要想玩到这款游戏多数还是选择从游戏官网下载客户端.但不少玩家由于网速限制,面对高达8G的客户端连连叫苦. 不久前<星际争霸2>

mysql一些操作个人备忘(持续更新)

安装mysql数据库目录 1./usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/home/mysql/var ##指定安装后的数据目录 mysql 启动/关闭 1./usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/.my.cnf --user=mysql & #启动 2./usr/local/mysql/bin/mysqladmin --default

mysql 数据库导入\导出(总结备忘)

 数据库的基本导入\导出的命令 是 mysqldump 和 source  在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是用命令行 另一个是用phpmyadmin   先来说说phpmyadmin 这个工具导出和导入很简单 而且导入时无需建库 直接还原成原来的数据库   用source  也可以还原 但他导入文件时有大小限制不能超过2M 再来说说  mysqldump 和 source  用命令操作很快 但是想把导出的文件再导入时必须先建立一个数据库(这个

jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)

JqGrid相关操作备忘 方法列表 1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选