求改一个双向链表

diqye2011 2011-06-22 02:51:36
public class Snake {
Node head;
Node tail;
Dir d = Dir.D;

Snake() {
head = tail = new Node(10,10);
}

public void addHead() {
Node n = null;
switch(d) {
case U :
n = new Node(head.x, head.y-1);
break;
case D :
n = new Node(head.x, head.y+1);
break;
case L :
n = new Node(head.x-1, head.y);
break;
case R :
n = new Node(head.x+1, head.y);
break;
}
n.next = head;
head.prev = n;
head = n;
}

public void addTail() {

}
public void draw(Graphics g) {
for(Node n=head;n!=null;n=head.next) {
n.draw(g);
}

move();//调用这里就程序就死
}

private void move() {
addHead();

}

public void keyPressed(KeyEvent arg0) {
switch(arg0.getKeyCode()) {
case KeyEvent.VK_UP :
d = d.U;
break;
case KeyEvent.VK_DOWN :
d = d.D;
break;
case KeyEvent.VK_LEFT :
d = d.L;
break;
case KeyEvent.VK_RIGHT :
d = d.R;
break;
}
}

private class Node {
int x,y;
int h = Yard.BLOCK_SIZE;
int w = Yard.BLOCK_SIZE;
Node next ;
Node prev ;

Node(int x, int y) {
this.x = x;
this.y = y;
}

public void draw(Graphics g){
Color c = g.getColor();
g.setColor(Color.black);
g.fillRect(x * Yard.BLOCK_SIZE, y * Yard.BLOCK_SIZE, w, h);
g.setColor(c);
}
}

}
...全文
95 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
private void move() {
addHead();
delTail();
}

private void delTail() {
if(tail.prev == null) return;
tail = tail.prev;
tail.next =null;
}


加上这一段程序就Ok啦 但不知道是什么原因
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
public void addHead() {
Node n = null;
switch(d) {
case U :
n = new Node(head.x, head.y-1);
break;
case D :
n = new Node(head.x, head.y+1);
break;
case L :
n = new Node(head.x-1, head.y);
break;
case R :
n = new Node(head.x+1, head.y);
break;
}
if(n == null) return;
n.next = head;
head.prev = n;
head = n;
}

我把那段该成这样 但还是不行
qybao 2011-06-22
  • 打赏
  • 举报
回复
addHead时,如果d没有走进case里,那么n就是null,那么
n.next = head; //这里就挂了

diqye2011 2011-06-22
  • 打赏
  • 举报
回复
public enum Dir {
U,D,L,R
}


一共就这三个类
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
* 游戏的主窗口
* @author Administrator
*
*/
public class Yard extends Frame {



private static Image offImage= null;
/**
* 窗口的行
*/
public static final int ROWS = 50;
/**
* 窗口的列
*/
public static final int COLS = 50;
/**
* 窗口每一小各的大小
*/
public static final int BLOCK_SIZE = 10;
private Snake s = new Snake();


/**
* @param 暂时没用
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Yard().lunch();
}

/**
* 游戏窗口的设置
*/
public void lunch() {
setLocation(400, 100);
setSize(ROWS * BLOCK_SIZE, COLS * BLOCK_SIZE);
setBackground(Color.GREEN);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}

});

new Thread(new PaintThread()).start();
addKeyListener(new KeyMonity());
setVisible(true);
}

public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.GRAY);
g.fillRect(0, 0, ROWS * BLOCK_SIZE, COLS * BLOCK_SIZE);
g.setColor(Color.DARK_GRAY);
for(int i=1;i<COLS;i++) {
g.drawLine(0, BLOCK_SIZE * i, BLOCK_SIZE * ROWS, BLOCK_SIZE * i);
}
for(int i=1;i<COLS;i++) {
g.drawLine(BLOCK_SIZE * i, 0,BLOCK_SIZE * i, BLOCK_SIZE * COLS);
}
s.draw(g);
g.setColor(c);
}

@Override
public void update(Graphics arg0) {
if(offImage == null) {
offImage = this.createImage(ROWS * BLOCK_SIZE, COLS * BLOCK_SIZE);
}
Graphics goff = offImage.getGraphics();
paint(goff);
arg0.drawImage(offImage, 0, 0, null);
}

private class PaintThread implements Runnable {


public void run() {
while(true) {
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

private class KeyMonity extends KeyAdapter {

@Override
public void keyPressed(KeyEvent arg0) {
s.keyPressed(arg0);
}

}
}
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
没有Exception 就是程序没反映 我把全部代码发上来吧
chenchenyangll 2011-06-22
  • 打赏
  • 举报
回复
addHead到第几行挂了呢?
Move你确定进去了吗?

挂了肯定报异常吧?

你能说清楚点吗。。
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
WindowEvent都没反映
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
我试验过的 是Move里面的问题 addHead这个方法一掉用就出问题
chenchenyangll 2011-06-22
  • 打赏
  • 举报
回复
在move前写一句输出

看看有没有输出,没有说明是之前的部分挂了
diqye2011 2011-06-22
  • 打赏
  • 举报
回复
就椒调用到那一句程序就崩溃啦 没反映啦 不知道为什么 求解答
chenchenyangll 2011-06-22
  • 打赏
  • 举报
回复
烦请将情况问题详细说明,我们不是神
kruskaluu 2011-06-22
  • 打赏
  • 举报
回复
问题是什么,要改成什么样,至少要说明一下吧!
ethenjean 2011-06-22
  • 打赏
  • 举报
回复
死是什么意思?有错误信息么?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧