当前位置: 代码迷 >> J2SE >> 贪吃蛇项目,面板中有一起不能显示
  详细解决方案

贪吃蛇项目,面板中有一起不能显示

热度:126   发布时间:2016-04-23 19:39:35.0
贪吃蛇项目,面板中有一行不能显示



如图:当蛇移动到最上面和最左边时,蛇的一个节点不能显示。不知道是什么问题!

主代码:
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。
------解决思路----------------------
引用:
Quote: 引用:

你在蛇行走的时候判断y<=0,这样y==0时蛇就会跑到屏幕的下面去,如果第一次看不见再走几步就能看到了那就是窗口太小被挡住了。如果蛇就这么走没了。。让它多走几步看看会不会报exception。搞不定可以输出蛇头的位置来debug。



不过游戏还有一个bug,当蛇节点过多时,食物有可能显示在蛇的身上,这个有什么好的方法解决嘛?

放食物之前检查一下食物的位置是否在蛇身上,在的话重新产生食物,直到不在蛇身上为止。为了做到这一点,生成食物的方法里面必须要能够访问到蛇的全部节点,或者可以在蛇里面加一个isOnBody方法,传入一个点返回布尔值,判断传入的点是否在蛇身上。
  相关解决方案