纯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) {} }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。