第一部分请点这里

续结前文,本文将实现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) {}
}

最新文章

  1. c#委托----我的一点笔记
  2. C语言关于利用sscanf实现字符串相加减
  3. MindManger学习技巧
  4. 写在开始编写Java之前(2)——Java的环境
  5. xdebug影响php运行速度
  6. 苹果被拒的血泪史。。。(update 2015.11)
  7. 遍历Jenkins全部项目的配置
  8. c#编写的基于Socket的异步通信系统
  9. 初识Redis系列之一:简单介绍
  10. centos7 ping不通 name or service not known
  11. linux用法总结
  12. react学习笔记(一)用create-react-app构建 React 开发环境
  13. GOIP connects with Elastix through “config by line”
  14. ajaxupload 异步上传工具
  15. 南京邮电大学网络攻防平台——WriteUp(持续更新)
  16. PHP之string之str_shuffle()函数使用
  17. python迭代器生成器
  18. Windows环境下的TensorFlow安装过程
  19. ModelShowDialog缓存上次浏览的URL
  20. CKEditor4x word导入不保存格式的解决方案

热门文章

  1. 终于懂了:TControl.Perform是有返回值的,且看VCL框架如何利用消息的返回值(全部例子都在这里)——它的存在仅仅是为了方便复用消息的返回值
  2. ovirt node的安装简介
  3. php使用http请求头实现文件下载
  4. 解决Qt程序在Linux下无法输入中文的办法
  5. The tempfile module
  6. 命令模式在MVC框架中的应用
  7. SQL_由创建表引出
  8. poj1651(区间dp)
  9. unity3D的FingerGestures小工具
  10. Android判断应用程序从后台回到前台