交通灯模拟报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥学院

计算机科学与技术系

课程设计报告

2010~2011学年第一学期

课程JA V A语言程序设计

课程设计名称交通灯模拟程序

专业班级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车道都会被阻断。所以在设计红绿灯时,可以两两组合,共有两组(0-1、2-3);而各车道中车辆行驶时间按照交通灯设计时间来决定,红绿灯时间可以自行设定。

图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 cars = Collections.synchronizedList(new ArrayList()) (3)每条路线上当车运行到十字路口时都会判断,都会检查对应路口的信号灯颜色如何,控制本路线的灯若为黄灯或是红灯则车辆就会停下来,若是车辆行驶停在十字路口,则其后的车经过判断必须停在后面,等待绿灯亮时继续行驶。判断当前行驶的车前方是否有车辆停下:private boolean hasObstructor(Car car, List 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;}小车方向由南向北

相关文档
最新文档