首页 > 代码库 > 【原创】纯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 (五)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。