📄 controller.java
字号:
package com.nilaiya.snake.controller;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import com.nilaiya.snake.entities.Food;
import com.nilaiya.snake.entities.Ground;
import com.nilaiya.snake.entities.Snake;
import com.nilaiya.snake.listener.SnakeListener;
import com.nilaiya.snake.view.GamePanel;
/**
* @author yellow
*
*/
public class Controller extends KeyAdapter implements SnakeListener {
// 定义对象
private Snake snake;
private Food food;
private Ground ground;
private GamePanel gamePanel;
/**
* 构造器
*
* @param snake
* @param food
* @param ground
* @param gamePanel
*/
public Controller(Snake snake, Food food, Ground ground, GamePanel gamePanel) {
super();
this.snake = snake;
this.food = food;
this.ground = ground;
this.gamePanel = gamePanel;
}
/**
* 开始新游戏的方法
*
*/
public void newGame() {
snake.start();
food.newFood(ground.getPoint());
}
/**
* 显示蛇、石头、食物
*/
public void snakeMoved(Snake snake) {
// 如果吃到了食物
if (food.isSnakeEatFood(snake)) {
snake.eatFood();
food.newFood(ground.getPoint());
}
// 如果吃到了石头
if (ground.isSnakeEatRock(snake)) {
snake.die();// 游戏就结束
}
// 如果吃到自己的身体
if (snake.isEatBody()) {
snake.die();// 游戏就结束
}
gamePanel.display(snake, food, ground);
}
/**
* 覆盖KeyAdapter的keyPressed()方法
*/
@Override
public void keyPressed(KeyEvent e) {
// 改变蛇的方向
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
snake.changeDirection(Snake.UP);
break;
case KeyEvent.VK_DOWN:
snake.changeDirection(Snake.DOWN);
break;
case KeyEvent.VK_LEFT:
snake.changeDirection(Snake.LEFT);
break;
case KeyEvent.VK_RIGHT:
snake.changeDirection(Snake.RIGHT);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -