日期:2014-05-20  浏览次数:20684 次

贪食蛇问题求助
当蛇遇到蛋之后在头部添加一个节点 然后遍历整个蛇 但是蛇的移动就出问题了 就是整体在移动
一下是move方法 求大神教


public void move() {
for (Node n = head; n != null; n = n.next){
switch (head.dir) {
case LEFT:
n.col = n.col - 1;
if(n.col<0){
n.col = Yard.COLS;
}
break;
case RIGHT:
n.col = n.col + 1;
if(n.col>Yard.COLS){
n.col = 0;
}
break;
case UP:
n.row = n.row - 1;
if(n.row<0){
n.row = Yard.ROWS;
}
break;
case DOWN:
n.row = n.row + 1;
if(n.row>Yard.ROWS){
n.row = 0;
}
break;
}
}
}
------最佳解决方案--------------------
你发的这段是没有问题的。
初始化的时候肯定给头结点付了值,要不就不可能变长了。
 但是转弯之后两节的分开走了 。
这里指的转弯是头结点加上之后再点转向然后分开是吧?
也就是说你改变了其他的值的方向,头结点的方向未改变,或者只改变了头结点的,其他的未改。
你这样,这应该是线程的把,每个接点都是一个对象的话,把每个线程system.out.println("")//里面输出方向,看看头结点的方向和其他接点的一不一样。

------其他解决方案--------------------
你给这个方法的代码,我没法帮你运行调试。
一行一行的看又太累了。、
蛇的移动就出问题了
问题能描述的具体一点么?是报出异常还是页面效果不是理想中的?
你是把蛇的每一个节点看做一个对象还是一条蛇看成一个对象?
------其他解决方案--------------------
引用:
你给这个方法的代码,我没法帮你运行调试。
一行一行的看又太累了。、
蛇的移动就出问题了
问题能描述的具体一点么?是报出异常还是页面效果不是理想中的?
你是把蛇的每一个节点看做一个对象还是一条蛇看成一个对象?



蛇是由节点构成 然后现在的问题是 吃了之后会变长 但是转弯之后两节的分开走了
------其他解决方案--------------------
这才说道点上嘛
转弯之后两节的分开走了 
就说明你只给其中的一截加了标记位让其转向,另外的没加。
只要能转向,应该就说明Move()这个方法是没错的。
还是那个问题:
你是把蛇的每一个节点看做一个对象还是一条蛇看成一个对象?
如果把蛇的每一点看做一个对象的话,那就是新添加的那一截你没添加标记位。
如果把一条蛇看成一个对象的话,那就是新添加的那一截你没有把它添加到一个整体里面去。
------其他解决方案--------------------
引用:
这才说道点上嘛
转弯之后两节的分开走了 
就说明你只给其中的一截加了标记位让其转向,另外的没加。
只要能转向,应该就说明Move()这个方法是没错的。
还是那个问题:
你是把蛇的每一个节点看做一个对象还是一条蛇看成一个对象?
如果把蛇的每一点看做一个对象的话,那就是新添加的那一截你没添加标记位。
如果把一条蛇看成一个对象的话,那就是新添加的那一截你没有把它添……


我就是不知道该去修改哪块 现在能变长 就是不能转弯 我觉得是键盘监听那儿修改 你觉得呢。每个节点是对象 NEW的时候已经赋了跟头结点一样的方向
------其他解决方案--------------------
我估计知道你错误的原因了。
你把你new一个新对象的那段代码以及创建新对象的那个构造器发上来。
我估计你付给这个新对象的(跟头结点一样的方向 )是一个定值,或者是一个非动态更新的引用。
------其他解决方案--------------------
//往蛇的头部添加一个新的节点
public void addToHead(){
Node n = null;
switch(head.dir){
case LEFT:
n = new Node(head.row,head.col-1,head.dir);
break;
case RIGHT:
n = new Node(head.row,head.col+1,head.dir);
break;
case UP:
n = new Node(head.row-1,head.col,head.dir);
break;
case DOWN:
n = new Node(head.row+1,head.col,head.dir);
break;
}
n.next = head;
head.pre = n;
head = n;

}

//构造方法

public class Node {

int width = Yard.BLOCK_SIZE;
int hight = Yard.BLOCK_SIZE;
int row, col;// 出现的位置

Node pre, next = null;
Direction dir = Direction.LEFT;