【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:rfhklwt@163.com】
成品图
游戏模块组成
- 开拓疆土——绘制游戏窗口
- 上帝造蛇和食物——初始化蛇和食物
- 自动裁判员——菜单信息
- 食物从天而降——食物的随机生成
- 让蛇扭起来——移动蛇
- 大开吃戒——吃食物
- 瞬间移动——穿墙
- 生命凋零——蛇死亡
- 一切的开始——游戏开始
- 一切的结束——结束游戏
- **上帝控制台——主函数 **
开拓疆土——绘制游戏窗口
大家都玩过游戏,游戏一定有一个限制框来限制我们游戏主人公的行动,说白了就是地图,这就是我们的游戏窗口。见如下代码
void MakeFrame(HANDLE hOut)
{
//打印边框
SetPosition(hOut, FRAMEX, FRAMEY); //设置光标为左上角坐标处
printf("┏");
SetPosition(hOut, FRAMEX + 2 * FRAMEWIDTH - 2, FRAMEY); //设置光标为右上角坐标处
printf("┓");
SetPosition(hOut, FRAMEX, FRAMEY + FRAMEHEIGHT); //设置光标为左下角坐标处
printf("┗");
SetPosition(hOut, FRAMEX + 2 * FRAMEWIDTH - 2, FRAMEY + FRAMEHEIGHT); //设置光标为右下角坐标处
printf("┛");
//水平-顶端
for (int i = 2; i < 2 * FRAMEWIDTH - 2; i+=2)
{
SetPosition(hOut, FRAMEX + i, FRAMEY);
printf("━");
}
//水平-底端
for (int i = 2; i < 2 * FRAMEWIDTH - 2; i += 2)
{
SetPosition(hOut, FRAMEX + i, FRAMEY + FRAMEHEIGHT);
printf("━");
}
//竖直-左端
for (int i = 1; i < FRAMEHEIGHT; i++)
{
SetPosition(hOut, FRAMEX, FRAMEY + i);
printf("|");
}
//竖直-右端
for (int i = 1; i < FRAMEHEIGHT; i++)
{
SetPosition(hOut, FRAMEX + 2 * FRAMEWIDTH - 2, FRAMEY + i);
printf("|");
}
//打印游戏名称
SetPosition(hOut, FRAMEX + FRAMEWIDTH - 5, FRAMEY - 2);
printf("贪吃蛇游戏");
//打印游戏操作
SetPosition(hOut, FRAMEX, FRAMEY + FRAMEHEIGHT + 2);
printf("游戏操作: 上: ↑ 左: ← 右: → 下: ↓");
SetPosition(hOut, FRAMEX, FRAMEY + FRAMEHEIGHT + 4);
printf("加速: 长按方向键 退出: ESC 暂停:Space");
}
以上代码需要说明的有
1. SetPosition(HANDLE hOut, int x, int y)函数:
void SetPosition(HANDLE hOut, int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(hOut, pos);
}
从上式代码可以看出,SetPosition(HANDLE hOut, int x, int y)函数是用于把光标放在我们需要的(x, y)上,从而能在(x, y)处打印我们需要的东西。
**2. 常量:FRAMEX和FRAMEY和FRAMEHEIGHT和FRAMEWIDTH的含义 **
正如常量的名字一样,我们在主函数的前面定义了这四个常量,其含义和数值如下:
#define FRAMEX 4 //窗口左上角横坐标
#define FRAMEY 4 //窗口左上角纵坐标
#define FRAMEWIDTH 25 //游戏窗口宽度
#define FRAMEHEIGHT 25 //游戏窗口高度
上帝造蛇和食物——初始化蛇和食物
根据蛇在本游戏中具有的性质,我们将这些性质打包到名为蛇的结构体中,同理也定义了一个食物的结构体。代码如下:
//蛇
typedef struct SNAKE
{
int x[100]; //蛇的横坐标, x[0]蛇尾横坐标
int y[100]; //蛇的纵坐标, y[0]蛇尾纵坐标
int nCount; //蛇吃食物总数
int nLength; //蛇的长度
int nSpeed; //蛇的移动速度
}Snake;
//食物
typedef struct FOOD
{
int x;