📄 exercise11.03.java
字号:
import java.applet.*;
import java.awt.*;
//import java.lang.Math;
public class Exercise extends
Applet implements Runnable {
public int count = 0; //计数器用来控制红绿灯和汽车是否停止运动
public long getStartTime;
int a = 0, b = 0, c = 800, d = 0; //为下面控制车运动线程里的两个参数
int create1 = 5, create2; //create1 表示car1的数量,create2表示
Image car1, car2, car3, car4, back; //定义背景的公路和汽车
Image red, green, yellow, light;
Image red1, green1, yellow1, light1;
car1Thread[] ct = new car1Thread[3]; //为5辆车分别分配一个线程
car11Thread[] ct1 = new car11Thread[3]; //为5辆车分别分配一个线程
car22Thread[] ct2 = new car22Thread[3];
light l1 = new light();
MediaTracker mt; //定义一个媒体跟踪器//*暂时没有使用
public Exercise() {
}
public void init() {
back = getImage(getDocumentBase(), "Image/11.gif");
car1 = getImage(getDocumentBase(), "Image/car1.gif");
car2 = getImage(getDocumentBase(), "Image/car2.gif");
car3 = getImage(getDocumentBase(), "Image/car3.gif");
car4 = getImage(getDocumentBase(), "Image/car4.gif");
red = getImage(getDocumentBase(), "Image/red.gif");
red1 = getImage(getDocumentBase(), "Image/red1.gif");
green = getImage(getDocumentBase(), "Image/green.gif");
green1 = getImage(getDocumentBase(), "Image/green1.gif");
yellow = getImage(getDocumentBase(), "Image/yellow.gif");
yellow1 = getImage(getDocumentBase(), "Image/yellow1.gif");
light = getImage(getDocumentBase(), "Image/light.gif");
light1 = getImage(getDocumentBase(), "Image/light1.gif");
}
public void start() {
new Thread(l1).start();
for (int i = 0; i <= 2; i++) {
ct[i] = new car1Thread(a, i);
a -= 50;
if (i > 2) {
a = 0;
}
}
for (int i = 0; i <= 2; i++) {
ct2[i] = new car22Thread(a);
a -= 50;
if (i > 2) {
a = 0;
}
}
for (int i = 0; i <= 2; i++) {
ct1[i] = new car11Thread(c);
c += 50;
if (i > 2) {
c = 800;
}
}
for (int i = 0; i <= 2; i++) {
ct[i].start();
}
for (int i = 0; i <= 2; i++) {
ct2[i].start();
}
for (int i = 0; i <= 2; i++) {
ct1[i].start();
}
}
public void stop() {
}
public void paint(Graphics g) {
g.drawImage(back, 0, 0, 800, 600, this); //将定义的图片显示到Applet,要不显示不出来笨蛋大笨蛋
g.drawImage(light, 430, 283, 25, 48, this);
g.drawImage(light, 285, 233, 25, 48, this);
g.drawImage(light1, 380, 335, 48, 25, this);
g.drawImage(light1, 310, 208, 48, 25, this);
if (count == 0) {
g.drawImage(red, 430, 283, 20, 20, this);
g.drawImage(red, 285, 232, 20, 20, this);
g.drawImage(green1, 410, 335, 20, 20, this);
g.drawImage(green1, 339, 208, 20, 20, this);
} else if (count == 1 || count == 3) {
g.drawImage(yellow, 430, 299, 20, 20, this);
g.drawImage(yellow, 285, 248, 20, 20, this);
g.drawImage(yellow1, 395, 335, 20, 20, this);
g.drawImage(yellow1, 323, 208, 20, 20, this);
} else if (count == 2) {
g.drawImage(green, 430, 315, 20, 20, this);
g.drawImage(green, 285, 263, 20, 20, this);
g.drawImage(red1, 380, 335, 20, 20, this);
g.drawImage(red1, 307, 208, 20, 20, this);
}
getStartTime = l1.getStartTime();
int i = 0, ii = 0;
while (true) {
g.drawImage(car3, ct1[i].getNumber(), 230, 71, 54, this);
g.drawImage(car1, 370, ct2[i].getNumber(), 71, 54, this);
i++;
if (i > 2) {
break;
}
}
while (true) {
g.drawImage(car2, ct[ii].getNumber(), 285, 71, 54, this);
ii++;
if (ii > 2) {
break;
}
}
}
public void run() {}
public void update(Graphics g) {
paint(g);
}
//控制横坐标汽车运动
class car1Thread extends Thread {
light ll = new light();
int xaxis; //设置横标变化量
int Id;
long time;
long endTime;
//long startTime ;//= ll.getStartTime();
public car1Thread(int a, int ID) {
xaxis = a;
Id = ID;
}
public car1Thread() {
xaxis = 0;
}
public void run() {
while (true) {
repaint();
try {
if (count == 0 && (xaxis > 220 && xaxis < 240)) {
endTime = this.getEndTime();
long startTime = getStartTime;
time = 5000 - (endTime - startTime);
Thread.sleep(time);
}
Thread.sleep(50);
xaxis += 5;
if (xaxis >= 800) {
xaxis = 0;
}
} catch (InterruptedException E) {}
}
}
//新加的函数,议会可能将要被删掉********************8
public void startSleep() {
try {
Thread.sleep(time);
} catch (InterruptedException e) {}
}
public int getNumber() {
//System.out.println("car :"+xaxis);
return xaxis;
}
public long getEndTime() {
return endTime = System.currentTimeMillis();
}
}
class car11Thread extends Thread {
// light ll = new light();
int xaxis1; //设置横标变化量
// long time;
// long endTime;
// long startTime = ll.getStartTime();
public car11Thread(int a) {
xaxis1 = a;
}
public car11Thread() {
xaxis1 = 0;
}
public void run() {
while (true) {
repaint();
try {
if (count == 1 && (xaxis1 > 400 && xaxis1 < 420)) {
// endTime = this.getEndTime();
// System.out.println("startTime:" + startTime);
// System.out.println("endTime :" + endTime);
// time = 3000 - (endTime - startTime);
// System.out.println(time);
Thread.sleep(5000);
}
Thread.sleep(50);
xaxis1 = xaxis1 - 5;
if (xaxis1 <= 0) {
xaxis1 = 800;
}
} catch (InterruptedException E) {}
}
}
public int getNumber() {
// System.out.println("car :" + xaxis1);
return xaxis1;
}
// public long getEndTime() {
// // return endTime = System.currentTimeMillis();
//
// }
}
class car22Thread extends Thread {
// light ll = new light();
int yaxis1; //设置横标变化量
// long time;
// long endTime;
// long startTime = ll.getStartTime();
public car22Thread(int a) {
yaxis1 = a;
}
public car22Thread() {
yaxis1 = 0;
}
public void run() {
while (true) {
repaint();
try {
if (count == 3 && (yaxis1 > 180 && yaxis1 < 210)) {
// endTime = this.getEndTime();
// System.out.println("startTime:" + startTime);
// System.out.println("endTime :" + endTime);
// time = 3000 - (endTime - startTime);
// System.out.println(time);
Thread.sleep(5000);
}
Thread.sleep(50);
yaxis1 += 5;
if (yaxis1 >= 600) {
yaxis1 = 0;
}
} catch (InterruptedException E) {}
}
}
public int getNumber() {
//System.out.println("car :"+xaxis);
return yaxis1;
}
// public long getEndTime() {
// // return endTime = System.currentTimeMillis();
//
// }
}
class car2Thread implements Runnable {
int yaxis = 0; //设置纵坐标变化量
public car2Thread(int b) {
yaxis = b;
}
public void run() {
while (true) {
repaint();
try {
Thread.sleep(50);
yaxis += 10;
if (yaxis >= 800) {
yaxis = 0;
}
} catch (InterruptedException E) {}
}
}
public int getNumber() {
return yaxis;
}
}
//light扩展runnable接口控制红绿灯
class light implements Runnable {
long getTime;
long tt;
public void run() {
while (true) {
try {
if (count > 3) {
count = 0;
}
if (count == 1 || count == 3) {
Thread.sleep(500); //黄灯的时间持续的要短一些
} else {
if (count == 0) {
getTime = System.currentTimeMillis();
}
Thread.sleep(5000); //红绿灯持续的时间长一些
}
count++;
} catch (Exception e) {}
}
}
public long getStartTime() {
return getTime;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -