Java赛车游戏

主要想法如下:

把画布分成N*N个网格,有填充的和无填充的。

当画一辆汽车时,用颜色填满那些正方形。

绘制道路,即在左右两边交替填充方格,一格一格下移,模拟移动效果。

参考代码:

===============================================

包装测试;

导入Java . awt . borderlayout;

导入Java . awt . graphics;

导入javax . swing . jframe;

导入javax . swing . jpanel;

公共类Racer扩展JFrame{

私有MyPanel drawPanel

公共静态final int LINE _ LEN = 20//正方形的边长

公共静态final int NUM = 20//方块数为NUM*NUM。

private static final int EDGE _ WIDTH = 25;//边距

Racer(){

getContentPane()。set layout(new BorderLayout());

draw panel = new my panel(this);

getContentPane()。add(drawPanel,“居中”);

setSize((LINE _ LEN+1)* NUM+EDGE _ WIDTH,(LINE _ LEN+1)* NUM+EDGE _ WIDTH);

set visible(true);

setDefaultCloseOperation(JFrame。EXIT _ ON _ CLOSE);

}

公共静态void main(String[] args) {

Racer r = new Racer();

}

}

MyPanel类扩展JPanel实现Runnable{

私人赛车手车主;

私有静态布尔标志= false//画道路时,黑白方块交替画。

私有int num=Racer。NUM

私人int len=Racer。LINE _ LEN

我的面板(Racer r){

owner = r;

新帖(本)。start();

}

公共空白油漆(图形g) {

g.clearRect(0,0,getSize()。width,getSize()。身高);

drawBkgnd(g);//绘制背景

draw road(g);//画一条路

拖车(克);//画一辆汽车

}

私有无效drawBkgnd(图形g){

for(int I = 0;我& lt= numi++){

g.drawLine(0,i*len,len*num,I * len);

g.drawLine(i*len,0,i*len,len * num);

}

}

私人空车道(图形g){

如果(标志){

flag = false

for(int I = 0;我& ltnumi+=2){

g.fillRect(0,i*len,len,len);

g.fillRect((num-1)*len,i*len,len,len);

}

}

否则{

flag = true

for(int I = 1;我& ltnumi+=2){

g.fillRect(0,i*len,len,len);

g.fillRect((num-1)*len,i*len,len,len);

}

}

}

私人空拖车(图形g){

int x=len*(int)((num-3)/2),y =(num-4)* len;

g.fillRect(x+1,y+1,len-1,len * 4-1);

g.fillRect(x-len+1,y+len+1,len*3-1,len-1);

g.fillRect(x-len+1,y+len*3+1,len*3-1,len-1);

}

公共无效运行(){

while(true){

repaint();

尝试{

thread . sleep(200);

} catch(中断例外){

ex . printstacktrace();

}

}

}

}

===============================================