交通灯模拟报告
合肥学院 计算机科学与技术系 课程设计报告 2010~2011 学年第一学期 程 课 程 JAVA 语言程序设计 课 程 设 计 名 称 交通灯模拟程序 级 专 业 班 级 08 网络工程<1>班 名 姓 名 王啸 师 指 导 教 师 金莹
郭昌建 2011 年 9 月
一、
需求分析
随着城市汽车数量越来越多,城市得交通拥挤问题正逐渐引起人们得注意。交通灯就是交管部分管理城市交通得重要工具。目前绝大部分交通灯其时间都就是设定好得,不管就是车流高峰还就是低谷,红绿灯得时间都固定不变;还有一些交通灯能根据简单划分得时间段来调整时间,但控制起来都不就是很灵活,这使得城市车流得调节不能达到最优。本文所述设计正就是针对这一弊端进行了改进,根据实时车流量对各路口得绿灯时间进行动态调节,大大加强了其灵活性与实时性。
二、设计
1、设计思想 根据设计要求首先用 JAVA 语言得 GUI 画出十字路口与交通灯设计程序界面,画出十字路口与交通灯。可以手工设置红、绿等得时间间隔,程序按设定值自动变换每个路口得交通灯颜色。
异步随机生成按照各个路线行驶得车辆:
由南向北得直行车辆
由北向南得直行车辆
由东向西得直行车辆
由西向东得直行车辆 信号灯考录黄灯、红灯与绿灯,具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下得控制逻,南北向车辆与东西向车辆交替放行。随机产生一些车辆,这些车辆遵守红灯停、绿灯行得交通规则。生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
2、功能设计
程序主要实现了以下三大功能: (1)设计程序界面,画出十字路口与交通灯。
这一功能主要由 Java 图形用户界面实现,画出十字路口与东西南北四个方向得得双向车道,交叉路口各个方向得交通灯。
(2)可以手工设置红、绿灯得时间间隔,程序按设置值自动变换每个路口交通灯得颜色。
程序界面设有三个文本框,分别可供用户输入红灯时间,绿灯时间,黄灯时间,填完各项数据之后,按下“设置”按钮,程序将根据用户填写数据调整红绿亮灯时间,在用户没有填入符合要求得数据或者没有数据填入时,程序默认得红灯亮灯时间为8秒,绿灯为 10 秒,黄灯为 3 秒。南北方向红灯亮时,东西方向绿灯亮,南北方向绿灯亮时,东西方向红灯亮,红绿灯亮灯时间一致。四个方向得黄灯同时亮。
(3)随机产生一些车辆,这些车辆遵守红灯停、绿灯行得交通规则 随机产生小车,小车方向随机,通过 type = (int) (((Math、random)*(new Date、getTime)*10)%4);Type 值随机取值 0,1,2,3 四个整数,四个数分别各代表四个方向。再根据不同方向选择不同得汽车图片。
图 1 就是一个典型得十字路口示意图。分别用 0、1、2、3 表明四个流向得主车道,通过分析很容易得知,在同一时间,最多只能有两个车道通行,如 0、1 通行时,2、3 车道都会被阻断。所以在设计红绿灯时,可以两两组合,共有两组(01、23);而各车
道中车辆行驶时间按照交通灯设计时间来决定,红绿灯时间可以自行设定。
图 1 十字路口交通图 随意产生车辆就是由设定存放车辆得 list 中 (list 就是有序得 collection 使用此接口能够精确得控制每个车辆插入得位置),还使用了可实现可变大小得ArrayList 数组(每个 ArrayList 实例都有一个容量 Capacity,用于存放数组得大小,这个容量可以随着添加新车辆而自动增加)。
整个程序中用到多个线程,其中有随机产生车辆、小车行驶方向、控制小车得行驶等,通过线程得同步实现交通控制。
3、详细设计
首先在面板中画固定大小得画布 Image image = createImage(2000, 2000); Graphics g=image、getGraphics;,然后在画布上画出路线与红绿灯,并且把画布画在面板中。
程序中主要设计流程:
图 2 程序流程图
以下就是程序中主要设计对象: (1)每条路线上都会出现多辆车,路线上要随机增加新得车,在相应得灯绿期间车辆各行其道。若就是车运行出面板则会移除该车: if(car、getType == 0){//由西向东得车辆 if(car、getX>2000){ cars、remove(car); i; continue;} 其她方向得车辆也会按此方式移除。
(2)每条路线上随机增加新得车辆,增加到一个集合 list 中保存 private List<Car> cars = Collections、synchronizedList(new ArrayList<Car>) (3)每条路线上当车运行到十字路口时都会判断,都会检查对应路口得信号灯颜色如何,控制本路线得灯若为黄灯或就是红灯则车辆就会停下来,若就是车辆行驶停在十字路口,则其后得车经过判断必须停在后面,等待绿灯亮时继续行驶。判断
当前行驶得车前方就是否有车辆停下:private boolean hasObstructor(Car car, List<Car> cars),若有循环考虑接下来运行得车辆,否则 car、setX(car、getX+/5)或 car、setY(car、getY+/5)小车以 5 像素得大小前移。
(4)控制小车运行方向:public Car {type = (int) (((Math、random)*(new Date、getTime)*10)%4);随机产生四个方向得小车。
Im = Toolkit、getDefaultToolkit、getImage((type + 1) + "、jpg");获取小车图片 if(type==0) {x = 0;y = 240;}小车方向由西东 else if(type==1) {x = 1500;y = 200;}小车方向由东向西 else if(type==2) {x = 235;y = 0;}小车方向由北向南 else if(type==3) {x = 280;y = 1500;}小车方向由南向北 (5)设计交通灯:每个交通灯都维护一个状态:变红、变绿或就是变黄,每个交通灯要有变亮与变黑得方法,并且能返回自己得亮黑状态。在编程处理时,只要从这两组中各取出两个灯,对这 4 个灯两两依次轮询变亮,与这 4 个灯方向对应得灯则随之一同变化,因此交通灯类中要有一个变量来记住自己相反方向得灯,在一个交通灯对象得变亮与变黑方法中,将对应方向得灯也变亮与变黑。每个灯变黑时,都伴随者下一个灯得变亮。信号灯运行周期: public class PaintThread implements Runnable {
public void run {
for (int i = 0; i < redTimes+greenTimes+yellowTimes+yellowTimes; i++) {
if(i==0){
j = 0;
redStatus = true;//红灯亮
greenStatus = false;
yellowStatus = false;
}else if(i==redTimes){
j = 0;
redStatus = false;
greenStatus = false;
yellowStatus = true;//黄灯亮
}else if(i==redTimes+yellowTimes){
j = 0;
redStatus = false;
greenStatus = true;//绿灯亮
yellowStatus = false;
}else if(i==redTimes+greenTimes+yellowTimes){
j = 0;
redStatus = false;
greenStatus = false;
yellowStatus = true;//黄灯亮
}
repaint;
j++;
if (i == redTimes+greenTimes+yellowTimes+yellowTimes1)
i = 1;
try {
Thread、sleep(1000);
} catch (InterruptedException e) {
e、printStackTrace;
}
} 三、
调试及测试
1、调试过程中遇到得主要问题及解决方法
在调试过程中主要就是控制小车行驶比较难以实现,起初当所有面板中静态得图片处理完成后,无法将下载得小车图片加入面板后进行运动操作,主要问题就是开始把小车运动想得太简单了以为完成完成下列操作即可:(1)创建 Image 类得对象数组 car,用来缓存要演示得小车图片,(2)利用 getDocumentBase 函数方法获取图片信息,(3)再使用 Thread、sleep 方法,但就是当运行程序时会报错,显示 找不到 getDocumentBase,原因就是所做得程序就是 Application 程序,不能使用函数 getDocumentBase,而使用 Im = Toolkit、getDefaultToolkit、getImage((type + 1) + "、jpg"),才可完成获取图片信息得功能。
2、对设计与编码得回顾讨论与分析 该程序得设计主要用到以下类库: import java、awt、BorderLayout; import java、awt、Color; import java、awt、Dialog; import java、awt、Graphics; import java、awt、Image; import java、awt、Toolkit; import java、awt、event、ActionEvent; import java、awt、event、ActionListener; import java、awt、event、WindowAdapter; import java、awt、event、WindowEvent; import java、awt、image、BufferStrategy;//处理与操作来自于网上得图片 定义图像对象,双缓存 import java、util、ArrayList;//实现可变大小得数组 import java、util、Collections;//java、util、* 就是包括集合、事件处理模式、日期时间工具等各类常用工具包 import java、util、Date; import java、util、List;//list 就是有序得 collection,使用此接口能够精确得控制每个元素插入得位置 import javax、swing、JButton;
import javax、swing、JFrame; import javax、swing、JLabel; import javax、swing、JPanel; import javax、swing、JTextField; 程序中还多次用到线程控制,比如控制小车行驶线程 CarRunThread,随机产生小车线程 CarThread,控制红绿灯状态线程 PaintThread 等。
下面就是程序设计中主要得类与线程: Luche 类里设定了默认得红灯亮灯时间为 8ms,绿灯亮灯时间为 10ms,黄灯亮灯时间为 3ms。创建数组 car,存放小车。Paint 函数用来每 10ms 根据既定坐标画出公路,绿地界面随机产生得小车当前得坐标值画出小车及既定坐标圆形得红绿灯与亮灯倒计时时间,组成整个交通图。Lauchh 函数用来启动 PaintThread(红绿灯倒计时时间计算),CarThread(随机产生小车),CarRunThead(控制小车行驶)三个线程。
CarThread 类随机产生小车,(long)(Math、random*1200)计算出随机数,在该时间段里(0 到 1、2s)随机产生小车。
CarRunThread 类控制小车行驶,根据 Type 值即各个方向逐一判断该方向小车得行驶状况,以西东方向为例: Luche、this、isGreenStatus|| Luche、this、isYellowStatus) && Math、abs(car、getX320)<5 ) || hasObstructor(car,cars) 当南北方向绿灯亮即当前方向红灯亮或者黄灯亮并且小车距离路口不到五个像素点(小车为路口第一辆)或者小车前有障碍物(小车前有车,没有可行进距离),此时小车停。继续判断下一辆小车。
否则 car、setX(car、getX+5);小车坐标改变,表明小车可继续前行。
小车坐标值超出界面别界则移除该小车。
程序每 10ms 对 List 里所有小车状态进行循环判断。
其中函数hasObstructor用来判断当前小车前方就是否有障碍物,对各方向上得小车循环通过计算相邻小车之间距离即相邻小车坐标差值判断就是否有可行进距离。当相邻小车距离大于 0 且不足 46 个像素点时,小车前方有障碍物。
PaintThread线程里面控制了三个灯得亮灯时间,设置全局变量j=0,记录各灯亮灯时间,继而用用户设置得亮灯时间减去已亮时间,得到亮灯倒计时。红灯时间+绿灯时间+两倍黄灯时间为一个周期,线程每 1000ms 循环统计一次。
Car 类里,计算了小车方向随机值:type=(int)(((Math、random)*(newDate、getTime)*10)%4); 随机产生四个值 0,1,2,3,获取 Type+1、jpg 小车图片: Type=0,小车起点坐标(0,240),为西东方向,小车图片为 1、jpg; Type=1,小车起点坐标(1500,240),为东西方向,小车图片为 2、jpg; Type=2,小车起点坐标(235,0),为北南方向,小车图片为 3、jpg; Type=3,小车起点坐标(280,1500),为南北方向,小车图片为 4、jpg。
CarFactory 类里获得 Car 数组里随机产生得小车,并把产生小车值 返回 Car 类。
程序中不同得类实现不同得功能,每个功能又通过各自线程得控制,异步执行从而达到同步效果,最终完成交通灯模拟程序要求。
3、程序运行得时空效率分析 程序中定义图像应用到了双缓存,方便程序执行。同时程序中使用synchronizedList 得到得就是同步容器,使线程同步执行,节约运行时间,程序中设定当车辆运行超出范围时则移除该车,因此已经移除得车不会再继续占用空间。但就是程序中不足得就是,因为信号灯得变化间隔就是1s所以在每次隔10ms执行public void paint(Graphics g1)时,信号灯得交替时间还未到而被重画,这样会不同程度得浪费资源,不过这个程序就是小程序可能不会有大得影响,若就是扩大程序,则需进一步完善。
4、测试数据集 (1)默认设置信号灯持续时间:
图 3 运行结果 1 (2)重新设置信号灯持续时间:
图 4 运行结果 2 四、经验与体会。
通过学习了近一个学期得 JAVA 课后,设计完成了交通灯程序,通过这个程序,我对线程有了很深得认识,对于它就是如何实现以及两个或更多得线程共同使用时如何条用得,有了更进一步得了解。学习该语言期间,明显感到它与其她得高级语言不同,比起 C 或 C++更方便使用,或许我接触得时间还不长,使用得机会还不多,尤其就是大段程序设计。另一个则就是画图,由这个程序我已基本上掌握了画图得程序写法。不过对于此程序得有些地方我觉得有必要作些说明,这样能帮助更好得理解我得方法。
import java、awt、*;import java、awt、event、*; 这两行就是对于程序中要用到得抽象窗口工具包做个定义。因为 JAVA 提供得用于语言开发得类库,称为应用程序编程接口,分别放在不同得包中。前一句就是 AWT核心包,后一句就是提供事件类与监听器得包。
WindowListener,ponentListener,ItemListener 这一行就是对程序中用可能要用到得EVENT事件类总得声明一下,以后得程序里必须包含着各个事件类所相对应得接口。这些接口中包含所要执行得程序代码或就是调用得函数名,若就是无此接口任务时,可不写任何代码。
同时,通过进一步巩固、加深了我们所学专业课程得基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题得能力。全面考核我们所掌握得基本理论知识及其实际业务能力,从而达到提高学生素质得最终目得。利用所学知识,开发小型应用系统,掌握运用 JAVA 语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理得综合能力。对于给定得设计题目,如何进行分析,理清思路,并给出相应得数学模型。
熟练掌握 JAVA 语言得 GUI 设计、多线程技术,灵活运用各种类库。
五、源 程序
import java、awt、BorderLayout; import java、awt、Color; import java、awt、Dialog; import java、awt、Graphics; import java、awt、Image; import java、awt、Toolkit; import java、awt、event、ActionEvent;
import java、awt、event、ActionListener; import java、awt、event、WindowAdapter; import java、awt、event、WindowEvent; import java、awt、image、BufferStrategy; import java、util、ArrayList; import java、util、Collections; import java、util、Date; import java、util、List;
import javax、swing、JButton; import javax、swing、JFrame; import javax、swing、JLabel; import javax、swing、JPanel; import javax、swing、JTextField; public class MainFrame extends JFrame{
private JLabel redlight_label = new JLabel(" 红 灯 时 间 :
秒");
private JLabel greenlight_label = new JLabel(" 绿 灯 时 间 :
秒");
private JLabel yellowlight_label = new JLabel(" 黄 灯 时 间 :
秒");
private JTextField redlight_field = new JTextField;
private JTextField greenlight_field = new JTextField;
private JTextField yellowlight_field = new JTextField;
private JButton btn_set = new JButton("设置");
private Luche luche = new Luche;
public MainFrame{
setTitle("交通灯模拟程序");
setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);
setSize(600, 600);
setLayout(null);
redlight_label、setBounds(10, 10, 200, 25);
redlight_field、setBounds(70, 10, 40, 25);
greenlight_label、setBounds(150, 10, 200, 25);
greenlight_field、setBounds(210, 10, 40, 25);
yellowlight_label、setBounds(280, 10, 200, 25);
yellowlight_field、setBounds(340, 10, 40, 25);
add(yellowlight_field);
add(greenlight_field);
add(redlight_field);
add(greenlight_label);
add(yellowlight_label);
add(redlight_label);
btn_set、setBounds(400, 10, 80, 25);//设置窗口位置与大小,出示位置为(400,10)参数单位为像素
add(btn_set);
luche、setBounds(0, 50, 2000, 2000);
add(luche);
luche、lauch;
add(btn_set);
btn_set、addActionListener(new ActionListener{
//Override
public void actionPerformed(ActionEvent arg0) {
try {
int redTimes = Integer 、 parseInt(redlight_field 、getText);
int greenTimes = Integer、parseInt(greenlight_field、getText);
int yellowTimes = Integer、parseInt(yellowlight_field、
getText);
luche、setRedTimes(redTimes);
luche、setGreenTimes(greenTimes);
luche、setYellowTimes(yellowTimes);
} catch (NumberFormatException e) {
e、printStackTrace;//用来在屏幕上输出当前异常对象使用得堆栈得轨迹
}
}
});
setVisible(true);
}
public static void main(String[] args) {
new MainFrame;
} } class Luche extends JPanel {
private boolean redStatus = false, greenStatus = false, yellowStatus = false;
int j = 0;
private int redTimes = 8;
private int greenTimes = 10;
private int yellowTimes = 3;
private List<Car> cars = Collections 、 synchronizedList(new ArrayList<Car>); Luche {
setBackground(Color、GREEN);
}
public void update(Graphics g) //刷新控件
{
paint(g);
}
public void paint(Graphics g1) {
Image image = createImage(2000, 2000);
Graphics g = image、getGraphics;
Color c = g、getColor;
g、setColor(new Color(172,233,76));
g、fillRect(0, 0, 2000, 2000);
g、setColor(new Color(76,74,70));
g、fillRect(0, 180, 2000, 100);
g、fillRect(220, 0, 100, 1000);
g、setColor(Color、yellow);
g、drawLine(0, 230, 2000, 230);
g、setColor(Color、yellow);
g、drawLine(270, 0, 270, 1000);
for(int i = 0;i < cars、size;i ++ ){
Car car = (Car) cars、get(i);
g、drawImage(car、getIm,car、getX, car、getY, this);
}
if (redStatus == true) {
g、setColor(Color、RED);
g、fillOval(270, 165, 15, 15);
g、fillOval(255, 280, 15, 15);
g、drawString(redTimesj+"", 250, 178);
g、drawString(redTimesj+"", 270, 293);
g、setColor(Color、GREEN);
g、fillOval(320, 260, 15, 15);
g、fillOval(200, 185, 15, 15);
g、drawString(redTimesj+"", 320, 225);
g、drawString(redTimesj+"", 200, 245);
} else {
g、setColor(Color、BLACK);
g、fillOval(270, 165, 15, 15);
g、fillOval(255, 280, 15, 15);
g、fillOval(320, 260, 15, 15);
g、fillOval(200, 185, 15, 15);
}
if (yellowStatus == true) {
g、setColor(Color、YELLOW);
g、fillOval(285, 165, 15, 15);
g、fillOval(240, 280, 15, 15);
g、drawString(yellowTimesj+"", 250, 178);
g、drawString(yellowTimesj+"", 270, 293);
g、fillOval(320, 245, 15, 15);
g、fillOval(200, 200, 15, 15);
g、drawString(yellowTimesj+"", 320, 225);
g、drawString(yellowTimesj+"", 200, 245);
} else {
g、setColor(Color、BLACK);
g、fillOval(285, 165, 15, 15);
g、fillOval(240, 280, 15, 15);
g、fillOval(320, 245, 15, 15);
g、fillOval(200, 200, 15, 15);
}
if (greenStatus == true) {
g、setColor(Color、GREEN);
g、fillOval(300, 165, 15, 15);
g、fillOval(225, 280, 15, 15);
g、drawString(greenTimesj+"", 250, 178);
g、drawString(greenTimesj+"", 270, 293);
g、setColor(Color、RED);
g、fillOval(320, 230, 15, 15);
g、fillOval(200, 215, 15, 15);
g、drawString(greenTimesj+"", 320, 225);
g、drawString(greenTimesj+"", 200, 245);
} else {
g、setColor(Color、BLACK);
g、fillOval(300, 165, 15, 15);
g、fillOval(225, 280, 15, 15);
g、fillOval(320, 230, 15, 15);
g、fillOval(200, 215, 15, 15);
}
g、setColor(c);
g1、drawImage(image,0, 0, null);
try {
Thread、sleep(10);
} catch (InterruptedException e) {
}
repaint;
}
public boolean isRedStatus {
return redStatus;
}
public void setRedStatus(boolean redStatus) {
this、redStatus = redStatus;
}
public boolean isGreenStatus {
return greenStatus;
}
public void setGreenStatus(boolean greenStatus) {
this、greenStatus = greenStatus;
}
public boolean isYellowStatus {
return yellowStatus;
}
public void setYellowStatus(boolean yellowStatus) {
this、yellowStatus = yellowStatus;
}
public int getRedTimes {
return redTimes;
}
public void setRedTimes(int redTimes) {
this、redTimes = redTimes;
}
public int getGreenTimes {
return greenTimes;
}
public void setGreenTimes(int greenTimes) {
this、greenTimes = greenTimes;
}
public int getYellowTimes {
return yellowTimes;
}
public void setYellowTimes(int yellowTimes) {
this、yellowTimes = yellowTimes;
}
public List<Car> getCars {
return cars;
}
public void setCars(List<Car> cars) {
this、cars = cars;
}
public void lauch {
new Thread(new PaintThread)、start;
new Thread(new CarThread)、start;
new Thread(new CarRunThread)、start;
setVisible(true);
}
class CarThread implements Runnable{
//随机产生小车
Override
public void run {
while(true){
cars、add(CarFactory、getCar);
try {
Thread、sleep((long)(Math、random*1200));
} catch (InterruptedException e) {
e、printStackTrace;
}
}
}
}
class CarRunThread implements Runnable{
//控制小车得行驶
Override
public void run {
while(true){
for(int i = 0;i < cars、size;i ++ ){
Car car = (Car) cars、get(i);
if(car、getType == 0){
if(car、getX>2000){
cars、remove(car);
i;
continue;
}
if(((Luche、this、isGreenStatus || Luche、this、isYellowStatus)
&& Math 、 abs(car 、 getX180)<5 ) || hasObstructor(car,cars)){
continue;
}else{
car、setX(car、getX+5);
}
}else if(car、getType == 1){
if(car、getX<0){
cars、remove(car);
i;
continue;
}
if(((Luche、this、isGreenStatus|| Luche、this、isYellowStatus)
&& Math 、 abs(car 、 getX320)<5 ) || hasObstructor(car,cars)){
continue;
}else{
car、setX(car、getX5);
}
}else if(car、getType == 2){
if(car、getY>2000){
cars、remove(car);
i;
continue;
}
if(((Luche 、 this 、 isRedStatus || Luche 、 this 、isYellowStatus)
&& Math 、 abs(car 、 getY140)<5 ) || hasObstructor(car,cars)){
continue;
}else{
car、setY(car、getY+5);
}
}else if(car、getType == 3){
if(car、getY<0){
cars、remove(car);
i;
continue;
}
if(((Luche 、 this 、 isRedStatus || Luche 、 this 、isYellowStatus)
&& Math 、 abs(car 、 getY280)<5 )|| hasObstructor(car,cars)){
continue;
}else{
car、setY(car、getY5);
}
}
}
try {
Thread、sleep(10);
} catch (InterruptedException e) {
e、printStackTrace;
}
}
}
private boolean hasObstructor(Car car, List<Car> cars) {
if(car、getType==0){
for(int i = 0;i < cars、size;i ++ ){
Car car2 = (Car) cars、get(i);
int distance = (car2、getXcar、getX);
if(car2、getType==0 && distance < 46 && distance>0)
return true;
}
}
if(car、getType==1){
for(int i = 0;i < cars、size;i ++ ){
Car car2 = (Car) cars、get(i);
int distance = (car、getX
car2、getX);
if(car2、getType==1 && distance < 46 && distance>0)
return true;
}
}
if(car、getType==2){
for(int i = 0;i < cars、size;i ++ ){
Car car2 = (Car) cars、get(i);
int distance = (car2、getYcar、getY);
if(car2、getType==2 && distance < 46 && distance>0)
return true;
}
}
if(car、getType==3){
for(int i = 0;i < cars、size;i ++ ){
Car car2 = (Car) cars、get(i);
int distance = (car、getYcar2、getY);
if(car2、getType==3 && distance < 46 && distance>0)
return true;
}
}
return false;
}
}
public class PaintThread implements Runnable {
public void run {
for (int i = 0; i < redTimes+greenTimes+yellowTimes+yellowTimes; i++) {
if(i==0){
j = 0;
redStatus = true;
greenStatus = false;
yellowStatus = false;
}else if(i==redTimes){
j = 0;
redStatus = false;
greenStatus = false;
yellowStatus = true;
}else if(i==redTimes+yellowTimes){
j = 0;
redStatus = false;
greenStatus = true;
yellowStatus = false;
}else if(i==redTimes+greenTimes+yellowTimes){
j = 0;
redStatus = false;
greenStatus = false;
yellowStatus = true;
}
repaint;
j++;
if (i == redTimes+greenTimes+yellowTimes+yellowTimes1)
i = 1;
try {
Thread、sleep(1000);
} catch (InterruptedException e) {
e、printStackTrace;
}
}
}
} } class Car{
private Image Im;
private int x;
private int y;
private int type;//小车得行驶方向
public Car {
type = (int) (((Math、random)*(new Date、getTime)*10)%4);
Im = Toolkit、getDefaultToolkit、getImage((type + 1) + "、jpg");
if(type==0){
x = 0;
y = 240;
}else if(type==1){
x = 1500;
y = 200;
}else if(type==2){
x = 235;
y = 0;
}else if(type==3){
x = 280;
y = 1500;
}
}
public Image getIm {
return Im;
}
public void setIm(Image im) {
Im = im;
}
public int getX {
return x;
}
public void setX(int x) {
this、x = x;
}
public int getY {
return y;
}
public void setY(int y) {
this、y = y;
}
public int getType {
return type;
}
public void setType(int type) {
this、type = type;
} } class CarFactory{
public static Car getCar{
return new Car;
}}
上一篇:【实用】环保调查报告
下一篇:开题报告,(11)
最新推荐New Ranking
近年来,随着数字经济的快速发展,传统的就业制度、就业方式、就业理念快速变化,出现了大量依托互联...
2关于对“职教高考”背景下中职生心理现状调查报告“职教高考”制度出台,有力促进了中职学生升学途径和方式的规范化发展。升学制度的转轨,对中职学前...
3关于城市供热问题调查与思考城市供热工作涉及千家万户,关乎百姓冷暖和社会稳定,是一项重要的民生工作,也是领导关切、社会关注...
4市退役军人现状及需求情况调查报告为深入学习贯彻党的二十大精神,全面贯彻落实习近平总书记关于退役军人工作重要论述,充分了解*退役军...
5市法治建设工作自查报告今年以来,中心坚持以习近平新时代中国特色社会主义思想为指导,深入学习贯彻习近平法治思想及党中央...
6报告中初心密码10月16日,中国共产党第二十次全国代表大会在北京开幕,习近平代表第十九届中央委员会向党的二十大作...
7区局选人用人报告2022年,区**局党组始终坚持党管人才原则,高举中国特色社会主义伟大旗帜,以习近平新时代中国特色社...
8关于《乡村振兴促进法》执行情况调查报告《乡村振兴促进法》实施一年来,**县政府及相关部门认真执行本法各项规定,按照“产业兴旺、生态宜居...
9副市长在X市人民代表大会常务委员会会议上报告(人民政府关于科技创新工作情况报告)主任、各位副主任、秘书长、各位委员:受市人民政府委托,现将我市科技创新工作情况及下半年重点工作...
10关于新型工业化工作情况报告今年以来,我们深入学习贯彻习近平总书记视察贵市重要讲话精神和省第十三次党代会、市十二届三次全会...