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

📄 snake.java

📁 贪吃蛇
💻 JAVA
字号:
package com.snake;

import java.awt.event.KeyEvent;
import java.awt.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.JOptionPane;

public class Snake {

	private GreedySnake gs;
	Dir dir;

	private Node firstNode = null;

	public Snake(Dir dir, GreedySnake gs) {
		this.dir = dir;
		this.gs = gs;
	}

	public void move(java.util.List<Node> snakeList) {
		firstNode = snakeList.get(0); // 蛇头结点
		int next = Node.WIDTH + 1; 
		/* 各种方向的移动方案 */
		switch (dir) {
		case L:
			if(firstNode.x - next <= 0) {
				GreedySnake.over = true;
				break;
			}
			changeSnake(snakeList);
			firstNode.x -= next;
			break;
		case U:
			if(firstNode.y - next < 30) {
				GreedySnake.over = true;
				break;
			}
			changeSnake(snakeList);
			firstNode.y -= next;
			break;
		case R:
			if(firstNode.x >= (gs.GAME_WIDTH - 12)){
				GreedySnake.over = true;
				break;
			}
			changeSnake(snakeList);
			firstNode.x += next;
			break;
		case D:
			if(firstNode.y >= (gs.GAME_HEIGHT - 16)) {
				GreedySnake.over = true;
				break;
			}
			changeSnake(snakeList);
			firstNode.y += next;
			break;
		}	
	}
	/**
	 * 
	 * 结点依次移动到前面一个结点的位置
	 * 
	 */
	public void changeSnake(java.util.List<Node> snakeList) {

		for (int i = snakeList.size() - 1; i > 0; i--) {
			snakeList.get(i).x = snakeList.get(i - 1).x;
			snakeList.get(i).y = snakeList.get(i - 1).y;
		}
	}

	public void keyPressed(KeyEvent e) {

		int key = e.getKeyCode();
		switch (key) {
		case KeyEvent.VK_P: // 暂停
		case KeyEvent.VK_SPACE:
			GreedySnake.pause = ! GreedySnake.pause;
			break;
		case KeyEvent.VK_LEFT:
			if (dir != Dir.R) // 不能反方向运动
				dir = Dir.L;
			break;
		case KeyEvent.VK_UP:
			if (dir != Dir.D)
				dir = Dir.U;
			break;
		case KeyEvent.VK_RIGHT:
			if (dir != Dir.L)
				dir = Dir.R;
			break;
		case KeyEvent.VK_DOWN:
			if (dir != Dir.U)
				dir = Dir.D;
			break;
		case KeyEvent.VK_R: // 重新开始
			gs.restart();
			break;
		case KeyEvent.VK_PAGE_UP:
			if(GreedySnake.speed - 50 >= 50) {
				GreedySnake.speed -= 50;
				gs.speedLabel.setText("   你的速度为 :" + (5 + (250 - GreedySnake.speed) / 50));
			}
			break;
		case KeyEvent.VK_PAGE_DOWN:
			if(GreedySnake.speed + 50 <= 450) {
				GreedySnake.speed += 50;
				gs.speedLabel.setText("   你的速度为 :" + (5 + (250 - GreedySnake.speed) / 50));
			}
			break;
		}
	}	

	/**
	 * 
	 * 蛇吃食物,吃后蛇身变长,并生成新的食物
	 * 
	 */
	public void eatFood(java.util.List<Node> snakeList, Node food) {
		Node firstNode = snakeList.get(0);
		if (firstNode.getRect().intersects(food.getRect())) {
			Node newNode = new Node(food.x, food.y);
			snakeList.add(newNode); //添加新的结点到首部
			Node tempNode = Node.createFood(snakeList);
			food.x = tempNode.x;
			food.y = tempNode.y;		
			GreedySnake.score += 100;
			gs.scoreLabel.setText("你的得分为:" + GreedySnake.score + "  ");
		}		
	}
}

⌨️ 快捷键说明

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