c++编程迷宫小游戏

如何才能提供自己的编程水平,就要千锤百炼。

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]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大犇犇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值