当蛇遇到蛋之后在头部添加一个节点 然后遍历整个蛇 但是蛇的移动就出问题了 就是整体在移动
一下是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;
}
}
}
一下是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;
}
}
}
转弯之后两节的分开走了
就说明你只给其中的一截加了标记位让其转向,另外的没加。
只要能转向,应该就说明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; 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);
}
}
初始化的时候肯定给头结点付了值,要不就不可能变长了。
但是转弯之后两节的分开走了 。
这里指的转弯是头结点加上之后再点转向然后分开是吧?
也就是说你改变了其他的值的方向,头结点的方向未改变,或者只改变了头结点的,其他的未改。
你这样,这应该是线程的把,每个接点都是一个对象的话,把每个线程system.out.println("")//里面输出方向,看看头结点的方向和其他接点的一不一样。