第四部分请点这里
本文将实现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()); } }
时间: 2024-10-24 16:21:58