如何才能提供自己的编程水平,就要千锤百炼。
main.cpp
#include "labyrith.h"
// 主函数
int main()
{
FrameWindow frame; // 建立图形界面
frame.Run(); // 运行控制函数
while(1) // 主循环
{
frame.Run(); // 运行控制
}
getch(); // 当有按键的时候关闭图形
closegraph();
return 0;
}
labyrinth.cpp
#include "labyrith.h"
int Wall[22][22]; // 墙壁
int entranceX; // 入口
int entranceY;
int exitX; // 出口
int exitY;
// 默认构造函数
FrameWindow::FrameWindow()
{
initgraph(960, 660); // 建立图形界面
setbkcolor(LIGHTGREEN); // 设置背景颜色为亮绿色
direct = 0; // 设置 direct 的初值为 0
control = 0; // 默认控制权为 0
loadimage(&img, "res\\bk.jpg", 29, 29); // 加载图片
}
// 运行控制
void FrameWindow::Run()
{
cleardevice(); // 清屏
NewBackground(); // 绘制新背景图
DrawSome(); // 绘制些神马
control = 0; // 首先将函数对程序程序的控制权置 0
direct = 0; // 设置 direct 的初值为 0
// 主循环
while(1)
{
if(kbhit()) // 检测按键
{
direct = getch(); // 从按键获取输入
mciSendString("play res\\key.wav", NULL, 0, NULL); // 按键声
if( direct == 115 && control == 0) // s 的键值为 115
{
StartDrawLabyrith(); // 开始绘制迷宫
}
if(direct == 101 && control == 2) // e 的键值为 101
{
SetLabyrith(); // 设置迷宫的入口和出口
}
if(direct == 100 && control == 3) // d 的键值为 100
{
control = -1; // 将 control 设置为 -1 的目的是
// 让程序从 Demo() 回到 Run() 时只响应刷新操作
Demo(); // 寻找路径并演示
}
if(direct == 63 && (control == 0 || control == -1)) // 按 F5 刷新
{
break;
}
}
else
{
Sleep(10);
}
}
}
// 绘制新背景
void FrameWindow::NewBackground()
{
float H, S, L; // 定义 HSL 颜色模型的 3 个变量
H = 110; // 色相
S = 1; // 饱和度
L = 0.4522f; // 亮度
for(int y = 0; y != 660; ++y) // 绘制迷宫背景颜色
{
L += 0.000125f;
S -= 0.00125f;
setcolor(HSLtoRGB(H, S, L));
line(0, y, 660, y);
}
H = 50; // 色相
S = -3.2555f; // 饱和度
L = 0.525617f; // 亮度
for(int y = 0; y != 660; ++y) // 绘制提示信息部分背景
{
L += 0.000000085f;
S -= 0.0015f;
setcolor(HSLtoRGB(H, S, L));
line(660, y, 960, y);
}
}
// 绘制些神马
void FrameWindow::DrawSome()
{
setcolor(LIGHTRED);
for(int i = 0; i < 22; ++i)
{
// 外围墙壁在 Wall 数组中的位置置 1
Wall[0][i] = 1;
Wall[i][0] = 1;
Wall[21][i]

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



