当蛇遇到蛋之后在头部添加一个节点 然后遍历整个蛇 但是蛇的移动就出问题了 就是整体在移动
一下是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;
}
}
}

解决方案 »

  1.   

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

  2.   


    我就是不知道该去修改哪块 现在能变长 就是不能转弯 我觉得是键盘监听那儿修改 你觉得呢。每个节点是对象 NEW的时候已经赋了跟头结点一样的方向
      

  3.   

    我估计知道你错误的原因了。
    你把你new一个新对象的那段代码以及创建新对象的那个构造器发上来。
    我估计你付给这个新对象的(跟头结点一样的方向 )是一个定值,或者是一个非动态更新的引用。
      

  4.   

    //往蛇的头部添加一个新的节点
    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; private Node(int row, int col, Direction dir) {
    this.row = row;
    this.col = col;
    this.dir = dir;
    }
    public int getRow() {
    return row;
    }
    public void setRow(int row) {
    this.row = row;
    }
    public int getCol() {
    return col;
    }
    public void setCol(int col) {
    this.col = col;
    } private void draw(Graphics g) {
    Color c = g.getColor();
    g.setColor(Color.BLUE);
    g.fillRect(Yard.BLOCK_SIZE * col, Yard.BLOCK_SIZE * row, width,hight);
    g.setColor(c);
    }

    }
      

  5.   

    你发的这段是没有问题的。
    初始化的时候肯定给头结点付了值,要不就不可能变长了。
     但是转弯之后两节的分开走了 。
    这里指的转弯是头结点加上之后再点转向然后分开是吧?
    也就是说你改变了其他的值的方向,头结点的方向未改变,或者只改变了头结点的,其他的未改。
    你这样,这应该是线程的把,每个接点都是一个对象的话,把每个线程system.out.println("")//里面输出方向,看看头结点的方向和其他接点的一不一样。
      

  6.   

    我也写过贪食蛇,我说一下我的思路吧:蛇身用一个双端链表表示,前进的时候,去掉尾部的节点,新生成一个节点放到头部,paintComonent方法中打印一下就行了,要控制蛇的前进方向,只要控制头部新生成的那一个节点就行了