原帖地址:http://blog.csdn.net/roderick2015/article/details/52728053,转载请注明。
想必玩过网络游戏的读者都知道任务系统,就是有人交给你个任务,然后你去完成这个目标。比如打打怪什么的,像下面这张图所示,是让你去消灭一个叫做隔壁家老王的怪物。
当你达成目标后,系统会提示你任务完成,还会给你点小奖励。那系统是怎么跟踪任务的,它怎么就知道你完成了呢?今天我们就从游戏的角度来了解观察者模式,首先我们需要编写玩家和任务系统两个对象,最后在场景类中进行调用。
玩家类
玩家就是干三件事:1接受任务,2找到任务怪,3消灭怪物,然后更新notify标志位,好让监听对象知道你的状态。
啥,隔壁老王长啥样?可能是这个样子吧。
public class Player {
private String name = "张三"; //玩家的名字
//标志位为true时,表示有状态更新,监听者会获取最新状态
private boolean notify = false;
/**
* 接受任务
*/
public void receiveTask() {
System.out.println(this.name + "接受任务:危险:隔壁家老王");
System.out.println("任务进度:0/1 消灭隔壁家老王");
}
/**
* 找啊找啊找怪物
*/
public void findMonsters() throws InterruptedException {
Thread.sleep(1000); //找怪物是要时间的
System.out.println(this.name + "找到隔壁家老王,开始揍它!");
}
/**
* 攻击怪物
*/
public void attack() {
System.out.println(this.name + "扇了隔壁家老王两个大耳巴子!");
System.out.println("隔壁家老王被" + this.name + "揍扁了。");
//怪物揍完了,修改更新标志位notify
setNotify(true);
}
//setter和getter方法省略
}
任务系统类
这个类其实是个线程,所以继承了Thread类。它会不停的循环获取玩家notify状态,当为true时,更新任