用c语言来模拟实简易版贪吃蛇

目录

一、技术要求:

二、需要的功能:

二、了解一下Win32API以及当前游戏实现需要用的函数:头lude

1、概念:

2、控制台程序:(经常运行的黑色框框就是控制台)

   mode命令  设置控制台的长度和宽度

3、控制台屏幕上的坐标COORD

4、句柄 GetStdHandle 函数

5、光标的隐藏

 GetConsoleCursorInfo 函数

SetConsoleCursorInfo 函数

​编辑

流程如下:

 6、光标的坐标修改

7、获取按键(虚拟按键)的情况

三、关于实现地图绘制 

1、 讲解一下 C语言的国际化(地区化) 

2、本地化怎么用

四、开始实现贪吃蛇:

1、贪吃蛇:

(1)、蛇身和食物:

(2)、蛇的运动方向(上、下、左、右)

(3)、蛇的状态

(4)、蛇的速度(加速,减速)

(5)、食物当前的分数以及总分

整合起来

2、初始化界面:

(1)、隐藏光标和设置大小

(2)、欢迎界面&&功能介绍(关于光标定位函数在上面讲解Win32API时已经写过)

(3)、绘制地图

(4)、初始化蛇身:

>>要创建一个5节点的蛇身:

 (5)、食物节点的建立 

(6)、整合下来:初始化

3、游戏运行

(1)、帮助信息

(2)、开始写蛇的运动

运动方向

那么,暂停呢?如何实现· 

 加速:

 退出:

 蛇的一步一步走:

 判断下一节点是不是食物:

若是食物: 吃掉便是

 不是食物:截断屁股

 总结:全部代码

4、结束游戏(善后工作)

(1)、分状态提示你结束游戏的原因:

 (2)、销毁游戏

五、总代码: 

TaSe.h文件

TaSe.c文件

 test.c文件(实现运行)

六、总结:


一、技术要求:

C语言的函数、结构体、单链表、动态内存管理、枚举、Win32API、预处理指令等

二、需要的功能:

游戏界面(地图绘制),蛇的身体,蛇的移动方向,蛇的状态,暂停,蛇的加速与减速,食物,一食物的分数,总分,

二、了解一下Win32API以及当前游戏实现需要用的函数:头lude<windows.h>

1、概念:

        Win32 API是一套由微软提供的应用程序编程接口(Application Programming Interface)。它是Windows操作系统的核心组成部分,为开发者提供了访问操作系统底层功能资源的接口,包括图形界面、文件操作、进程和线程管理(可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等等。

2、控制台程序:(经常运行的黑色框框就是控制台)

VS2022的控制运行时是这样的,这个叫终端,要先改掉

设置里面默认终端应用程序改成Windows 控制台主机 

 就是如下qing

   mode命令  设置控制台的长度和宽度

system("mode con cols=100 lines=30");

用到了system函数,用来控制控制台信息要包含头文件<stdlib.h>

title命令 设置控制台名字

system("title 贪吃蛇");

3、控制台屏幕上的坐标COORD

COORD是WindowsAPI中定义的⼀个结构体,表⽰⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系 (0,0)的原点位于缓冲区的顶部左侧单元格。

 如下是COORD的结构体类型声明

typedef struct _COORD {
 SHORT X;
 SHORT Y;
} COORD, *PCOORD;

4、句柄 GetStdHandle 函数

句柄是啥意思???控制台窗口,你要去操作他,那你要先获得他的使用权,才能操作,相当于“手柄”,你插了自己的手柄是不是可以抓住他的,然后去实行游戏的各种状态。想要炒菜,是不是得抓住锅的把手  (相当与标识(标记))。

HANDLE是一个指针(typedef改名而来)

 在函数里面有三种选择,根据需求进行选择,这里我们选择的是标准输出设备

 返回的是一个值

5、光标的隐藏

 GetConsoleCursorInfo 函数

获得光标信息

第一个变量是句柄,第二个是一个结构体

 这个结构体 包括光标的占比可见性

 dwSize,由光标填充的字符单元格的百分⽐。此值介于1到100之间。光标外观会变化,范围从完 全填充单元格到单元底部的⽔平线条。 

bVisible,光标的可⻅性

先创建一个结构体变量,然后取其地址传入光标信号获取函数

对于如下结构体变量可以初始化为0更好

修改光标需要用到头文 <stdbool.h>

结构体成员 bVisible 默认情况下是 true (开启)

SetConsoleCursorInfo 函数

你获得到信息以后,将结构体成员的值进行了修改,那么是不是还需要一个函数来完成设置

第一个是句柄,第二个是结构体

 如下:你修改好光标后,传个SetConsoleCursorInfo函数,设置完成

流程如下:

 6、光标的坐标修改

SetConsoleCursorPosition 函数 定位光标的坐标

第一个是HANDLE 类型也就是 句柄    第二个参数是COORD类型,就是关于坐标相关的结构体

 在蛇的移动过程中,我们蛇是不断改变位置的,那么光标也是要不断变化的,可以分装一个函数来进行光标位置的定位


//定位光标
void SetPos(short x, short y)
{
	//句柄(标识标准输出,屏幕缓冲区)
	HANDLE houtput = NULL;
	houtput = GetStdHandle(STD_OUTPUT_HANDLE);

	//给光标进行定位
	COORD pos = { x,y };
	SetConsoleCursorPosition(houtput, pos);
}

7、获取按键(虚拟按键)的情况

getAsyncKeyState 函数 (winuser.h)

键盘上每一个键的虚拟键都有一个虚拟值,传参的是虚拟件的代码 虚拟键代码

 返回值是16位的short值最高位1,则是按下的,若是为0,则是抬起的情况


我们可以想到按位&1,得到的值无非是 0或者1

可以设置一个变量宏,

三、关于实现地图绘制 

看下面的光标,x与y的关系是y = 2x,长方形的样子(因为默认是以单字符的形式建立的坐标系)

 实际上我们打印的地图是宽字符,打印出来是占2个字节的位置(平时我们使用的是窄字符)

1、 讲解一下 C语言的国际化(地区化) 

过去C语⾔并不适合⾮英语国家(地区)使⽤。 C语⾔最初假定字符都是单字节的。但是这些假定并不是在世界的任何地⽅都适⽤来为了使C语⾔适应国际化C语⾔的标准中不断加⼊了国际化的⽀持。⽐如:加⼊了宽字符的类型 wchar_t 和宽字符的输⼊和输出函数,加⼊了头⽂件<locale.h>,其中提供了允许程序员针对特定 地区(通常是国家或者说某种特定语⾔的地理区域)调整程序⾏为的函数

setlocale  函数   第二个参数单纯使用 “” 就是本地化,“C” 就是正常模式,传递NULL 就是当前地区

setlocale(LC_ALL, " ");//切换到本地环境 
setlocale(LC_ALL, "C");//正常情况

修改类别(那些调整)

LC_COLLATE影响字符串⽐较函数 strcoll() 和 strxfrm() 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值