跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > C语言小项目——小游戏贪吃蛇的实现

C语言小项目——小游戏贪吃蛇的实现

时间:2024-04-28 16:40:16 来源:网络cs 作者:纳雷武 栏目:卖家故事 阅读:

标签: 实现  项目  游戏  语言 
阅读本书更多章节>>>>

 一、Win32API处理控制台界面

 1.设置控制台界面大小以及控制台标题

我们可以使用mode命令来设置控制台的大小,使用title命令来设置控制台标题。在C语言中调用库函数system来使用这些作用于控制台的命令。使用代码如下:

采用该命令后控制台界面大概如下:

 

2.定位光标位置以及隐藏光标

控制台坐标系以控制台左上角为原点从上往下y轴坐标增大,从左往右x轴坐标增大。GOORD是一个结构体表示一个字符在控制台的坐标。GetStdHandle是⼀个WindowsAPI函数。它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。GetConsoleCursorInfo检索有关指定控制台屏幕缓冲区的光标⼤⼩和可⻅性的信息。那么我们可以将定位光标坐标封装为一个函数 如下:


 

 二、蛇身的定义以及维护

 1.蛇身的定义

我们采用链表来定义蛇,可以使用一个结构体定义蛇身一个节点的x坐标以及y坐标,使用链表链接。具体如下:

2.蛇的维护

同样利用结构体,定义出蛇头的位置,食物的位置以及蛇的运动方向,蛇本身的状态,蛇每次运动的休眠时长,每个食物的分值,玩家的得分。 其中蛇的运动方向以及本身的状态可以通过枚举变量的方法来定义。具体实现如下:

 

三、游戏的开始界面

1.打印欢迎界面

欢迎界面的打印主要在于将光标定在一个合适的位置,让打印变得好看些,还有pause命令的使用,这点较为简单不过多赘述。实现代码如下:

 

2.地图的打印

为了降低代码维护难度,我们可以在头文件中定义墙的符号,蛇身的符号以及代表食物的符号。如下:

 

首先要使用setlocale将C语言环境改为本地环境,支持打印宽字符。然后将符号打印为宽字符。具体打印过程如下:

 

3.初始化蛇

为降低代码维护难度我们将第一个节点的坐标定义在头文件:

 

然后采用链表的头插的方法将每个节点链接在一起,然后打印出蛇身,再将蛇的状态设置好。

 

4.初始化食物位置

由于食物的位置是随机的,所以食物的坐标可以使用rand函数来取随机值,那么主函数要调用一次srand函数:

 

然后为保证食物在地图里面且能被蛇吃掉我们x坐标必须是二的倍数且取值范围在2-54,y坐标在1-25。然后将食物打印出来:

5.帮助信息的打印

也就是游戏的操作问题,找一个合适的位置打印即可。

 

然后游戏的开始界面就实现完毕了:

 

四、游戏的运行

 1.得分信息的打印以及蛇运动的方向

得分信息的打印跟上面帮助信息一样,找个合适的时间打印即可,蛇的运动方向的改变我们可以使用do...while循环来实现。其中于我们的按键有关,GetAsyncKeyState函数可以检测按键,如果按了最低位为1否则为0,我们可以在头文件定义一个宏来实现对按键的判断。

2.按下空格时的暂停

写一个死循环让它一直停止直到再次按下空格即可:

 

3.蛇的运动

根据蛇的运动方向获取蛇头的下一个位置的坐标,然后如果下一个位置有食物的话蛇身变长,没有食物将原来蛇的最后一个节点打印为空格,总长度不变。每走一步判断一次蛇是否死亡。具体实现过程如下:

(1)下个位置有无食物的判断及蛇身变化

下个位置是否是食物直接比较坐标即可,实现代码如下:

  

如果是食物的话就是吃食物,就是蛇身加长然后再次在地图上更新一个食物:

 

没有食物就是继续往下走,将原来蛇身最后一个节点打印为空格:

 

(2)蛇是否死亡的判断

蛇死亡有两种情况:第一是撞墙死亡,还有就是蛇头撞到蛇身的任一坐标。知道这两点之后实现起来就很简单:

 

五、游戏结束

游戏结束分三种情况:第一为正常结束,也就是玩家按下ESC键结束。第二种是撞到自己最后一种是撞到墙。结束后将蛇身的每个节点释放了即可。

 

在写完每个函数接口后,我们在主函数调用即可,为保证玩家能够多次游玩,我们可以用一个循环来实现,然后用getchar来接收玩家每次开始输入的字符。

 

到这里我们贪吃蛇的实现就完成了,也可以有更多别的功能待大家发掘。如果有问题可以评论哦,博主看到必回的。 

 

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-28/163292.html,文章来源:网络cs,作者:纳雷武,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇:Nginx正则表达式

下一篇:返回列表

文章评论