2023-08-29 613 发布于湖南
版权
举报
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介: 交通信号灯十字路口通行原理图。
交通信号灯十字路口通行原理图。
实际上归类为四大类:
南北双向直行 东西双向直行 一对黑色粗线的左转 一对红色粗线的左转。
状态逻辑图如下图所示:
进入120s的整个循环中,第一部分南北直行绿灯在25s后变为黄灯持续5s,然后为红灯;第二部分南北左转灯对应变为绿灯并进行倒计时,然后黄灯,红灯;第三部分就是东西直行的绿灯黄灯红灯,第四部分是东西左转的绿黄红切换。
南北向、东西向行人在对应的时间切换绿灯和红灯。 停止按钮,停止计数器的计时。 思路:1秒的定时器计算时间,到了对应的时间阶段,触发界面的状态变化和倒计时。详情见代码。控件和命名图片中标出了同系列的第一个,其余的根据方向类推命名。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; namespace TrafficLight { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int time = 0;//计时器 const int MAX_LOOP_TIME = 120;//120s时间为一次循环 //以下时间段分别为:南北直行绿灯25,南北直行黄灯5,南北左转绿灯25,南北左转黄灯5,东西直行绿灯25,东西直行黄灯5,东西左转绿灯25,东西左转黄灯5 int[] PassTime={25, 30, 55, 60, 85, 90, 115, 120}; //事件委托的方式触发 public delegate void delegateTrafficLight(int tm); public event delegateTrafficLight EventTrafficLight; private void btnStart_Click(object sender, EventArgs e) { timer1.Start(); //Thread threadLightChg = new Thread(LightChange); //threadLightChg.Start(); } private void btnStop_Click(object sender, EventArgs e) { timer1.Stop(); } private void timer1_Tick(object sender, EventArgs e) { //计时开始,进入循环,120s为一次循环 if (time < MAX_LOOP_TIME - 1) //119秒后置为0秒 { time += 1; if (EventTrafficLight != null) { EventTrafficLight(time); } } else { time = 0; if (EventTrafficLight != null) { EventTrafficLight(time); } txtStoN.Clear(); txtNtoS.Clear(); txtWtoE.Clear(); txtEtoW.Clear(); } } private void Form1_Load(object sender, EventArgs e) { this.EventTrafficLight += new delegateTrafficLight(LightChange); } public void LightChange(int time) { if (time < PassTime[0]) { lbStoNStraight.BackColor = Color.Green; lbStoNLeft.BackColor = Color.Red; lbNtoSStraight.BackColor = Color.Green; lbNtoSLeft.BackColor = Color.Red; lbWtoEStraight.BackColor = Color.Red; lbWtoELeft.BackColor = Color.Red; lbEtoWStraight.BackColor = Color.Red; lbEtoWLeft.BackColor = Color.Red; lbPeopleNS1.BackColor = Color.Green; lbPeopleNS2.BackColor = Color.Green; lbPeopleNS3.BackColor = Color.Green; lbPeopleNS4.BackColor = Color.Green; lbPeopleWE1.BackColor = Color.Red; lbPeopleWE2.BackColor = Color.Red; lbPeopleWE3.BackColor = Color.Red; lbPeopleWE4.BackColor = Color.Red; //倒计时 txtStoN.Text = (PassTime[0] - time).ToString(); txtNtoS.Text = (PassTime[0] - time).ToString(); } else if (time >= PassTime[0] && time < PassTime[1]) { lbStoNStraight.BackColor = Color.Yellow; lbStoNLeft.BackColor = Color.Red; lbNtoSStraight.BackColor = Color.Yellow; lbNtoSLeft.BackColor = Color.Red; lbWtoEStraight.BackColor = Color.Red; lbWtoELeft.BackColor = Color.Red; lbEtoWStraight.BackColor = Color.Red; lbEtoWLeft.BackColor = Color.Red; lbPeopleNS1.BackColor = Color.Green; lbPeopleNS2.BackColor = Color.Green; lbPeopleNS3.BackColor = Color.Green; lbPeopleNS4.BackColor = Color.Green; lbPeopleWE1.BackColor = Color.Red; lbPeopleWE2.BackColor = Color.Red; lbPeopleWE3.BackColor = Color.Red; lbPeopleWE4.BackColor = Color.Red; //倒计时 txtStoN.Text = (PassTime[1] - time - 1).ToString(); txtNtoS.Text = (PassTime[1] - time - 1).ToString(); } else if (time >= PassTime[1] && time < PassTime[2]) { lbStoNStraight.BackColor = Color.Red; lbStoNLeft.BackColor = Color.Green; lbNtoSStraight.BackColor = Color.Red; lbNtoSLeft.BackColor = Color.Green; lbWtoEStraight.BackColor = Color.Red; lbWtoELeft.BackColor = Color.Red; lbEtoWStraight.BackColor = Color.Red; lbEtoWLeft.BackColor = Color.Red; lbPeopleNS1.BackColor = Color.Red; lbPeopleNS2.BackColor = Color.Red; lbPeopleNS3.BackColor = Color.Red; lbPeopleNS4.BackColor = Color.Red; lbPeopleWE1.BackColor = Color.Red; lbPeopleWE2.BackColor = Color.Red; lbPeopleWE3.BackColor = Color.Red; lbPeopleWE4.BackColor = Color.Red; //倒计时 txtStoN.Text = (PassTime[2] - time - 1).ToString(); txtNtoS.Text = (PassTime[2] - time - 1).ToString(); } else if (time >= PassTime[2] && time < PassTime[3]) { lbStoNStraight.BackColor = Color.Red; lbStoNLeft.BackColor = Color.Yellow; lbNtoSStraight.BackColor = Color.Red; lbNtoSLeft.BackColor = Color.Yellow; lbWtoEStraight.BackColor = Color.Red; lbWtoELeft.BackColor = Color.Red; lbEtoWStraight.BackColor = Color.Red; lbEtoWLeft.BackColor = Color.Red; lbPeopleNS1.BackColor = Color.Red; lbPeopleNS2.BackColor = Color.Red; lbPeopleNS3.BackColor = Color.Red; lbPeopleNS4.BackColor = Color.Red; lbPeopleWE1.BackColor = Color.Red; lbPeopleWE2.BackColor = Color.Red; lbPeopleWE3.BackColor = Color.Red; lbPeopleWE4.BackColor = Color.Red; //倒计时 txtStoN.Text = (PassTime[3] - time - 1).ToString(); txtNtoS.Text = (PassTime[3] - time - 1).ToString(); } else if (time >= PassTime[3] && time < PassTime[4]) { lbStoNStraight.BackColor = Color.Red; lbStoNLeft.BackColor = Color.Red; lbNtoSStraight.BackColor = Color.Red; lbNtoSLeft.BackColor = Color.Red; lbWtoEStraight.BackColor = Color.Green; lbWtoELeft.BackColor = Color.Red; lbEtoWStraight.BackColor = Color.Green; lbEtoWLeft.BackColor = Color.Red; lbPeopleNS1.BackColor = Color.Red; lbPeopleNS2.BackColor = Color.Red; lbPeopleNS3.BackColor = Color.Red; lbPeopleNS4.BackColor = Color.Red; lbPeopleWE1.BackColor = Color.Green; lbPeopleWE2.BackColor = Color.Green; lbPeopleWE3.BackColor = Color.Green; lbPeopleWE4.BackColor = Color.Green; //倒计时 txtWtoE.Text = (PassTime[4] - time - 1).ToString(); txtEtoW.Text = (PassTime[4] - time - 1).ToString(); } else if (time >= PassTime[4] && time < PassTime[5]) { lbStoNStraight.BackColor = Color.Red; lbStoNLeft.BackColor = Color.Red; lbNtoSStraight.BackColor = Color.Red; lbNtoSLeft.BackColor = Color.Red; lbWtoEStraight.BackColor = Color.Yellow; lbWtoELeft.BackColor = Color.Red; lbEtoWStraight.BackColor = Color.Yellow; lbEtoWLeft.BackColor = Color.Red; lbPeopleNS1.BackColor = Color.Red; lbPeopleNS2.BackColor = Color.Red; lbPeopleNS3.BackColor = Color.Red; lbPeopleNS4.BackColor = Color.Red; lbPeopleWE1.BackColor = Color.Green; lbPeopleWE2.BackColor = Color.Green; lbPeopleWE3.BackColor = Color.Green; lbPeopleWE4.BackColor = Color.Green; //倒计时 txtWtoE.Text = (PassTime[5] - time - 1).ToString(); txtEtoW.Text = (PassTime[5] - time - 1).ToString(); } else if (time >= PassTime[5] && time < PassTime[6]) { lbStoNStraight.BackColor = Color.Red; lbStoNLeft.BackColor = Color.Red; lbNtoSStraight.BackColor = Color.Red; lbNtoSLeft.BackColor = Color.Red; lbWtoEStraight.BackColor = Color.Red; lbWtoELeft.BackColor = Color.Green; lbEtoWStraight.BackColor = Color.Red; lbEtoWLeft.BackColor = Color.Green; lbPeopleNS1.BackColor = Color.Red; lbPeopleNS2.BackColor = Color.Red; lbPeopleNS3.BackColor = Color.Red; lbPeopleNS4.BackColor = Color.Red; lbPeopleWE1.BackColor = Color.Red; lbPeopleWE2.BackColor = Color.Red; lbPeopleWE3.BackColor = Color.Red; lbPeopleWE4.BackColor = Color.Red; //倒计时 txtWtoE.Text = (PassTime[6] - time - 1).ToString(); txtEtoW.Text = (PassTime[6] - time - 1).ToString(); } else if (time >= PassTime[6]) { lbStoNStraight.BackColor = Color.Red; lbStoNLeft.BackColor = Color.Red; lbNtoSStraight.BackColor = Color.Red; lbNtoSLeft.BackColor = Color.Red; lbWtoEStraight.BackColor = Color.Red; lbWtoELeft.BackColor = Color.Yellow; lbEtoWStraight.BackColor = Color.Red; lbEtoWLeft.BackColor = Color.Yellow; lbPeopleNS1.BackColor = Color.Red; lbPeopleNS2.BackColor = Color.Red; lbPeopleNS3.BackColor = Color.Red; lbPeopleNS4.BackColor = Color.Red; lbPeopleWE1.BackColor = Color.Red; lbPeopleWE2.BackColor = Color.Red; lbPeopleWE3.BackColor = Color.Red; lbPeopleWE4.BackColor = Color.Red; //倒计时 txtWtoE.Text = (MAX_LOOP_TIME - time - 1).ToString(); txtEtoW.Text = (MAX_LOOP_TIME - time - 1).ToString(); } } } }
AI 代码解读
重在理解交通信号灯的原理。
代码重点:
使用了定时器 使用了委托事件的触发方式 对常量和公共数组的应用 变量命名规范、代码整洁文章标签:
目录
0
0
13
相关文章
|
5月前
|
2026,AI Agent指挥官的崛起与代码的黄昏
2026年,AI智能体泛滥引发系统性“熵增”危机:死锁、幻觉级联、资源踩踏频发。本文基于“智能体来了(西南总部)”研判与金加德讲师“多智能体治理”理论,提出技术人新定位——AI Agent指挥官(聚焦目标拆解与工作流设计)与AI调度官(专注运行治理与安全熔断),揭示Agentic Workflow时代的核心护城河:业务洞察力、逻辑编排力与AgentOps工程能力。(239字)
377 0 0
|
《打破知识壁垒:解锁自然语言处理模型跨领域知识图谱关联与推理密码》
在人工智能快速发展的背景下,自然语言处理(NLP)技术成为各行业智能化变革的关键。知识图谱作为结构化的语义知识库,通过“实体-关系-实体”三元组描绘现实世界的概念及其关系,为NLP模型提供背景知识和推理依据。然而,随着多领域知识的爆发式增长,如何实现不同领域知识图谱的有效关联与推理成为亟待解决的问题。本文探讨了理解领域特性、实体对齐、关系映射与融合及深度学习推理模型构建等关键步骤,旨在打破领域间知识壁垒,提升NLP技术的智能化水平,推动其在智能问答、推荐、决策辅助等领域的广泛应用。
614 1 1
Vue3统计数值(Statistic)
这是一个基于 Vue3 的统计数值组件 `Statistic`,用于展示数据指标。它支持设置标题、数值内容、精度、前缀、后缀及千分位标识符等,并可通过插槽和自定义函数实现更丰富的展示效果。
654 2 2
目录
相关知识
用C WinForm打造浪漫惊喜:超级简单哄女朋友开心的小程序
交通信号灯范例6篇
Winform(C#) 国内开源美化控件主题库2:花木兰控件库
交通信号灯厂家
交通信号灯的分类和含义
圆形交通信号灯怎么看
云南省交通信号灯厂家
交通信号灯包括哪几类
交通信号灯图解 红绿灯怎么看
交通信号灯黄色代表什么
原文链接: 30【WinForm项目】C#模拟交通信号灯 https://m.huajiangbk.com/newsview2606263.html
| 上一篇: 南昌县鲁班路与杜鹃花路交叉口信号... | 下一篇: 51单片机实现交通信号灯控制系统 |