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);
}
}}
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);
}
}}
解决方案 »
- 如何使窗体的关闭按纽不可用???
- 关于环绕通知
- 求教:关闭socket后,accept()方法会抛出异常
- 运用While循环撰写出类似"resumption模型"的行为。在这个While循环中反复执行,直到不再掷出异常为止。请问一下,这个程序怎么写啊?
- 线程问题
- 我的JavaBean为什么不能运行,请各位给看看(解决后马上结)
- 如何用Java读取Excel文件中的数据(急!!!)
- 如何在applet中使得弹出的对话框始终浮动在上面,而不会被其他的窗体掩盖??
- 难道JBuilder5的工程名不支持大写?
- 求大神指点如何获取下面xml报文节点下的值!!!!!
- File#renameTo(File)
- java导出excl文件异常
Move你确定进去了吗?挂了肯定报异常吧?你能说清楚点吗。。
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);
}
}
}
U,D,L,R
}
一共就这三个类
n.next = head; //这里就挂了
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;
}我把那段该成这样 但还是不行
addHead();
delTail();
} private void delTail() {
if(tail.prev == null) return;
tail = tail.prev;
tail.next =null;
}
加上这一段程序就Ok啦 但不知道是什么原因