📅  最后修改于: 2023-12-03 15:22:26.661000             🧑  作者: Mango
本程序使用 C++ 和计算机图形学库绘制了一个简单的交通灯模拟,可以用来学习和了解计算机图形学的基本概念和应用。
以下为程序运行后的界面截图:
灯色和状态会随机变化,如下图所示:
本程序使用 C++ 编写,需要使用计算机图形学库。其中,本程序使用了 EasyX 图形库和 Windows.h 头文件中的 Sleep() 函数。
首先需在 Visual Studio 或其他 C++ 开发环境中安装 EasyX 图形库。然后,按照以下步骤进行程序编写和调试:
#include <graphics.h>
#include <Windows.h>
其中,graphics.h 是 EasyX 图形库的头文件,Windows.h 包含 Sleep() 函数的定义。
const int LIGHT_X = 300; // 灯的位置 x 坐标
const int LIGHT_Y = 200; // 灯的位置 y 坐标
const int LIGHT_R = 50; // 灯的半径
const int POLE_W = 10; // 灯杆宽度
const int POLE_H = 300; // 灯杆高度
LIGHT_X 和 LIGHT_Y 是交通灯的位置参数,LIGHT_R 是交通灯灯罩的半径,POLE_W 和 POLE_H 是灯杆的宽度和高度。
void drawTrafficLight(int r, int g, int y)
{
// 绘制灯杆
setfillcolor(DARKGRAY);
bar(LIGHT_X - POLE_W / 2, LIGHT_Y + LIGHT_R, LIGHT_X + POLE_W / 2, LIGHT_Y + LIGHT_R + POLE_H);
// 绘制红色灯罩
setfillcolor(r ? RED : DARKGRAY);
fillcircle(LIGHT_X, LIGHT_Y, LIGHT_R);
// 绘制黄色灯罩
setfillcolor(y ? YELLOW : DARKGRAY);
fillcircle(LIGHT_X, LIGHT_Y + LIGHT_R * 2, LIGHT_R);
// 绘制绿色灯罩
setfillcolor(g ? GREEN : DARKGRAY);
fillcircle(LIGHT_X, LIGHT_Y + LIGHT_R * 4, LIGHT_R);
}
此函数接受三个参数,即三个灯罩颜色的标志位 r、g、y(0 表示黑灯,1 表示彩灯)。用 setfillcolor() 函数设置颜色后,使用 fillcircle() 函数绘制圆形灯罩。
void lightStatus(int r, int g, int y, int t)
{
// 交通灯灯状态的控制
drawTrafficLight(r, g, y);
Sleep(t);
cleardevice();
}
此函数接受四个参数,即三个灯罩颜色的标志位 r、g、y 和灯亮的时间 t(单位为毫秒)。
使用 drawTrafficLight() 函数绘制交通灯,然后使用 Sleep() 函数暂停程序执行给定的时间长度,最后使用 cleardevice() 函数清除原有的绘图内容。
void lightBlink(int r, int g, int y, int t, int n)
{
// 交通灯灯状态的闪烁
for (int i = 0; i < n; i++) {
drawTrafficLight(r, g, y);
Sleep(t);
cleardevice();
drawTrafficLight(0, 0, 0);
Sleep(t);
cleardevice();
}
}
此函数接受五个参数,即三个灯罩颜色的标志位 r、g、y,灯亮的时间 t 和闪烁的次数 n。
使用 drawTrafficLight() 函数绘制交通灯,然后使用 Sleep() 函数暂停程序执行给定的时间长度,使用 cleardevice() 函数清除原有的绘图内容,并使用 drawTrafficLight(0,0,0) 函数绘制黑灯来表示交通灯灭的状态。
int main()
{
// 初始化 EasyX 图形窗口
initgraph(640, 480);
// 绘制交通灯
lightStatus(1, 0, 0, 2000); // 亮红灯
lightStatus(0, 0, 1, 1000); // 亮黄灯
lightStatus(0, 1, 0, 2000); // 亮绿灯
lightBlink(1, 0, 0, 500, 10); // 闪烁红灯10次
lightBlink(0, 1, 0, 500, 10); // 闪烁绿灯10次
// 关闭 EasyX 图形窗口
closegraph();
return 0;
}
主程序中,使用 initgraph() 函数初始化 EasyX 图形窗口,然后按照规定顺序调用 lightStatus() 和 lightBlink() 函数来绘制交通灯的亮灯和闪烁效果。
最后,使用 closegraph() 函数关闭 EasyX 图形窗口,并返回程序运行结果。
本程序通过对计算机图形学库的基本使用,实现了交通灯模拟的基本功能。如果您对计算机图形学和 C++ 编程感兴趣,可以结合本程序源码进行学习和实践。