Snake的绘制线程中设置一个变量和一个队列,绘制线程根据变量不断的移动Snake并绘制。当主线程收到键盘事件时将事件放入到队列中。线程每次移动Snake时先检查队列,如果有值,则先按照值设置变量,然后移动即可。

解决方案 »

  1.   

    class Snake extends Thread{
       public void run() {
         // get key event and record down new coordinates
       }
       int pos_x, pos_y;
    }class Main extends JFrame {
      Thread[] snakes = new Snake[2];
      public... main...
       for(int i = 0; i <snakes.length; i++) {     
          Snake s = new Snake(...);
          snakes[i]=s;
          s.start();
       }
      }
      public void paint() {
        for(int i=0; i < snakes.length; i++) {
          Snake thisSnake = snakes[i];
          pos_x = thisSnake.getPosX();
           ...
          // draw based on pos_x, pos_y;
        }
        ...
       }
       ...
     }
      

  2.   

    或者这样是否也可?移动和绘制都由Snake自己完成。
    class Snake extends Thread {
       int x,y;
       public Snake() {
          start();
       }
       public void paint(Graphics g) {
         //paint self with x,y here
       }
       public void run() {
         //loop to change x,y, realize moving
       }
    }class Main extends JFrame {
      Snake[] snakes = new Snake[2];
      public static void main(String[] args) {
       for(int i = 0; i <snakes.length; i++) {     
          snakes[i]=new Snake();
       }
      }
      public void paint(Graphics g) {
        for(int i=0; i < snakes.length; i++) {
          Snake snake = snakes[i];
            snake.paint(g);
        }
        ...
       }
       ...
     }