最近仿照马士兵的贪食蛇自己也写了一个。但是发现有一个问题 
  
蛇走的方法 repaint()我放在一个线程中 设置每隔200毫秒执行一次
例如:蛇在向右运动 然后快速按 下和左蛇就会朝自己撞死自己 也就是按下下之后 线程还没有刷新 我又按了左他就撞死了.
线程类
class thread extends Thread{

public void run(){

while(ture){
p.s.move();
p.repaint();
try {
Thread.sleep(200);

catch (InterruptedException e) 
{
}
}

}

添加监听后 按键执行的方法
public void direction(KeyEvent e) {
int dir = e.getKeyCode(); switch(dir){
case KeyEvent.VK_UP :  
if(head.dir!=Dir.D){
head.dir=Dir.U;
break;
}
case KeyEvent.VK_DOWN :
if(head.dir!=Dir.U){
head.dir=Dir.D;
break;
}
case KeyEvent.VK_RIGHT:
if(head.dir!=Dir.L){
head.dir=Dir.R;
break;
}
case KeyEvent.VK_LEFT :
if(head.dir!=Dir.R){
head.dir=Dir.L;
break;
}
}
}不知道各位能听懂我的描述不·我想了一些解决方法都不太妥当 总觉得 监听器自己就是一个线程一旦添加不好控制线程

解决方案 »

  1.   

    写一个标志位,方向相反的时候不能自己装自己的,而且
                        /^\/^\
                      _|__|  O|
             \/     /~     \_/ \
              \____|__________/  \
                     \_______      \
                             `\     \                 \
                               |     |                  \
                              /      /                    \
                             /     /                       \\
                           /      /                         \ \
                          /     /                            \  \
                        /     /             _----_            \   \
                       /     /           _-~      ~-_         |   |
                      (      (        _-~    _--_    ~-_     _/   |
                       \      ~-____-~    _-~    ~-_    ~-_-~    /
                         ~-_           _-~          ~-_       _-~   
                            ~--______-~                ~-___-~
    本身不可以往后走吧,把这个方向去掉就可以了