【原创】纯OO:从设计到编码写一个FlappyBird (二)
第一部分请点这里。
续结前文,本文将实现Game类。
首先是实例变量。由上次的类图可以看出,Game类首先得具有如下实例变量:
0、Judge judge;
1、SimpleDraw draw; // 为什么不是接口类型?因为需要addMouseListener,而DrawBoard接口没有这个方法。。期待下一个版本的改进
2、Bing fang;
3、Obstacle obs;
我们需要控制游戏中帧变换的速度,因此,需要加入一个变量来标示速度:(帧变换的速度是什么?参见这篇文章)
0、private static final int TIME = 10;
最后,我们还需要一个变量来标示得分:
0、private int score;
由于DrawBoard的实现类需要在发生鼠标事件时通知Game类,因此,Game类还应该实现MouseListener接口。
我们也需要一个setup方法,来初始化全部的变量。同时需要一个start方法来开始游戏,最后需要一个end方法来打印游戏结束后的得分。
接下来讲讲start方法和MousePressed方法的实现。
start方法:
public void start()
{
int flag = 1;
while (flag > 0)
{
fang.action();
obs.move();
flag = judge.isGameOver(fang,obs);
if (flag == 2)
score ++;
draw.draw();
try
{
Thread.sleep(TIME);
} catch (Exception e)
{}
}
}
很简单,典型的游戏逻辑。judge接口实现的类提供一个判断游戏是否结束的方法,当其返回1时,没死,也没得分;当其返回2时,得分;当其返回0时,方sir就。。了
fang.action();让小鸟开始自己往下掉(摁一下就上升了)。obs.move();让障碍自己动起来,draw.draw();则是将更新后的图像重新画出来。那个try其实就是暂停下程序的运行而已。
然后是mousePressed方法:
public void mousePressed(MouseEvent e)
{
fang.beginUp();
}
更加简单,也好理解。点一下方sir就飞啦
Game类的全部代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; public class Game implements MouseListener {
Judge judge;
SimpleDraw draw;
Bing fang;
Obstacle obs; private static final int TIME = 10;
private int score; public Game()
{
score = 0;
} public static void main(String [] args)
{
Game game = new Game();
game.setup();
game.start();
game.end();
} public void setup()
{
JFrame frame = new JFrame(); fang = new SimpleBing(200,200);
obs = new SimpleObstacle(600);
judge = new SimpleJudge(fang,obs);
draw = new SimpleDraw(fang,obs); frame.getContentPane().add(draw); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
draw.addMouseListener(this);
frame.setSize(600,600);
frame.setVisible(true);
} public void start()
{
int flag = 1;
while (flag > 0)
{
fang.action();
obs.move();
flag = judge.isGameOver(fang,obs);
if (flag == 2)
score ++;
draw.draw();
try
{
Thread.sleep(TIME);
} catch (Exception e)
{}
}
} public void end()
{
System.out.println("Your score is " + score);
} public void mouseClicked(MouseEvent e)
{ } public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e)
{
fang.beginUp();
}
public void mouseReleased(MouseEvent e) {}
}
【原创】纯OO:从设计到编码写一个FlappyBird (二)的更多相关文章
- 【原创】纯OO:从设计到编码写一个FlappyBird (一)
说起来,自学计算机也有2年多的时间了,自己还没有从设计到编码,完完整整的设计一个基于面向对象的软件的经历..囧 于是,就有了这个系列.首先选用的语言是Java,没别的原因,HeadFirst设计模式是 ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (六)
第五部分请看这里 终于到了最后一个部分了! 这里使用SimpleJudge类来实现Judge接口. 首先是SimpleJudge需要的实例变量: 0.final LinkedList<Pilla ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (五)
第四部分请点这里 本文将实现DrawBoard. 如前文所述,Obstacle类和Bing类仅仅提供给DrawBoard必要的信息,如何绘制则完全委托给了DrawBoard,也就是说游戏关键类的细节和 ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (四)
第三部分请点这里 这里来实现Obstacle类.其实flappybird的本质就是小鸟原地掉,然后几根柱子在走.这也是在Game类里,用obs.move()来实现游戏逻辑的原因. 我们首先必须确定几个 ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (三)
第二部分请点这里 下面首先来实现Bing接口! 实现Bing接口的类取名SimpleBing. 容易发现,SimpleBing类总的来说要向下,但点击一下又得向上,向上到了一定界限又得向下,但我们又只 ...
- Qt 利用XML文档,写一个程序集合 二
接上一篇文章https://www.cnblogs.com/DreamDog/p/9213915.html XML文档的读写 一个根节点,下面每一个子节点代表一个子程序,内容为子程序名字,图标路径,e ...
- 后端开发实践系列之二——领域驱动设计(DDD)编码实践
Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there are f ...
- 领域驱动设计(DDD)编码实践
写在前面 Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there ...
- 【设计模式系列】之OO面向对象设计七大原则
1 概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2 七大OO面向对象设计 2.1 单一 ...
随机推荐
- TForm.ShowModal只是接管消息循环,禁止外部键盘和鼠标输入到别的窗口,但并不封锁其它窗口继续获取消息(比如WM_TIMER消息仍可被发送到别的窗口上)
窗体上放一个TTimer,然后双击输入: procedure TForm1.Timer1Timer(Sender: TObject); var cvs: TCanvas; Rect: TRect; S ...
- 完整导出IntelliJ IDEA的快捷键
工欲善其事,必先利其器. 常常和代码打交道的人,熟练使用IDE快捷键那是必须的,由于快捷键能够把你从各种罗嗦事中解放出来.比方,假设没有快捷键,你就须要常常性的暂停快速执行的大脑,右手凭记忆摸到鼠标, ...
- jQuery 弹出窗口的形式一直是具体案件的中心
在网上查 多 不是不符合无效;因此,一些自己总结,解决这个问题 原则: 常见问题: 弹出层居中了,背景也是半透明的 可是发现一拉动滚动栏立即就露馅了发现背景仅仅设置了屏幕所在段,其它部分都是原来 ...
- Java LinkedBlockingQueue和ArrayBlockingQueue分析
LinkedBlockingQueue是一个链表实现的堵塞队列,在链表一头增加元素,假设队列满.就会堵塞.还有一头取出元素.假设队列为空.就会堵塞. LinkedBlockingQueue内部使用Re ...
- SE 2014年4月22日(一)
实验 练习: 如图配置: 两自治系统 AS 100 和 AS 200 AS 100 是由两私有自治系统 (AS 65001 和 AS 65002)构成 要求配置BGP联盟 使得 R3 R4 R5 下 ...
- 谨记给UpdatePanel中动态添加的控件赋ID
原文:谨记给UpdatePanel中动态添加的控件赋ID 昨天下定决 心对上次做的布局编辑器控件加以改进,其中最主要变化的就是要完全使用ASP.NET AJAX!但是很遗憾,虽然耳闻已久,但目前对AS ...
- centos7图形配置 firewall-config
图形配置 firewall-config centos 7:systemctl stop firewalld.service #停止
- MongoDB--Getting Started with Java Driver
原文链接 http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/ 介绍 本文的目的是让你对怎样使用M ...
- 解决:Determining IP Information for eth0 一直停留 无法进入系统
问题场景: vm centos6.4网卡之前一直没异常,可今天启动时一直卡在Determining IP Information for eth0,无法进入系统.网上说了非常多办法,大多都是不着边的说 ...
- 可删除超炫&多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990).谢谢支持! 实例Demo下载地址在本文最后 简介 这个Demo主要是使用了cardsui ...