交通灯模拟报告讲解

上传人:最**** 文档编号:114792187 上传时间:2019-11-12 格式:DOC 页数:27 大小:192KB
返回 下载 相关 举报
交通灯模拟报告讲解_第1页
第1页 / 共27页
交通灯模拟报告讲解_第2页
第2页 / 共27页
交通灯模拟报告讲解_第3页
第3页 / 共27页
交通灯模拟报告讲解_第4页
第4页 / 共27页
交通灯模拟报告讲解_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《交通灯模拟报告讲解》由会员分享,可在线阅读,更多相关《交通灯模拟报告讲解(27页珍藏版)》请在金锄头文库上搜索。

1、合肥学院计算机科学与技术系课程设计报告20102011学年第一学期课程JAVA语言程序设计课程设计名称交通灯模拟程序专业班级08网络工程班姓名王啸指导教师金莹 郭昌建2011年9月一、 需求分析随着城市汽车数量越来越多,城市的交通拥挤问题正逐渐引起人们的注意。交通灯是交管部分管理城市交通的重要工具。目前绝大部分交通灯其时间都是设定好的,不管是车流高峰还是低谷,红绿灯的时间都固定不变;还有一些交通灯能根据简单划分的时间段来调整时间,但控制起来都不是很灵活,这使得城市车流的调节不能达到最优。本文所述设计正是针对这一弊端进行了改进,根据实时车流量对各路口的绿灯时间进行动态调节,大大加强了其灵活性和实

2、时性。二、设计1.设计思想根据设计要求首先用JAVA语言的GUI画出十字路口和交通灯设计程序界面,画出十字路口和交通灯。可以手工设置红、绿等的时间间隔,程序按设定值自动变换每个路口的交通灯颜色。异步随机生成按照各个路线行驶的车辆: 由南向北的直行车辆 由北向南的直行车辆 由东向西的直行车辆 由西向东的直行车辆信号灯考录黄灯、红灯和绿灯,具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻,南北向车辆与东西向车辆交替放行。随机产生一些车辆,这些车辆遵守红灯停、绿灯行的交通规则。生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。2.功能设计 程序主要实现了以下三大功能

3、:(1)设计程序界面,画出十字路口和交通灯。这一功能主要由Java图形用户界面实现,画出十字路口和东西南北四个方向的的双向车道,交叉路口各个方向的交通灯。(2)可以手工设置红、绿灯的时间间隔,程序按设置值自动变换每个路口交通灯的颜色。程序界面设有三个文本框,分别可供用户输入红灯时间,绿灯时间,黄灯时间,填完各项数据之后,按下“设置”按钮,程序将根据用户填写数据调整红绿亮灯时间,在用户没有填入符合要求的数据或者没有数据填入时,程序默认的红灯亮灯时间为8秒,绿灯为10秒,黄灯为3秒。南北方向红灯亮时,东西方向绿灯亮,南北方向绿灯亮时,东西方向红灯亮,红绿灯亮灯时间一致。四个方向的黄灯同时亮。(3)

4、随机产生一些车辆,这些车辆遵守红灯停、绿灯行的交通规则随机产生小车,小车方向随机,通过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);而各车道中车辆行驶时间按照交通灯设计时间来决定,红绿灯时间可以自行设

5、定。图1 十字路口交通图随意产生车辆是由设定存放车辆的list中 (list是有序的collection使用此接口能够精确的控制每个车辆插入的位置),还使用了可实现可变大小的ArrayList数组(每个ArrayList实例都有一个容量Capacity,用于存放数组的大小,这个容量可以随着添加新车辆而自动增加)。整个程序中用到多个线程,其中有随机产生车辆、小车行驶方向、控制小车的行驶等,通过线程的同步实现交通控制。3.详细设计 首先在面板中画固定大小的画布Image image = createImage(2000, 2000); Graphics g=image.getGraphics();

6、,然后在画布上画出路线和红绿灯,并且把画布画在面板中。 程序中主要设计流程: 图2 程序流程图 以下是程序中主要设计对象:(1)每条路线上都会出现多辆车,路线上要随机增加新的车,在相应的灯绿期间车辆各行其道。若是车运行出面板则会移除该车:if(car.getType() = 0)/由西向东的车辆if(car.getX()2000)cars.remove(car);i-;continue;其他方向的车辆也会按此方式移除。(2)每条路线上随机增加新的车辆,增加到一个集合list中保存private List cars = Collections.synchronizedList(new Array

7、List()(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.

8、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)设计交通灯:每个交通灯都维护一个状态:变红、变绿或是变黄,每个交

9、通灯要有变亮和变黑的方法,并且能返回自己的亮黑状态。在编程处理时,只要从这两组中各取出两个灯,对这4个灯两两依次轮询变亮,与这4个灯方向对应的灯则随之一同变化,因此交通灯类中要有一个变量来记住自己相反方向的灯,在一个交通灯对象的变亮和变黑方法中,将对应方向的灯也变亮和变黑。每个灯变黑时,都伴随者下一个灯的变亮。信号灯运行周期:public class PaintThread implements Runnable public void run() for (int i = 0; i redTimes+greenTimes+yellowTimes+yellowTimes; i+) if(i=0

10、)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 =

11、 0;redStatus = false;greenStatus = false;yellowStatus = true;/黄灯亮repaint();j+;if (i = redTimes+greenTimes+yellowTimes+yellowTimes-1)i = -1;try Thread.sleep(1000); catch (InterruptedException e) e.printStackTrace();三. 调试及测试1、调试过程中遇到的主要问题及解决方法 在调试过程中主要是控制小车行驶比较难以实现,起初当所有面板中静态的图片处理完成后,无法将下载的小车图片加入面板后进行

12、运动操作,主要问题是开始把小车运动想的太简单了以为完成完成下列操作即可:(1)创建Image类的对象数组car,用来缓存要演示的小车图片,(2)利用getDocumentBase()函数方法获取图片信息,(3)再使用Thread.sleep()方法,但是当运行程序时会报错,显示找不到getDocumentBase(),原因是所做的程序是Application程序,不能使用函数getDocumentBase(),而使用 Im = Toolkit.getDefaultToolkit().getImage(type + 1) + .jpg),才可完成获取图片信息的功能。2、对设计和编码的回顾讨论和分

13、析该程序的设计主要用到以下类库: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.WindowEven

14、t;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。创建数组c

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号