首页 > 代码库 > 【原创】纯OO:从设计到编码写一个FlappyBird (二)

【原创】纯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 (二)