d;
public void paintComponent(Graphics g) {
snake.drawMe();
ground.drawme();
food.drawme();
}
public void display(Snake snake,Ground ground,Food food)
{
this.snake=snake;
this.ground=ground;
this.food=food;
System.out.println("GamePanel's display");
this.repaint();
}
三 : 编写Controler类与实现蛇移动的事件监听
由于蛇不能直接操作显示面板(GamePanel)所以这里定义一个监听器SnakeListener:里面定义一个方法:
void snakeMove(Snake); 每当蛇移动一步就触发监听器,调用snakeMoved()由Controller去实现监听器的接口,然后由控制器去触发显示面板的事件源,让显示面板完成相应操作。
逻辑图如下:
图2 事件监听建立联系
在Snake 中增加蛇的方向常量:
public static final int UP=1;
public static final int DOWN=-1;
public static final int LEFT=2;
public static final int RIGHT=-2;
并添加一个接口:
package liang.snake.Listener;
import liang.snake.entities.Snake;
public interface SnakeListener {
public void SnakeMove(Snake snake);
}
Controler 实现SnakeListener接口并处理案件消息:代码如下:
package liang.snake.Controller;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import liang.snake.Listener.SnakeListener;
import liang.snake.entities.Food;
import liang.snake.entities.Ground;
import liang.snake.entities.Snake;
import liang.snake.view.GamePanel;
public class Controller extends KeyAdapter implements SnakeListener{
Snake snake=new Snake();
Ground ground=new Ground();
Food food=new Food();
GamePanel gamepanel=new GamePanel();
public Controller(Snake snake, Ground ground, Food food, Ga