这是贪吃蛇中snakeView,其中定义贪吃蛇坐标的代码如下:private void initNewGame() { //初始化游戏
  mSnakeTrail.clear(); //清空arraylist列表
  mAppleList.clear();    mSnakeTrail.add(new Coordinate(7, 7)); //创建蛇身
  mSnakeTrail.add(new Coordinate(6, 7));  
  mSnakeTrail.add(new Coordinate(5, 7));  
  mSnakeTrail.add(new Coordinate(4, 7));  
  mSnakeTrail.add(new Coordinate(3, 7));  
  mSnakeTrail.add(new Coordinate(2, 7));  
  mNextDirection = NORTH; //新的方向:北方
 
  addRandomApple(); //开始时的随机苹果
    
 
  mMoveDelay = 600; //设置移动延迟
  mScore = 0; 从创建蛇身的代码来看应该是一条直线,而不是一条折线。但是为了观察刚开始时蛇的状态,我故意将延迟设置的时间比较长,以便可以观察蛇的状态,方便截图。开始游戏时蛇的状态如下图,这是为什么呢

解决方案 »

  1.   

    有意思嘿嘿
    我有几点搞不明白  蛇头为什么是黄色的 可以贴下Coordinate()么
    还有你修改延迟,蛇的初始状态有改变么?
    mNextDirection = NORTH; //新的方向:北方   mNextDirection在哪里开始利用其值的 
    你换成WEST的话,截个图看看 初始变不?
      

  2.   

     
        private class Coordinate {  //定义坐标的内部类
            public int x; 
            public int y; 
     
            public Coordinate(int newX, int newY) {  //构造函数
                x = newX; 
                y = newY; 
            } 
     
            public boolean equals(Coordinate other) {  //重写equals
                if (x == other.x && y == other.y) { 
                    return true; 
                } 
                return false; 
            } 
     
            @Override 
            public String toString() {  //重写tostring
                return "Coordinate: [" + x + "," + y + "]"; 
            } 
        } 上面的代码是Coordinate(),虽然我也有点疑惑,但是他和蛇头是黄色没有多大关系,设置蛇头为黄色的应该是这段代码:
     //重新设置蛇的颜色,蛇头是黄色,蛇身是红色
            int index = 0; 
            for (Coordinate c : mSnakeTrail) { 
                if (index == 0) { 
                    setTile(YELLOW_STAR, c.x, c.y); 
                } else { 
                    setTile(RED_STAR, c.x, c.y); 
                } 
                index++; 
            } 
      

  3.   

    不会粘贴代码。这是next方向为南的截图这是next方向为东的截图next方向为西,游戏开始后就结束了。
      

  4.   

    把代码放在  【code=Java】与【/code】之间  我先说下为什么向西会自动结束,因为它规定创建的蛇神最后一个index 的位置了,是距离左边框5个坐标的位置 ,如果规定初始向西,(这个值的意思是:蛇开始游戏默认向哪个方向走),那么5个点放不下全部蛇身,所以游戏会自动结束。 向东的情况,正好印证了这一点。
      

  5.   

    再来回答你的这个问题:从创建蛇身的代码来看应该是一条直线,而不是一条折线,为什么?刚才我说了初始方向的意思, 你所看到的现象:向东西,就是一直线,南北就是折线。
    然而事实上,创建的的确是一条直线,只不过,那个状态你看不到,是在 mNextDirection 没有被赋予值的时候。  你所可以截的图,是点击开始游戏后,mNextDirection显然被富值蛇已经移动了。
      

  6.   


    这个我说的有点歧义,我的意思是 mSnakeTrail.add(new Coordinate(2, 7));   这个是创建的最后一个蛇身子的index 但是你截不到这个状态
        
     在这个情况下:     
       mMoveDelay = 600; //设置移动延迟向西,你所能截到的,蛇身子的最后一个的初始坐标是(4,7)。 4个点,显然不够蛇的长度。