00:02
游戏角色恢复这么一个应用实力来看一下,前面呢,我们讲到了游戏角色恢复的这个需求,但是呢,我们一直没去解决,对不对,现在我们已经对。备忘录模式有一定的了解了,现在我们来把这个游戏游戏角色恢复的这么一个实例,我们来完成一下需求,就是前面的就是游戏角色呢,它有两个属性,一个是攻击力,一个是防御力。他在大战之前呢,他要保存一下自己的状态,然后大战过后呢,他的攻击力和防御能力会下降,完了把这个大战结束以后,再从备忘录对象恢复到大战之前的状态,就这么一个需求。好,嗯,根据这个需求来说呢,我们仍然是老规矩,对不对,我们还是什么老规矩呢,我们先画类图,再写代码来,我们新建一个包,这个包呢,我们就叫game,就是我们的游戏。好,那仍然我们来画出这一个应用实例对应的类图。
01:06
当然,我们需要使用备忘录模式,根据这个分析呢,我们首先先画一个ma mament。OK,那大家想一想,这里面应该有哪些属性?根据他的需求肯定有两个,一个是他的攻击力,比如说这个攻击力我们叫做wait,好吧,或者叫attack都行。那这个是个特值。呃,还有一个什么属性呢,各位同学还有一个防御能力,比如说叫D。也是一个int值,用它的一个数字来表示它的防御能力和它的一个攻击能力。好的,那这样写完以后,同学们是不是我们应该有个car?Take。Taer,那么同学们看到,因为在整个过程中,他的需求只是一个状态,也就说他在大战之前保存一个,然后再恢复,所以说在这里呢,我们就根据他的需求来说,来说呢,没有必要再做一个集合,直接保存一个就行了,我们写一个每每ment。
02:18
Mament的一个一一个属性类型,就是上面的mament。说了啊,这个care taker下面可可以是个集合,也可以是单个的,因为如果如果你只是对一个游戏角色的呃,状态只保存一次,那就没有必要做成集合了,咱们就保一保存一个就行了。这个写完了以后,同学们看可以看到它会聚合到我们这个car take里面去,然后我们再有一个origin origin呢,我们就叫game。这是我们的游戏的角色,当然这个游戏角色里面呢,必须有一个操作,就是创建,对不对,那这边我们写一个叫做create create什么。
03:05
Ment,对不对?他会创建这么一个备忘录。然后呢,这边会返回一个,然后我才能把它装进去,所以返回一个ment。这样的对象实例。Client,当然这个地方也是原先一样关系,它会用到它,然后呢,我们还有一个client client怎么用呢,各位同学。当然了,兰呢,他会用到这个游戏角色,同时呢,它会创建一个mment头是吧,然后把它放进去就完了,这是他的一个案例。好,现在呢,我们走走一下代码非常的简单,现在我们按顺序来编写,首先我们先写,没懂。对。那这个类里面我们想一想有什么属性哈,我们来一起看一下。看一下,首先我们觉得这里面有这么几个字,第一个是攻击力。对,攻击力根据刚才分析呢,我们就叫就int吧,Wait,好吧,再来一个防御能力也是个int Di。
04:04
就OK。然后呢,我们拿一个构造器。对,来一个构造器,这个构造器里面呢,直接把这个纸放进去,放进器过后就是你如果创建一个M头,就把它的攻击力,还有它的防御力,这是它防御。对,防御力。给到我们这个M头初始化就可以了。然后这边呢,我们肯定会有一系列的get和set方法,这个呢也给他好吧。Get set方法有了。好,这个第一个min头我们就写完了,下面呢,我们写cartaker。来,走一个。Take。CA。TR。那么我们说了,在这个caretake里面呢,它会它是一个守护者对象,前面我们已经分析过是吧,他是一个守护。守护守护者对象。
05:00
守护者对象干什么呢?它保存,保存这个游戏。对,游戏角色。的什么样状态,是这样子吗?那在这里面呢,我们有几个写写法,如果只如果啊,这地方如果值。只保存一次一次状态,那么这个地方我们就就可以这样写private明。对里面有个M名头就可以了,那如果说你要你要,如果你你要保存多个对一个对象,如果个对原始对象,比如说对我们这个,呃,Game roll保存保存多次。对,我就写了啊多次状态,那么这个时候呢,你可以这样写private怎么写啊。就是我们有个a list。是不是把它放到这里面不就完了吗?Or list里面有个。
06:00
对,然后这边我们写一个MSMMS这样就可以了,那如果说如果说你要对多个多个游戏。注意听游戏角色。角色保存多个状态,那又那要怎么写呢?那就换成这个,就写个哈希map。对,哈希map,哈希map里面呢,你用一个实骏表示它的这个编号,或者叫ID。啊,当然这个类型应该是string的。石俊。然后它对应的这里面这个值呢,可以放成这个。OK,那这边就也是一个momentment list了,你写一个叫做,多个叫做。没名头啊,这份大写,所以说你根据你的需求,你来选择你合适适适合你需求的这个代码就可以了,并不难,对不对,因为现在呢,我只有一个游戏角色,而且只保存一次,那我就用上面这个明白吧,我写我我把这个代码保留到这里。
07:06
好的。嗯,有了这个东西过后呢,他这个有了过后,那这个对对我们来说就比较简单了,我们。我们来这个返回这个明明有个get,有个set就行。没问题吧,同学们。那也就说这个character,我要得到的话呢,我get一下,他就把这个返回来赛呢,我把这个M放进去,他就创建起来一个,呃,创建一次这个游戏解说的对策,呃,那个状态。这个也写完了,下面我们应该写哪个呢?Game roll OK,这是我们的。这个游戏角色,那写到game roll没问题吧,Game roll。那这个game面肉呢?我们里面至少需要几个属性,刚才大家已经分析出来,这要有两个private,一个是它的攻击力T。还有一个什么呀,他的一个防御力。游戏角色里面有这两个东西对不对?好,那现在呢,我们来写一个构造器,构造器呢,哦,我们我们看要要创建啊,待会再说构造器的时候先创建一个。
08:11
创建什么呢?创建M名头。就是你这个角色,我要创建一个M,是通过你这个角色来创建的,所以说我这边是创建一个M。及及根据,根据游戏角色的当前的当前的属状态。状态得到。得到一个什么头?好,这个对我来说很简单,那就写了public什么呀。OK,然后呢,我们就写个create创建名头啊这个单词命。名头OK,那怎么来创建呢?非常的简单,RETURN61个。命运头是不是另一个们当前这个位和debt,呃,Di就可以了,拿到了,那拿到以后同学们想一想,我们这个是根据当前的这个游戏的状态得到了一个绵绵头,那大家想是不是我们还应该有什么样恢复?
09:12
啊,就是会,嗯,从什么呢,从这个备忘。备忘录对象恢复。恢复什么呢,这个game。Game road这个状态是不是也应该有这样一个方法,那我写public。Void recover。Co v recover什么呢?我们的recover,呃,我们的这个role,呃,呃,Game role是这样是吧,同学们。那你要恢复我们这个,恢复我们这个,呃,Game应该是from什么呢?From这个min头过来的是是这个意思吧,名字有点长,好,那你要回复的话,你首先得干什么,你把这个mment头给我。所以这个M你从哪拿拿到的,那是你的事啊,你你会给我拿到这个东西,我们就可以恢复了,怎么恢复呢?但是this点位等于你传进来的这个绵面对象里面得到它的攻击力,然后this Di。
10:11
然后通过这个M对象得到它的一个防御力,好,这就恢复了。是不是好,现在呢,我们再写一个办法,显示当前游戏角色的什么呀?呃,一个状态。这个并不难,对不对?那么写一个方法就行了,Public void display。Display,那当这个display我们应该怎么写呢?直接写就行了,我们就说呃,游戏角色,角色当前的攻击力,攻击力。把这个值输出就是this点。This点位再加上它的一个防御力。OK,这样写防御御力。
11:00
那么它的防御力等于多少呢?显然是this deep。好,这就回复到了。啊,因为我现在这面就有,我就没有用get方法了,直接写出来就行了好吧。大家想想,此时此刻我们还应该有什么方法,还应该有什么方法?因为你将来这些防御力和攻击力有可能被外面来访问。说说,我们也给他提供一段get set方法。好,代码就写完了。好,现在我们已经写到哪了,把这个game roll也写完了,下面最后有一个client,把C用一下,给大家演示一下就可以了。好吧,来写个client。CT把主方法给勾上。那现在我们来看一下怎么去用它呢?跟前面用法其实大同小异,首先我们创建游戏角色。OK,非常简单,六一个camera。那这个嗯,这个游戏角色刚刚出来的时候呢,它的攻击力比如说是100分。
12:02
满血,然后他的防御能力OK,也是100满血。好,现在呢,他开始跟这他怎么说呢,嗯,大战前把他状态打出来。写一下啊。大战之前和。Boss和boss。诶,这个怎么回事,Boss大战前。大战前的这个状态。我们。可以把它输出来,非常简单,那就是game roll,我们display一下就可以了,没问题吧,那现在大战前是这个状态,现在又开始大战了,那大战前的状态输出来过后,你必须把它保存起来,是不是把当前。这个状态状态,呃,保存到保存到保存到这个卡。这个是不是是不是应该用一个caretaker来保存呢。
13:02
他take。好,现在呢,我们来写一遍,六一个caretaker。OK。拿到了,那么我们同时呢,把这个,嗯,那就这样写了开,里面有一个方法叫做点。干什么呀,Set把这个状态保进去,六一个通过这个角色来创建了,因因为因为我们要保存就是这个游戏当前的角色,所以说就很简单了,就game roll。他在里面是不是直接有个create。而且这个create minute呢,M就是根据它的属性来创,来创建返回的一个minute,好这个就保存自己的状态了,保存自己状态过后呢,现在他开始比开始和我,我得说说一句话和什么呢?和boss大战。和boss大战。哦,和boss呢,开始大战,大战过后呢,他这个体力攻击力就会有所有所下降,我们给他改一下点赛,比如说它下降到了30。
14:07
再比如说他的攻击力也下降到30,那现在大战过后我们输输出一下他的状态。game.display也就是说。跟boss大战过后呢,他的状态变成这个样子了,好,我们现在准备恢复他,来,我们恢复他一把,现在大战后我们恢复。好,写到这里啊,大战后,大战后。大。战后。使用。使用备备忘录。备忘录对象。被忘录对象恢复。恢复元气,恢复到大战前。好,那这个地方就比较easy了,那么我们怎么恢复呢?非常的简单,是不是我们调用我们这game。
15:00
点它有个recover。是不是就可以了,那你要恢复到大量前,那这个memory你要取出来呀,那你怎么取呢?同学们想是不是通过这个卡take。把他的这个返回来就可以了,恢复恢复完了过后,我们再把他的状态输出来。恢复后的状态。恢复后的状态,OK,那同样我们用game roll点什么呀?Display,好,同学们看看这个代码是不是跟我们想的一样。OK,注意看数据。同学们可以看到,嗯,大体的情况呢,应该是这样子的,大战之前呢,游戏是一百一百和boss,大战过后呢,游戏当前的。这个攻击力变30,防御能力变30,大战过后使用备忘录对象恢复到战前恢复后的状态呢,又是100~100,好同学们,这个呢,就是我们一个比较经典的。就是使用备忘录来完成游戏角色他的状态的恢复和保存的案例,看看大家能否理解,其实也不是很难,对不对,也不是很难,好同学们,那关于这个实例我们就给大家讲到这里,大家好好的去体会一下,尤其是要把这个图看懂。
16:16
只要你把这个图看懂了,都没什么太多的难度,好,这节我们就讲到这里。
我来说两句