继续题外话:
上一篇忘记发布到博客频道了,都没有人看到,这次一定不要忘记了,上一篇发的牢骚要看哦
/* --------------------------------------------正文分割线------------------------------------- */
记录分数的时候要更新视图(虽然现在还没显示分数,但是先做个准备),另外一半速度也跟它有关,或者会有什么奖励提示之类的东西,所以说分数的更新需要做很多操作,谈到这里,我想有些人已经想到了观察者模式(Observer),没错,就是用观察者模式。
Scoring接口,用来记录分数,在模式中充当Subject角色;
SimpleScoring类,实现Scoring,简单记录分数;
ScoreChengeListener接口,观察者(或者说是监听器),监听分数更改事件做出相应处理;
SpeedManager类,速度管理器,可以设置速度,控制时间(具体看代码中的isTimeUp方法);
ScoreSpeedManager类,继承SpeedManager,监听分数来修改速度。
package snakes;
/**
* 计分器,用来记录分数,可以添加 <code>{@link ScoreChangeListener}</code> 获取分数更新
*
* @author Chris
* @see ScoreChangeListener
*/
public interface Scoring {
/**
* 添加 <code> ScoreChangeListener </code>
*
* @see ScoreChangeListener
*/
public void addScoreChangeListener(ScoreChangeListener listener);
/**
* 获取分数
*
* @return
*/
public int getScore();
/**
* 删除 <code> ScoreChangeListener </code>
*
* @see ScoreChangeListener
*/
public void removeScoreChangeListener(ScoreChangeListener listener);
/**
* 重置分数
*/
public void reset();
/**
* 计分
*
* @return
*/
public void scoring();
/**
* 设置分数值
*
* @param score
* @return
*/
public void setScore(int score);
}
package snakes;
import java.util.HashSet;
import java.util.Set;
public class SimpleScoring implements Scoring {
private int score;
private Set<ScoreChangeListener> listeners;
public SimpleScoring() {
this(0);
}
/**
* 构造函数,设置初始分数
* @param score
*/
public SimpleScoring(int score) {
this.score = score;
listeners = new HashSet<ScoreChangeListener>();
}
@Override
public void addScoreChangeListener(ScoreChangeListener listener) {
listeners.add(listener);
}
@Override
public int getScore() {
return score;
}
private void notifyScoreChange()
{
for(ScoreChangeListener lis:listeners)
{
lis.scoreChanged(score);
}
}
@Override
public void removeScoreChangeListener(ScoreChangeListener listener) {
listeners.remove(listener);
}
@Override
public void reset() {
score = 0;
notifyScoreChange();
}
@Override
public void scoring() {
++score;
notifyScoreChange();
}
@Override
public void setScore(int score) {
this.score = score;
notifyScoreChange();
}
}
package snakes;
/**
* 用来监听分数更改事件的类
*
* @author Chris
* @see Scoring
*/
public interface ScoreChangeListener {
public void scoreChanged(int score);
}
package snakes;
public class SpeedManager {
private volatile int speed;
private long curTime = System.currentTimeMillis();
/**
*
* @param speed
*/
public SpeedManager(int speed) {
if (speed <= 0)
throw new IllegalArgumentException("speed must be positive");
this.speed = speed;
}
/**
* 手动更新时间点
*/
public void frashTime() {
curTime = System.currentTimeMillis();
}
public int getSpeed() {
return speed;
}
/**
* 判断是否到下一个更新时间点,如果是则更新时间点
*
* @return
*/
public synchronized boolean isTime() {
long time = System.currentTimeMillis();
if (time - curTime > (1000 / speed)) {
curTime = time;
return true;
}
return false;
}
public void setSpeed(int speed) {
if (speed <= 0)
throw new IllegalArgumentException("speed must be positive");
this.speed = speed;
}
}
package snakes;
public class ScoreSpeedManager extends SpeedManager implements
ScoreChangeListener {
public ScoreSpeedManager(int speed) {
super(speed);
}
@Override
public void scoreChanged(int score) {
setSpeed(score+1);
}
}
分享到:
相关推荐
NULL 博文链接:https://chrisbing.iteye.com/blog/1700581
NULL 博文链接:https://chrisbing.iteye.com/blog/1700345
13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13...
2--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--...
41--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码41--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码41--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码41...
54--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码54--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码54--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码54...
1--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码1--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码1--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码1--...
8--[贪吃蛇大作战].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码8--[贪吃蛇大作战].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码8--[贪吃蛇大作战].zip源码scratch2.0 3.0编程项目源文件源码...
本文为51单片机项目实战---贪吃蛇,附有原理图和程序代码,希望对你的学习有所帮助。
javaweb毕业设计-JAVA贪吃蛇游戏毕业设计(源代码+lw)(可做课程设计).rarjavaweb毕业设计-JAVA贪吃蛇游戏毕业设计(源代码+lw)(可做课程设计).rarjavaweb毕业设计-JAVA贪吃蛇游戏毕业设计(源代码+lw)(可做课程设计)....
贪吃蛇是一款经典的游戏,本资源中包含实现这个游戏的VC++源代码!
本资源包含完整的C语言版的小游戏“贪吃蛇”的源代码。读者可以自行下载,推荐使用Dev-C++来进行演示。希望可以满足读者的需要。代码之路,无穷无尽。加油!!!!!!!!!!!
Android示例程序Snake贪吃蛇代码 http://blog.csdn.net/manp1212/article/details/7692020
C语言作业-C语言贪吃蛇小游戏C语言作业-C语言贪吃蛇小游戏C语言作业-C语言贪吃蛇小游戏C语言作业-C语言贪吃蛇小游戏C语言作业-C语言贪吃蛇小游戏C语言作业-C语言贪吃蛇小游戏C语言作业-C语言贪吃蛇小游戏C语言作业-...
C语言--贪吃蛇相关PPT
cocos2dx实现的简单贪吃蛇游戏,包含代码和资源
cocos2d-x 贪吃蛇源代码!
这是一个用cocos2d-x3.14和vs2013编译的简单贪吃蛇代码。
Java课程设计--贪吃蛇 东软05-3 解压后用JDK运行就可以了!! 绝对可用