62,614
社区成员
发帖
与我相关
我的任务
分享
package net.imwork.thelightcloud;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
public class G1P2 extends JFrame
{
//设置游戏屏幕大小
final int WIDTH = 900,HEIGHT = 650;
double p1Speed = .5,p2Speed = .5;
//跑道
Rectangle left = new Rectangle(0,0,WIDTH/9,HEIGHT);
Rectangle right = new Rectangle((WIDTH/9)*9,0,WIDTH/9,HEIGHT);
Rectangle top = new Rectangle(0,0,WIDTH,HEIGHT/9);
Rectangle bottom = new Rectangle(0,(HEIGHT/9)*9,(WIDTH/9)*10,HEIGHT/9);
Rectangle center = new Rectangle((int)((WIDTH/9)*2.5),(int)((HEIGHT/9)*2.5),(int)(WIDTH/9)*5,(HEIGHT/9)*4);
//障碍物
Rectangle obstacle = new Rectangle(WIDTH/2,(int)((HEIGHT/9)*7),WIDTH/10,HEIGHT/9);
Rectangle obstacle2 = new Rectangle(WIDTH/3,(int)((HEIGHT/9)*5),WIDTH/10,HEIGHT/4);
Rectangle obstacle3 = new Rectangle(2*(WIDTH/3),(int)((HEIGHT/9)*5),WIDTH/10,HEIGHT/4);
Rectangle obstacle4 = new Rectangle(WIDTH/3,HEIGHT/9,WIDTH/30,HEIGHT/9);
Rectangle obstacle5 = new Rectangle(WIDTH/2,(int)((HEIGHT/9)*1.5),WIDTH/30,HEIGHT/4);
//设置终点和起跑线
Rectangle finish = new Rectangle(WIDTH/9,(HEIGHT/2)-HEIGHT/9,(int)((WIDTH/9)*1.5),HEIGHT/70);
//赛车
Rectangle p1 = new Rectangle(WIDTH/9,HEIGHT/2,WIDTH/30,WIDTH/30);
Rectangle p2 = new Rectangle(((WIDTH/9)+((int)((WIDTH/9)*1.5)/2)),(HEIGHT/2)+(HEIGHT/10),WIDTH/30,WIDTH/30);
//构造方法 初始化界面
public G1P2()
{
super("Radical Racing");
setSize(WIDTH,HEIGHT);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
Move1 m1 = new Move1();
Move2 m2 = new Move2();
m1.start();
m2.start();
}
public void paint(Graphics g)
{
//调用父类构造方法
super.paint(g);
//绘制图形并填充颜色
g.setColor(Color.DARK_GRAY);
g.fillRect(0,0, WIDTH, HEIGHT);
g.setColor(Color.GREEN);
Rectangle line0 = new Rectangle(WIDTH/9,HEIGHT/2,(int)((WIDTH/9)*1.5)/2,HEIGHT/140);
Rectangle line1 = new Rectangle(((WIDTH/9)+((int)((WIDTH/9)*1.5)/2)),(HEIGHT/2)+(HEIGHT / 10),(int)((WIDTH/9)*1.5)/2,HEIGHT/140);
g.fillRect(left.x, left.y, left.width, left.height);
g.fillRect(right.x,right.y, right.width, right.height);
g.fillRect(top.x, top.y, top.width, top.height);
g.fillRect(bottom.x, bottom.y, bottom.width, bottom.height);
g.fillRect(center.x, center.y, center.width, center.height);
g.fillRect(obstacle.x, obstacle.y, obstacle.width, obstacle.height);
g.fillRect(obstacle2.x, obstacle2.y, obstacle2.width, obstacle2.height);
g.fillRect(obstacle3.x, obstacle3.y, obstacle3.width, obstacle3.height);
g.fillRect(obstacle4.x, obstacle4.y, obstacle4.width, obstacle4.height);
g.fillRect(obstacle5.x, obstacle5.y, obstacle5.width, obstacle5.height);
g.setColor(Color.WHITE);
g.fillRect(line0.x, line0.y, line0.width, line0.height);
g.fillRect(line1.x, line1.y, line1.width, line1.height);
g.setColor(Color.YELLOW);
g.fillRect(finish.x, finish.y, finish.width, finish.height);
g.setColor(Color.BLUE);
g.fillRect(p1.x, p1.y, p1.width, p1.height);
g.setColor(Color.RED);
g.fillRect(p2.x, p2.y, p2.width, p2.height);
}
//内部类
private class Move1 extends Thread
{
public void run()
{
while(true)
{
try
{
repaint();
if(p1Speed <= 5)
{
p1Speed += .2;
}
p1.y -= p1Speed;
Thread.sleep(75);
}catch(Exception e)
{
break;
}
}
}
}
private class Move2 extends Thread
{
public void run()
{
while(true)
{
try
{
repaint();
if(p2Speed<=5)
{
p2Speed+=.2;
}
p2.y -= p2Speed;
Thread.sleep(75);
}catch(Exception e)
{
break;
}
}
}
}
public static void main(String[] args)
{
new G1P2();
}
}
注意红色标记部分,repaint方法没有给出,我猜是在repaint方法内调用的pain方法