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();
}
}
}
}
===============================================