第一部分请点这里。
续结前文,本文将实现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 voidstart()
{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 voidmousePressed(MouseEvent e)
{
fang.beginUp();
}
更加简单,也好理解。点一下方sir就飞啦
Game类的全部代码:
import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Game implementsMouseListener {
Judge judge;
SimpleDraw draw;
Bing fang;
Obstacle obs;private static final int TIME = 10;private intscore;publicGame()
{
score= 0;
}public static voidmain(String [] args)
{
Game game= newGame();
game.setup();
game.start();
game.end();
}public voidsetup()
{
JFrame frame= newJFrame();
fang= new SimpleBing(200,200);
obs= new SimpleObstacle(600);
judge= newSimpleJudge(fang,obs);
draw= newSimpleDraw(fang,obs);
frame.getContentPane().add(draw);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
draw.addMouseListener(this);
frame.setSize(600,600);
frame.setVisible(true);
}public voidstart()
{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 voidend()
{
System.out.println("Your score is " +score);
}public voidmouseClicked(MouseEvent e)
{
}public voidmouseEntered(MouseEvent e) {}public voidmouseExited(MouseEvent e) {}public voidmousePressed(MouseEvent e)
{
fang.beginUp();
}public voidmouseReleased(MouseEvent e) {}
}