@Lilacy
2015-09-24T12:12:12.000000Z
字数 1555
阅读 1108
游戏背景:
炮聪和他女朋友在野外露营,天快黑了,他们迷失在一片森林里,由于一到晚上森林中比较危险,所以他着急着在天黑前走出这片迷宫,因为天火来袭,加上连日大雨,地面凹凸不平,而天很黑了,炮聪拥有的照明工具只有手电,你能帮助他和女朋友迅速走出森林到达旅馆吗?
游戏规则:
用方向键(W/S/A/D)移动,鼠标控制手电照射方向,1分钟后手电会没电。在规定时间(2分钟内)内走出迷宫即为胜利。胜利有小奖品哦。
#include <easyX.h>//最核心一个库
//小许强力推荐,[http://www.easyx.cn/help/?GetImageBuffer][1]
// 初始化
void Welcome(); // 绘制游戏界面
void ReadyGo(); // 准备开始游戏
void InitGame();// 初始化游戏数据
// 设置游戏者位置
g_ptPlayer.x = g_utPlayer.x * UNIT + UNIT / 2 + g_ptOffset.x;
g_ptPlayer.y = g_utPlayer.y * UNIT + UNIT / 2 + g_ptOffset.y;
// 地图生成
void MakeMaze(int width, int height);// 初始化
void TravelMaze(int x, int y, BYTE** aryMap);// 遍历 (x, y) 四周
void DrawWall(int x, int y, bool left, bool top, bool right, bool bottom);// 画一个障碍物
// 处理用户控制
int GetCmd();// 获取用户输入的命令
void OnUp();// 向上移动
void OnLeft();// 向左移动
void OnRight(); // 向右移动
void OnDown();// 向下移动
bool CheckWin();// 检查是否到出口
//最有用的一个函数
Paint()
// 计算视野角度
double dx, dy, a;
dx = g_ptMouse.x - g_ptPlayer.x;
dy = g_ptMouse.y - g_ptPlayer.y;
if (dx == 0 && dy == 0)
a = 0;
else if (dx != 0 && dy != 0)
a = atan(dy / dx);
else if (dx == 0)
a = (dy > 0) ? PI / 2 : PI * 3 / 2;
else
a = 0;
if (dx < 0) a += PI;
if (a < 0) a += PI * 2;
// 绘制灯光
Lighting(g_ptPlayer.x, g_ptPlayer.y, a);
int i; // 定义循环变量
int x, y; // 定义临时坐标
double a; // 定义临时角度
// 计算灯光照亮的角度区域
double a1 = _a - LIGHT_A / 2;
double a2 = _a + LIGHT_A / 2;
for(a = a1; a < a2; a += PI / 360)// 扇形循环
{
for(int r = 0; r < LIGHT_R; r++)// 半径循环
{
// 计算照射到的位置
x = (int)(_x + cos(a) * r);
y = (int)(_y + sin(a) * r);
// 光线超出屏幕范围,终止
if (x < 0 || x >= WIDTH || y <= 0 || y >= HEIGHT - 1)
break;
// 光线碰到建筑物,终止
if(g_bufMap[y * WIDTH + x])
break;
// 光线叠加
g_bufRender[y * WIDTH + x] += 0x202000; // 0x202000 淡黄色
}
}