以下是我用java写的俄罗斯方块游戏游戏结束时抛出异常请问这样处理异常,并且可以让游戏重新开始按数字4键6键左右移2键下落import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;class fangkuai extends JFrame implements Runnable
{
int x=0;//横坐标
int y=0;///纵坐标
int mx;/////描述方块模型
int ax,ay,bx,by,cx,cy,dx,dy;///描述数组下标
int ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1;///用于回滚,清除图象
int ascll;////键盘ascll码
int time;////线程睡眠时间
int score;////统计得分
int cut=1;////关卡
Thread t1;////线程
byte vaa[][]=new byte[10][20];////容器数组
JPanel panel;
public static void  main(String a[])////主函数
{
new fangkuai();
}
public fangkuai()////////////构造函数
{
super("俄罗斯方块");
panel=new JPanel();
time=400;
for(;x<10;x++)
{
y=0;
for(;y<20;y++)
{
vaa[x][y]=0;
}
}
x=4;y=0;

getContentPane().add(panel);
addKeyListener(new key());//键盘监听
setSize(320,500);
setVisible(true);
t1=new Thread(this);
t1.start();//启动线程
repaint();
}
public void run()///线程方法
{
while(true)
{
try
{
Thread.sleep(time);
}
catch(Exception e)
{}
y++;
if(y==1)
mx=shuiji();////获得随机数
if(dy<19&&ay<19&&cy<19&&by<19)
{
ax1=ax;ay1=ay;bx1=bx;by1=by;cx1=cx;cy1=cy;dx1=dx;dy1=dy;
mopd();
int temp=panduan();
if(temp==0)
{
qingchu();
vaa[ax1][ay1]=2;
vaa[bx1][by1]=2;
vaa[cx1][cy1]=2;
vaa[dx1][dy1]=2;
qingzi();
x=4;y=0;
ay=by=cy=dy=1;
time=400-(cut-1)*40;
}
else
{
  qingchu();
vaa[ax][ay]=1;
vaa[bx][by]=1;
vaa[cx][cy]=1;
vaa[dx][dy]=1;
}
}
else
{
qingchu();
vaa[ax][ay]=2;
vaa[bx][by]=2;
vaa[cx][cy]=2;
vaa[dx][dy]=2;
qingzi();
y=0; x=4;
ay=by=cy=dy=1;
time=400-(cut-1)*40;
}
System.out.println("Thread"+y);
repaint();
}
}
public int shuiji()///产生随机数
{
Date dat=new Date();
int s=dat.getSeconds();
s=s%19;
return s;
} public void mopd()////////描述方块模型
{ if(mx==1)
{
ax=x; bx=ax+1;cx=ax+2;dx=ax+3;
ay=y; by=cy=dy=ay;
}
if(mx==2)
{
ax=x;bx=cx=dx=ax;
ay=y; by=ay+1; cy=ay+2; dy=ay+3;
}
if(mx==3)
{
ax=x;bx=cx=ax+1;dx=ax+2;
ay=y;by=ay;cy=dy=ay+1;
}
if(mx==4)
{
ax=x+1;bx=ax-1;cx=ax;dx=ax-1;
ay=y;by=cy=ay+1;dy=ay+2;
}
if(mx==5)
{
ax=x+1;bx=ax+1;cx=ax-1;dx=ax;
ay=y;by=ay;cy=dy=ay+1;
}
if(mx==6)
{
ax=x;bx=ax;cx=dx=ax+1;
ay=y;by=cy=ay+1;dy=ay+2;
}
if(mx==7)
{
ax=x+1;bx=ax-1;cx=ax;dx=ax+1;
ay=y;by=cy=dy=ay+1;
}
if(mx==8)
{
ax=x;bx=dx=ax;cx=ax+1;
ay=y;by=cy=ay+1;dy=ay+2;
}
if(mx==9)
{
ax=x;bx=ax+1;cx=ax+2;dx=ax+1;
ay=y;by=cy=ay;dy=ay+1;
}
if(mx==10)
{
ax=x+1;bx=ax-1;cx=dx=ax;
ay=y;by=cy=ay+1;dy=ay+2;
}
if(mx==11)
{
ax=x;bx=cx=ax;dx=ax+1;
ay=y;by=ay+1;cy=dy=ay+2;
}
if(mx==12)
{
ax=x;bx=ax+1;cx=ax+2;dx=ax;
ay=y;by=cy=ay;dy=ay+1;
}
if(mx==13)
{
ax=x;bx=cx=dx=ax+1;
ay=y;by=ay;cy=ay+1;dy=ay+2;
}
if(mx==14)
{
ax=x+2;bx=ax-2;cx=ax-1;dx=ax;
ay=y;by=cy=dy=ay+1;
}
if(mx==15)
{
ax=x+1;bx=cx=ax;dx=ax-1;
ay=y;by=ay+1;cy=dy=ay+2;
}
if(mx==16)
{
ax=x;bx=ax;cx=ax+1;dx=ax+2;
ay=y;by=cy=dy=ay+1;
}
if(mx==17)
{
ax=x;bx=ax+1;cx=dx=ax;
ay=y;by=ay;cy=ay+1;dy=ay+2;
}
if(mx==18)
{
ax=x;bx=ax+1;cx=dx=ax+2;
ay=y;by=cy=ay;dy=ay+1;
}
if(mx==0)
{
ax=x;bx=dx=ax+1;cx=ax;
ay=y;by=ay;cy=dy=ay+1;
} }
public int  panduan()//判断图象是否可以成立
{ if(ax<=9&&ax>=0&&ay<=19&&ay>=0&&bx<=9&&bx>=0&&by>=0&&by<=19&&cx<=9&&cx>=0&&cy<=19&&cy>=0&&dx<=9&&dx>=0&&dy>=0&&dy<=19 )
{
if(vaa[ax][ay]==2||vaa[bx][by]==2||vaa[cx][cy]==2||vaa[dx][dy]==2)
{
return 0;
}
else
{
return 1;
}
}
else
{
return 0;
}
}
public void qingchu()//清除原有图象
{
vaa[ax1][ay1]=0;
vaa[bx1][by1]=0;
vaa[cx1][cy1]=0;
vaa[dx1][dy1]=0;
}
public void qingzi()//清除以乘的子
{
int i1=0;
int temp=0;
for(int y1=0;y1<20;y1++)
{
for(int x1=0;x1<10;x1++)
{
if(vaa[x1][y1]==2)
{i1++;}
}
if(i1>9)
{
qz(y1);
temp++;
y1--;
    }
    i1=0;
}
if(temp==1)
score=score+100;
if(temp==2)
score=score+300;
if(temp==3)
score=score+500;
if(temp==4)
score=score+800;
cut=score/10000+1;
}
public void qz(int y1)//清除以乘的子
{
int y2=y1;
for(int x2=0;x2<10;x2++)
{
vaa[x2][y2]=0;
}
for(;y2>0;y2--)
{
for(int x2=0;x2<10;x2++)
{
vaa[x2][y2]=vaa[x2][y2-1];
}
}
}
public void bianxing()////////变形
{
if(mx!=2&&mx!=4&&mx!=6&&mx!=10&&mx!=14&&mx!=18&&mx!=0)
{
mx++;
}
else
{
if(mx==2)
mx=1;
if(mx==4)
mx=3;
if(mx==6)
mx=5;
if(mx==10)
mx=7;
if(mx==14)
mx=11;
if(mx==18)
mx=15;
}
}
public void paint(Graphics g)/////////画图
{
int i=20;
int z=0;
int xx=0;
int yy=0;
g.clearRect(0,0,size().width,size().height);
g.setColor(Color.getHSBColor(105,105,105));
g.fillRect(20,40,i*10,i*20);

g.setColor(Color.black);
g.drawLine(20,z*i+40,21*10+10,z*i+40);
g.drawLine(20,20*i+40,21*10+10,20*i+40);//////////画横线

g.drawLine(z*i+20,40,z*i+20,20*20+40);
g.drawLine(10*i+20,40,10*i+20,20*20+40);/////////////画竖线

for(;xx<10;xx++)
{
for(;yy<20;yy++)
{
if(vaa[xx][yy]==1||vaa[xx][yy]==2)
{
if(vaa[xx][yy]==1)
g.setColor(Color.red);
else
g.setColor(Color.blue);
g.fillRect((xx+1)*i+1,yy*i+40+1,19,19);////////画方格
}
}
yy=0;
} g.setColor(Color.red);
g.drawString("总分:"+score,240,90);
g.drawString("关数:"+cut,240,110);
}
class key implements KeyListener////////键盘事件
{
public void keyPressed(KeyEvent e)
{
if(ascll==53)/////5键,下移
{
time=400-(cut-1)*40;
}
}
public void keyReleased(KeyEvent e)
{
if(ascll==53)/////5键,下移
{
time=20;
}
}
public void keyTyped(KeyEvent e)
{
char cha=e.getKeyChar();
ascll=(int)cha;
System.out.println(ascll);

if(ascll==54&&dx<9&&ax<9&&cx<9&&bx<9)/////6键,右移
{
ax1=ax;ay1=ay;bx1=bx;by1=by;cx1=cx;cy1=cy;dx1=dx;dy1=dy;
x++;
honk();
}
if(ascll==52&&ax>0&&bx>0&&cx>0&&dx>0)/////4键,左移
{
ax1=ax;ay1=ay;bx1=bx;by1=by;cx1=cx;cy1=cy;dx1=dx;dy1=dy;
x--;
honk();
} if(ascll==32)///空格键,变形
{
int temp=mx;
ax1=ax;ay1=ay;bx1=bx;by1=by;cx1=cx;cy1=cy;dx1=dx;dy1=dy;
bianxing();
try
{
mopd();
int a=panduan();
if(a==0)
{
mx=temp;
mopd();
}
else
{
qingchu();
vaa[ax][ay]=1;
vaa[bx][by]=1;
vaa[cx][cy]=1;
vaa[dx][dy]=1;
}

}
catch(Exception e1)
{
mx=temp;
}
repaint();
}
}
public void honk()//////节约代码
{

mopd();
int temp=panduan();
if(temp==0)
{
if(ascll==54)
{
x--;
}
if(ascll==52)
{
x++;
}
mopd();
qingchu();
vaa[ax1][ay1]=1;
vaa[bx1][by1]=1;
vaa[cx1][cy1]=1;
vaa[dx1][dy1]=1;
}
else
{
qingchu();
vaa[ax][ay]=1;
vaa[bx][by]=1;
vaa[cx][cy]=1;
vaa[dx][dy]=1;
repaint();
}
}
}
}
/**本程序完成于2004年9月/