

如图:当蛇移动到最上面和最左边时,蛇的一个节点不能显示。不知道是什么问题!
主代码:
public class Game {
public static void main(String[] args) {
Snake snake = new Snake();
Egg egg = new Egg();
Ground ground = new Ground();
GamePanel gamePanel = new GamePanel();
Controller controller = new Controller(snake, egg, ground, gamePanel);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(Global.WIDTH*Global.CELL_SIZE+16
, Global.HEIGHT*Global.CELL_SIZE+38);
gamePanel.setSize(Global.WIDTH*Global.CELL_SIZE
, Global.HEIGHT*Global.CELL_SIZE);
frame.add(gamePanel, BorderLayout.CENTER);
gamePanel.addKeyListener(controller);
snake.addSnakeListener(controller);
frame.setVisible(true);
frame.addKeyListener(controller);
controller.newGame(); //开始一个新游戏
}
}
------解决思路----------------------
你在蛇行走的时候判断y<=0,这样y==0时蛇就会跑到屏幕的下面去,如果第一次看不见再走几步就能看到了那就是窗口太小被挡住了。如果蛇就这么走没了。。让它多走几步看看会不会报exception。搞不定可以输出蛇头的位置来debug。
------解决思路----------------------
放食物之前检查一下食物的位置是否在蛇身上,在的话重新产生食物,直到不在蛇身上为止。为了做到这一点,生成食物的方法里面必须要能够访问到蛇的全部节点,或者可以在蛇里面加一个isOnBody方法,传入一个点返回布尔值,判断传入的点是否在蛇身上。