C++程序 使用计算机图形学绘制交通灯模拟
在计算机中,可以使用graphics.h直接提供不同坐标的绘图函数,例如圆形、矩形等。通过使用这些形状,可以绘制不同的对象。本文重点介绍如何在Turbo C++中制作交通灯模拟。
使用的函数:
- delay(n) : 它被用来在 N 毫秒内保持相同的屏幕状态。由于程序执行速度过快,因此使用延迟函数来观察程序。
- setcolor(n) : 此函数用于设置光标的颜色。这里的 N 是预定义于graphics.h头文件中的颜色。
- settextstyle() / settextjustify() : 此函数用于文本指针的样式设置。
- rectangle(x1, y1, x2, y2) : 此函数用于绘制一个矩形,其中x1,y1和x2,y2是直线的坐标。
- circle(x, y, r) : 这是一个圆形的表示,其中x,y是圆的中心坐标,r是圆的半径。
方法:
- 首先,使用函数 initgraph() 初始化图形模式。
- 使用rectangle()函数创建矩形,并使用 setcolor() 函数填充两条线之间的中间部分。
- 使用setcolor()、floodfill()和setfillstyle()等函数绘制3个圆,并根据需要对它们进行颜色/样式处理。
- 重复上述过程,直到交通信号灯完成。
- 在所需位置使用 delay() 函数来保持屏幕。
下面是上述方法的程序:
// C++程序,用于上述方法
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <iostream.h>
#include <stdlib.h>
// 驱动程序代码
void main()
{
clrscr();
int gd = DETECT, gm, midx, midy;
// 传递三个参数给initgraph函数来初始化图形模式
initgraph(&gd, &gm, "C:\\TC\\BGI");
midx = getmaxx() / 2;
midy = getmaxy() / 2;
// 将介绍文本的颜色设置为青色
setcolor(CYAN);
// 在下面对文本进行样式设置
settextstyle(TRIPLEX_FONT, HORIZ_DIR, 4);
settextjustify(CENTER_TEXT, CENTER_TEXT);
outtextxy(midx, midy - 10, "交通信号灯模拟");
outtextxy(midx, midy + 10, "按任意键开始");
getch();
cleardevice();
setcolor(WHITE);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
// 矩形线
rectangle(midx - 30, midy - 80, midx + 30, midy + 80);
// 红灯圆形
circle(midx, midy - 50, 22);
setfillstyle(SOLID_FILL, RED);
floodfill(midx, midy - 50, 22);
setcolor(BLUE);
// 红光内部文本
outtextxy(midx, midy - 50, "停止");
// 2秒的延迟
delay(2000);
graphdefaults();
cleardevice();
setcolor(WHITE);
// 为交通信号灯绘制矩形线
rectangle(midx - 30, midy - 80,
midx + 30, midy + 80);
// 绘制黄色光圆形
circle(midx, midy - 50, 22);
setfillstyle(SOLID_FILL, YELLOW);
floodfill(midx, midy, WHITE);
setcolor(BLUE);
// 将内部文本设为就绪
outtextxy(midx - 18, midy - 3, "就绪");
delay(2000);
cleardevice();
setcolor(WHITE);
// 为交通信号灯绘制矩形线
rectangle(midx - 30, midy - 80,
midx + 30, midy + 80);
// 绿灯圆形
circle(midx, midy + 50, 22);
setfillstyle(SOLID_FILL, GREEN);
floodfill(midx, midy + 50, WHITE);
setcolor(BLUE);
// 将内部文本设为前进
outtextxy(midx - 7, midy + 48, "前进");
setcolor(RED);
settextstyle(TRIPLEX_FONT,
HORIZ_DIR, 4);
outtextxy(midx - 150, midy + 100,
"Brrrmmm");
getch();
}