这是贪吃蛇中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; 从创建蛇身的代码来看应该是一条直线,而不是一条折线。但是为了观察刚开始时蛇的状态,我故意将延迟设置的时间比较长,以便可以观察蛇的状态,方便截图。开始游戏时蛇的状态如下图,这是为什么呢?
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; 从创建蛇身的代码来看应该是一条直线,而不是一条折线。但是为了观察刚开始时蛇的状态,我故意将延迟设置的时间比较长,以便可以观察蛇的状态,方便截图。开始游戏时蛇的状态如下图,这是为什么呢?
我有几点搞不明白 蛇头为什么是黄色的 可以贴下Coordinate()么
还有你修改延迟,蛇的初始状态有改变么?
mNextDirection = NORTH; //新的方向:北方 mNextDirection在哪里开始利用其值的
你换成WEST的话,截个图看看 初始变不?
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++;
}
然而事实上,创建的的确是一条直线,只不过,那个状态你看不到,是在 mNextDirection 没有被赋予值的时候。 你所可以截的图,是点击开始游戏后,mNextDirection显然被富值蛇已经移动了。
这个我说的有点歧义,我的意思是 mSnakeTrail.add(new Coordinate(2, 7)); 这个是创建的最后一个蛇身子的index 但是你截不到这个状态
在这个情况下:
mMoveDelay = 600; //设置移动延迟向西,你所能截到的,蛇身子的最后一个的初始坐标是(4,7)。 4个点,显然不够蛇的长度。