📄 snake.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 + -