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

 

posted on 2014-11-07 22:14  shadowmydx'sLab  阅读(502)  评论(0编辑  收藏  举报

导航