⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.java

📁 一个简单的贪吃蛇游戏
💻 JAVA
字号:
package cn.edu.usc.snake.controller;

import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;

import cn.edu.usc.snake.entities.Food;
import cn.edu.usc.snake.entities.Ground;
import cn.edu.usc.snake.entities.Snake;
import cn.edu.usc.snake.listener.SnakeListener;
import cn.edu.usc.snake.util.ConstValue;
import cn.edu.usc.snake.util.Direction;
import cn.edu.usc.snake.view.GamePanel;

public class Control extends KeyAdapter implements SnakeListener{
	
	private Snake snake;
	private Food food;
	private Ground ground;
	private GamePanel gamePanel;
	
	private boolean over = false;

	public Control(Snake snake, Food food, Ground ground, GamePanel gamePanel) {
		super();
		this.snake = snake;
		this.food = food;
		this.ground = ground;
		this.gamePanel = gamePanel;
		snake.addSnakeListener(this);
	}

	@Override
	public void keyPressed(KeyEvent e) {
		switch (e.getKeyCode()) {
			case KeyEvent.VK_UP:
				snake.changeDirection(Direction.U);
				break;
			case KeyEvent.VK_RIGHT:
				snake.changeDirection(Direction.R);
				break;
			case KeyEvent.VK_DOWN:
				snake.changeDirection(Direction.D);
				break;
			case KeyEvent.VK_LEFT:
				snake.changeDirection(Direction.L);
				break;
			case KeyEvent.VK_F2:
				this.over = false;
				snake.initSnake();
				newGame();
				break;
		}
	}

	@Override
	public void snakeMove(Snake snake) {
		if(food.isSnakeEatFood(snake)) {
			snake.eatFood();
			food.newFood(this.getPoint());
		}
		if(ground.isSnakeEatRock(snake)) {
			snake.die();
		}
		if(snake.isEatBody()) {
			snake.die();
		}
		if(!snake.isAlive()) {
			this.gameOver();
		}
		gamePanel.display(snake, food, ground);
	}

	public Point getPoint() {
		Random random = new Random();
		int x = 0, y = 0;
		Point newPoint = null;
		do {
			x = random.nextInt(ConstValue.PANEL_WIDTH);
			y = random.nextInt(ConstValue.PANEL_HEIGHT);
			newPoint = new Point(x, y);
		}while(snake.isInSnake(newPoint) || ground.isRock(newPoint));
		return newPoint;
	}
	
	/**
	 * 开始新游戏
	 */
	public void newGame() {
		if(!over) {
			snake.start();
			food.newFood(this.getPoint());
		}
	}
	
	public void gameOver() {
		this.over = true;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -