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

【原创】纯OO:从设计到编码写一个FlappyBird (五)

第四部分请点这里

 

本文将实现DrawBoard。

 

如前文所述,Obstacle类和Bing类仅仅提供给DrawBoard必要的信息,如何绘制则完全委托给了DrawBoard,也就是说游戏关键类的细节和它的绘制实现了完全解耦。也就是说,虽然这个版本是个黑柱子白背景小蓝球,但是你完全可以在不修改其他类的情况下,将背景换成北邮,柱子换成大宝剑,小篮球换成方X。。(开门!快递)

。。。

也许不能算完全解耦,DrawBoard需要访问Obstacle提供的LinkedList,来获取所需要绘制的柱子障碍物。

 

具体使用SimpleDraw这个类来实现DrawBoard。

大概逻辑非常单纯,四步:

 

0、画背景。

1、画小鸟(滨)。

2、画柱子。

3、你调用我就重画

 

全部代码:

 

import javax.swing.*;import java.awt.*;import java.util.LinkedList;import java.awt.event.*;public interface DrawBoard {    public void draw();}class SimpleDraw extends JPanel implements DrawBoard {    Bing bing;    Obstacle obs;    final LinkedList<Pillar> pillar;    SimpleDraw(Bing bing,Obstacle obs)    {        this.bing = bing;        this.obs  = obs;        this.pillar = obs.getObstacles();    }        public void draw()    {        this.repaint();    }        public void paintComponent(Graphics g)    {        g.setColor(Color.white);        g.fillRect(0,0,this.getWidth(),this.getHeight());        paintBing(g);        paintObs(g);    }        private void paintObs(Graphics g)    {        g.setColor(Color.black);        for (Pillar p : pillar)        {            g.fillRect(p.getX(),0,p.getWidLmt(),p.getHeight());            g.fillRect(p.getX(),p.getHeight() + p.getHeiGap(),p.getWidLmt(),this.getHeight() - p.getHeight() - p.getHeiGap());        }    }        private void paintBing(Graphics g)    {        g.setColor(Color.blue);        g.fillOval(bing.getX(),bing.getY(),bing.getWidth(),bing.getHeight());    }}

 

【原创】纯OO:从设计到编码写一个FlappyBird (五)