//<applet   code=CrabPassRoad.class   width=400   height=500   >   
//</applet>   
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CrabPassRoad extends JApplet implements Runnable{
Graphics g2;//前台图形
Image road;//道路图片
Image tank;//坦克图片
Image truck;//坦克图片
Image crab;//螃蟹图片
Image UFO;//UFO图片
Image rocket;//火箭图片
Image die;//被撞螃蟹图片
Image gameover;//游戏结束图片
Image img2;//后台缓冲区
int xCrab;//螃蟹坐标
int yCrab;
int xUFO;//UFO坐标
int xRocket;//火箭坐标
int xTank;//坦克坐标
int xTruck;//卡车坐标
int num;//生命数目
int score;//积分
int SuccessTimes;//成功通过街道次数
int sleepTime;//线程休眠时间
int speed;//速度等级
boolean st=true;//线程运行开关,为ture时线程运行
private Thread CrabThread;

public void start(){//创建并启动线程
    if(CrabThread==null){
     CrabThread=new Thread(this);
     CrabThread.start();
    }
}

public void stop(){//停止并销毁线程
   if(CrabThread!=null){
  CrabThread.stop();
  CrabThread=null;
  }
}
//键盘事件响应
public boolean processKeyEvent(KeyEvent evt,int key){

   switch(key){
    case Event.DOWN://向下建
         yCrab +=40;
         break;
         
    case Event.UP://向上键
         yCrab -=40;
         break;
         
    case Event.LEFT://向左键
         xCrab +=40;
         break;
         
    case Event.RIGHT://向右键
         xCrab -=40;
         break;
                       
   }
   repaint();
   return true;
}

public CrabPassRoad(){//构造方法,设定初始值
    xCrab=140;
    yCrab=205;
    xUFO=-80;
    xRocket=320;
    xTank=-80;
    xTruck=320;
    num=5;//你有5次机会
    sleepTime=30;
    speed=1;
}


public void run(){
do{
try{
repaint();
Thread.sleep(sleepTime);
}
catch(InterruptedException e){
}
} while(st);//为ture时线程运行,否则停止
}


public void destroy(){
}
public void init(){
road=getImage(getCodeBase(),"road.jpg");
tank=getImage(getCodeBase(),"tank.jpg");
crab=getImage(getCodeBase(),"crab.jpg");
truck=getImage(getCodeBase(),"truck.jpg");
die=getImage(getCodeBase(),"die.jpg");
rocket=getImage(getCodeBase(),"rocket.jpg");
UFO=getImage(getCodeBase(),"UFO.jpg");
gameover=getImage(getCodeBase(),"gameover.jpg");
img2=createImage(320,240);//创建后台缓冲区
g2=img2.getGraphics();

requestFocus();
setSize(320,240);
}

public void paint(Graphics g){
        g2.drawImage(road,0,0,this); 
if(xUFO<=320){//如果没有走到最左端
   xUFO+=4;//则一直向前走
}
else{
xUFO=-80;//否则就回到出发起点
}
if(xRocket>=-80){//
    xRocket-=3;//
}
else{
xRocket=320;//否则就回到出发起点
}
if(xTank<=320){
xTank+=2;
}
else{
xTank=-80;
}
if(xTruck>=-80){
xTruck--;
}
else{
xTruck=320;
}
g2.drawImage(UFO,xUFO,40,this);
g2.drawImage(rocket,xRocket,80,this);
g2.drawImage(tank,xTank,120,this);
g2.drawImage(truck,xTruck,160,this);
g2.drawImage(crab,xCrab,yCrab,this);
if(yCrab>40&&yCrab<80&&xCrab>=xUFO-40&&xCrab<=xUFO+80){
g2.drawImage(die,xCrab,yCrab,this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){
}
num--;
xCrab=140;
yCrab=205;
}
if(yCrab>80&&yCrab<120&&xCrab>=xRocket-40&&xCrab<=xRocket+80){
g2.drawImage(die,xCrab,yCrab,this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){
}
num--;
xCrab=140;
yCrab=205;
}
if(yCrab>120&&yCrab<160&&xCrab>=xTank-40&&xCrab<=xTank+80){
g2.drawImage(die,xCrab,yCrab,this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){
}
num--;
xCrab=140;
yCrab=205;
}
if(yCrab>160&&yCrab<200&&xCrab>=xTruck-40&&xCrab<=xTruck+80){
g2.drawImage(die,xCrab,yCrab,this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){
}
num--;
xCrab=140;
yCrab=205;
}
if(yCrab>205){
yCrab=205;//回到起点
}
if(yCrab<=4){//如果成功通过道路
    yCrab=205;//
    score+=100;//
    SuccessTimes++;//
}
if(SuccessTimes==5){
if(sleepTime>=10){
sleepTime-=6;
if(speed<4){
speed++;
}
else{
speed=4;
}

}
else{
sleepTime=10;
}
num++;//命数加1
SuccessTimes=0;
}
if(num<0){//则游戏结束
g2.drawImage(gameover,0,0,this);
st=false;
}
g2.drawString("num="+num+"",10,10);
g2.drawString("score="+score+"",10,30);
g2.drawString("speed="+speed+"",60,10);




g.drawImage(img2,0,0,this);




}

public void update(Graphics g){
paint(g);
}
}
键盘事件不响应 怎么解决阿