初学者字符贪吃蛇空格问题
代码如下:
package snake;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SnakeGameV1 {
public final static int WIDTH=50;
public final static int HEIGHT=30;
public final static Random RANDOM=new Random();
char[][] map=new char[HEIGHT][WIDTH];
LinkedList<Point> snake=new LinkedList<Point>();
Point food;
static int never;
static int direction;
JFrame frame;
static boolean gameOver;
{
gameOver=false;
initMap();
initFood();
initSnake();
initDirection();
showFood();
showSnake();
showMap();
JFrame frame=new JFrame("游戏控制");
Toolkit toolKit=java.awt.Toolkit.getDefaultToolkit();
Dimension dimension=toolKit.getScreenSize();
int x=(int) dimension.getWidth();
int y=(int) dimension.getHeight();
frame.setVisible(true);
frame.setBounds((x-300)/2, (y-300)/2, 300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button=new JButton("方向控制");
frame.add(button);
frame.add(new JButton("上"),BorderLayout.NORTH);
frame.add(new JButton("下"),BorderLayout.SOUTH);
frame.add(new JButton("左"),BorderLayout.WEST);
frame.add(new JButton("右"),BorderLayout.EAST);
button.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int temp=e.getKeyCode();
direction=(never==temp)? direction:temp;
if(direction==0) {
return;
}
}
});
}
public void initMap() {
for(int a=0;a<map.length;a++) {
if(a==0|a==map.length-1) {
for(int b=0;b<map[a].length;b++) {
map[a][b]='*';
}
}else {
for(int b=0;b<map[a].length;b++) {
if(b==0|b==map[a].length-1) {
map[a][b]='*';
}else {
map[a][b]=' ';
}
}
}
}
}
public void showMap() {
for(int a=0;a<map.length;a++) {
for(int b=0;b<map[a].length;b++) {
System.out.print(map[a][b]);
}
System.out.println();
}
}
public void initFood() {
food=new Point(RANDOM.nextInt(WIDTH-3)+1,RANDOM.nextInt(HEIGHT-3)+1);
}
public void showFood() {
map[food.y][food.x]='@';
}
public void initSnake() {
snake.add(new Point(WIDTH/2+1,HEIGHT/2 ));
snake.add(new Point(WIDTH/2,HEIGHT/2 ));
snake.add(new Point(WIDTH/2-1,HEIGHT/2 ));
}
public void showSnake() {
for(int count=0;count<snake.size();count++) {
if(count==0) {
map[snake.get(count).y][snake.get(count).x]='$';
}else {
map[snake.get(count).y][snake.get(count).x]='#';
}
}
if(gameOver) {
map[snake.getFirst().y][snake.getFirst().x]='$';
}
}
public void initDirection() {
never=KeyEvent.VK_LEFT;
direction=KeyEvent.VK_RIGHT;
}
public void move() {
initMap();
switch (direction) {
case KeyEvent.VK_LEFT:
snake.addFirst(new Point(snake.getFirst().x-1,snake.getFirst().y));
never=KeyEvent.VK_RIGHT;
break;
case KeyEvent.VK_RIGHT:
snake.addFirst(new Point(snake.getFirst().x+1,snake.getFirst().y));
never=KeyEvent.VK_LEFT;
break;
case KeyEvent.VK_UP:
snake.addFirst(new Point(snake.getFirst().x,snake.getFirst().y-1));
never=KeyEvent.VK_DOWN;
break;
case KeyEvent.VK_DOWN:
snake.addFirst(new Point(snake.getFirst().x,snake.getFirst().y+1));
never=KeyEvent.VK_UP;
break;
default:
break;
}
if(direction!=KeyEvent.VK_LEFT||direction!=KeyEvent.VK_RIGHT||direction!=KeyEvent.VK_DOWN||direction!=KeyEvent.VK_UP)
eatFood();
isGameOver();
showSnake();
showFood();
showMap();
}
public void eatFood() {
if(food.equals(snake.getFirst())) {
initFood();
}else {
snake.removeLast();
}
}
public void isGameOver() {
Point head=snake.getFirst();
for(int count=1;count<snake.size();count++) {
if(snake.get(count).equals(head)||map[head.y][head.x]=='*') {
gameOver=true;
}
}
}
public static void main(String[] args) {
SnakeGameV1 SnakeGameV2=new SnakeGameV1();
while(true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
SnakeGameV2.move();
if(gameOver) {
System.exit(0);
}
}
}
}
不知道为什么按了空格以后,添加蛇头就不成功,好像是获得了一个奇怪的Point,然后删除玩蛇尾以后就会报错。
错误代码如下:
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.LinkedList.getFirst(LinkedList.java:248)
at snake.SnakeGameV1.isGameOver(SnakeGameV1.java:188)
at snake.SnakeGameV1.move(SnakeGameV1.java:171)
at snake.SnakeGameV1.main(SnakeGameV1.java:206)
求空降大佬给萌新解答下。