交通灯模拟报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
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;}小车方向由南向北