C语言制作游戏——贪吃蛇

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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;
  • 63
    点赞
  • 231
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值