JAVA版2048

一. 应用场景与案例

前一段时间2048比较火,所以本案例是应用观察者模式完成JAVA版2048游戏。

游戏预览:2048该游戏使用方向键让方块上下左右移动。如果两个带有相同数字的方块在移动中碰撞,则它们会合并为一个方块,且所带数字变为两者之和。每次移动时,会有一个值为2或者4的新方块出现。当值为2048的方块出现时,游戏即胜利。

二. 案例分析与问题

2048游戏需要让用户清楚地了解到每个方格中数字的变化,所以我们需要有一个视图实现数据有目的显示。

由于该游戏需要使用方向键让方块实现对数据的控制,所以我们就需要控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

如果两个带有相同数字的方块在移动中碰撞,则它们会合并为一个方块,且所带数字变为两者之和。每次移动时,会有一个值为2或者4的新方块出现。当值为2048的方块出现时,游戏即胜利。所以我们需要有一个模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。

本游戏使用观察者模式可以很好的实现很多功能,比如多人同时竞技游戏,互相之间可以观察竞争对手的游戏比赛状况,和实现多人同时观看一人比赛,用户可以根据自己的需求选择不同的难度等,增加了游戏的趣味性和比赛的紧迫感。

 

 

三. 角色描述与UML图

 

Subject:

 主题接口Subject规定了具体主题需要实现的添加、删除观察者以及通知观察者更新数据的方法。

Observer:

 观察者接口规定了具体观察者用来更新数据的方法。

Frame:

 具体主题Frame通过updata()方法来通知具体观察者,实现的方法是遍历具体主题用来存放观察者引用的集合,并让集合中的每个具体观察执行观察者接口(Observer)规定更新数据的方法。

CalculatorEasy:

CalculatorDifficult:

 具体观察者(Calculator)观察着主题类数据的变化,每当主题类中用客户通过按钮请求数据发生变化时,具体观察者(Calculator)会调用相应的方法完成请求,并将变化后的数据发送给具体主题类。

五.程序运行结果

posted @ 2016-06-06 17:01  Mossad-K  阅读(574)  评论(0编辑  收藏  举报