import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;

public class RETRUCK extends Applet implements Runnable{
  Dimension d;  
  Thread tm;
  Random r = new Random();
  Image offI;
  int speed = 33;
  String title[] = { "T", "R", "U", "C", "K", " ", "D", "O", "D", "G", "E"};
  GRID5 grid = new GRID5();

  public void init(){
    d = getSize();
    offI=createImage(d.width,d.height);
    reset();
    tm = new Thread(this);
    tm.start();
    requestFocus(); 
    this.addKeyListener(new KeyAdapter(){ 
      public void keyPressed(KeyEvent k) {
       if(grid.keepPlaying()){ 
        if(k.getKeyCode() == KeyEvent.VK_RIGHT){
          grid.move_car(1);
        } 
        else if(k.getKeyCode() == KeyEvent.VK_LEFT){
          grid.move_car(-1);
        }
       }
       else{
        reset();
       }
       repaint();
      }
    });
  }

  public void reset(){
    grid=new GRID5();
  }

  public void run(){
    while(true){
      while(grid.keepPlaying()){
        grid.move_trucks();
        repaint();
        try{
          Thread.sleep(speed);
        }catch(InterruptedException e){};
      }
    }
  }

  public void update(Graphics g){
    paint(g);
  }

  public void paint(Graphics g){
    Graphics offG = offI.getGraphics();
    offG.setColor(Color.white);
    offG.fillRect(0,0,d.width,d.height);
    grid.draw(offG);
    offG.setColor(Color.black);
    offG.setFont(new Font("sansserif", Font.BOLD, 14));
    for(int i = 0; i<title.length; i++){
      offG.drawString(title[i], 5, 20+20*i);
    }
    offG.setFont(new Font("sansserif", Font.PLAIN, 12));
    if( grid.score==0) offG.drawString("Keep playing.",15,d.height-5);
    else if(grid.keepPlaying()) offG.drawString("SCORE: " + grid.score,
             15,d.height-5);
    else{
      offG.drawString("Press 'r'.", 15, d.height-2);
      offG.drawString("SCORE: " + grid.score,15,d.height-17);
    }
    g.drawImage(offI, 0, 0, this);
  }
}
