贪吃蛇游戏的实现

一.技术要点:

贪吃蛇需要掌握:

        c语言函数,枚举,结构体,动态内存管理,预处理指令,链表,Win32 API等

二.Win32 API

1.Win32 API简介

windows可以帮应用程序卡其视窗,描绘图案,使用周边设备,,Win32 API就是windows32位平台上的应用程序编程接口

2.控制台程序

(1).使用cmd命令设置控制台窗口的长宽

输入mode con cols=100 lines=30

(2.)可以通过命令设置控制台的窗口的名字

title xxx

(3.)C语言的system函数实现控制台的命令

#include<stdio.h>
#include<stdlib.h>
int main()
{system("mode con cols=50 lines=20");system("title 贪吃蛇");system("pause");return 0;
}

(4.)控制台屏幕上的坐标

COORD是windows API中定义的结构体,表示一个字符在控制台屏幕缓冲区上的坐标,坐标(0,0)位于缓冲区左上角

CORRD类型声明:

typedef struct _CORRD
{SHORT X;SHORT Y;
}CORRD, *PCORRD;

给结构体定坐标:

#include <windows.h>
CORRD pos = { 10,15 };

(5.)GetStdHandle获取设备

它也是一个windows API函数,用于从一个特定的标准设备(标准输入,标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备

函数的声明:

HANDLE GetStdHandle(DWORD nStdHandle);

eg.

HANDLE hOutput = NULL;//获取标准输出的句柄
hOutput = GetStHandle(STD_OUTPUT_HANDLE);

(6.)GetConsoleCursorInfo获取光标信息

检索有关指定控制台屏幕缓冲区的光标大小和可见性信息(鼠标信息)

函数的声明:

BOOL WINAPI GetConsoleCursorInfo(HANDLE               hConsoleOutput PCONSOLE_CURSOR_INFO lpConsoleCursorInfo 
);

 PCONSOLE_CURSOR_INFO是指向CONSOLE_CURSOR_INFO结构的指针,该结构接受有感主机游标(光标)的信息

eg.

#include <windows.h>
int main()
{CONSOLE_CURSOR_INFO cursor_info = { 0 };HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleCursorInfo(handle,&cursor_info);return 0;
}

CONSOLE_CURSOR_INFO是结构体,其中有两个成员,:bVisible和dwSize分别控制光标的可可见性和大小

(7.)SetConsoleCursorPosition设置光标位置

void SetPos(int x,int y)
{//获得设备句柄HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//根据句柄设置光标位置CORRD pos = { x,y };SetConsoleCursorPosition(handle,pos);
}

(8.)GetAsyncKeyState获取按键情况

想要判断一个键是否被按,可以检测GetAsyncKeyState返回值的最低为是否为1

#define KEY_PRESS(VK) ((GetAsyncKeyState(VK) & 0x1) ? 1 : 0)

eg.

#define KEY_PRESS(VK) ((GetAsyncKeyState(VK) & 0x1) ? 1 : 0)
int main()
{while(1){    if(KEY_PRESS(0x30))printf("0\n");else if(KEY_PRESS(0x31))printf("1\n");else if(KEY_PRESS(0x32))printf("2\n");else if(KEY_PRESS(0x33))printf("3\n");else if(KEY_PRESS(0x34))printf("4\n");......}
}

这样可以在按下数字键是在屏幕上输出数字

三.贪吃蛇游戏的设计与分析

一.地图

1.<locale.h>本地化

<locale.h>提供的函数用于控制C标准库中对于不同地区会产生不一样的行为的部分

在标准中,依赖地区的部分有以下几项:

1.数字量的格式

2.货币量的格式

3.字符集

4.日期和时间的表示形式

2.类项

1.LC_COLLATE:影响字符串比较函数strcoll()和strxfrm()

2.LC_CTYPE:影响字符处理函数的行为

3.LC_MONCTARY:影响货币格式

4.LC_NUMERIC:影响printf()的数字格式

5.LC_TIME:影响时间格式strftime()和wcsfting()

6.LC_ALL:针对所有类项修改,将以上的多有类别设置为给定的语言环境

3.setlocale函数

该函数用于修改当前的地区,可以针对一个类项,也可以针对所有类项

函数声明:

char* setlocale(int category,const char* locale);

第一个参数是修改的类项,第二个为地区

C的标准给了第二个参数2种可能取值:1."C"(正常模式)  2.""(本地模式)

在任意程序执行开始时,会隐藏执行调用setlocale(LC_ALL,"C");

第二个参数也可以传入NULL,通过传入NULL可以查询默认的本地信息

4.宽字符的打印

一个宽字符占领个字符的位置

int main()
{setlocale(LC_ALL,"");wchar_t ch = L'中国';wprintf("L%lc",ch);return 0;
}

5.地图坐标

可以假设设计一个27行,58列的地图并围绕地图画出墙壁,如下

二.蛇身和食物

蛇身

可以初始化蛇身长度为5,在随机坐标出现蛇,连续五个节点代表蛇身

注意:为了防止社的一个节点的一半出现在墙体里,另一半在墙外,最好让蛇身的每一个节点的X坐标为2的倍数

食物

在墙体内随机生成一个坐标(x的坐标必须为2的倍数),同时坐标不能与蛇身重合

如图:

三.数据结构设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438823.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【爬坑】临时修复To connect to xxx insecurely, use `--no-check-certificate‘报错

解决方案&#xff1a;wget请求时跳过证书验证。 sudo vim /etc/wgetrc 插入一行&#xff1a; check_certificate off 重新运行wget命令即可。

Markdown(2篇文章学会Markdown第二篇

目录 1. 图片1.1 行内形式图片&#xff1a;\!\[Alt text]\(/path/to/img.jpg "Optional title")1.2 参考形式图片&#xff1a;\!\[内容]\[1] \[1]: image_url "alt 提示" 2. 列表2.1 无序列表&#xff1a;*、或-2.2 有序列表&#xff1a;数字接着一个英文…

Redis学习——高级篇④

Redis学习——高级篇④ Redis7高级之Redis与Mysql数据双写一致性工程案例&#xff08;四&#xff09; 4.1 MySQL主从复制原理4.2 canal 工作原理4.3 mySQL->canal->redis 双写一致性1.环境2.配置Mysql3.配置canal4. Canal客户端&#xff08;Java编写&#xff0…

双非本科准备秋招(10.2)—— JVM3:垃圾收集器

垃圾收集器 分为七种&#xff0c;如下&#xff1a; 从功能的角度分为 1、串行&#xff1a;Serial、Serial Old 2、吞吐量优先&#xff1a;Parallel Scavenge、Parallel Old 3、响应时间优先&#xff1a;CMS 吞吐量优先VS响应时间优先 吞吐量运行用户代码时间/(运行用户代码…

AI-数学-高中-11-指数函数

原作者视频&#xff1a;初等函数】3指数函数&#xff08;基础&#xff09;_哔哩哔哩_bilibili 指数函数、幂函数&#xff1a; 注意&#xff1a;分段函数注意看分界点。 注意&#xff1a;复合函数&#xff0c;采用换元法分解为外层和内层2个函数&#xff0c;先计算外层函数t和画…

神经网络建立(结果可变)最小神经元

目录 介绍&#xff1a; 初始化&#xff1a; 建模: 预测&#xff1a; 改变结果&#xff1a; 介绍&#xff1a; 在深度学习中&#xff0c;神经元通常指的是人工神经元&#xff08;或感知器&#xff09;&#xff0c;它是深度神经网络中的基本单元。深度学习的神经元模拟了生…

如何成为一个更好的沟通者?

新年伊始&#xff0c;我想跟大家分享9条我给自己定下的「沟通准则」。 这9条准则&#xff0c;是我对自己的要求&#xff0c;也是我身体力行践行了许多年的做法。我可能也没能践行得非常完美&#xff0c;但这也是我一直在努力的目标。 如果你希望能够跟别人「好好说话」&#xf…

《SPSS统计学基础与实证研究应用精解》视频讲解:在线分析处理报告

《SPSS统计学基础与实证研究应用精解》5.1 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解5.1节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会使…

《信息系统项目管理师》备考计划

《信息系统项目管理师》证书价值和作用 信息系统项目管理师证书的价值体现在提升专业知识、助力职业发展、职称评定、技能补贴和人才引进或积分落户等方面。 一方面可以通过系统学习&#xff0c;可以显著提高自己在信息系统项目管理领域的专业水平。方便自己以后向更多的方向…

sqli-labs部署及sqli-labs靶场第一关

部署 一、环境安装 1.下载phpstudy&#xff0c;下载链接&#xff1a;小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; &#xff0c;傻瓜式的安装过后打开软件进入如下界面&#xff0c;我们开启nginx和mysql &#xff01;&#xff01;&#xff01;&#xff0…

Java把列表数据导出为PDF文件,同时加上PDF水印

一、实现效果 二、遇到的问题 实现导出PDF主体代码参考&#xff1a;Java纯代码实现导出PDF功能&#xff0c;下图是原作者实现的效果 导出报错Font STSong-Light with UniGB-UCS2-H is not recognized.。参考&#xff1a;itext 生成 PDF(五) 使用外部字体 网上都是说jar包的版本…

C语言循环分支数组练习

目录 一、打印三的倍数 二、从大到小输出 三、三角形判断 四、数9的个数 五、猜数字游戏 六、乘法口诀表 七、求最大值 八、分数求和 九、打印素数 十、打印闰年 十一、最大公约数 十二、打印空心正方形图案 十三、矩阵转置 十四、逆序输出 十五、输入10个整数&…