挑战!贪吃蛇小游戏的实现(2)

在贪吃蛇小游戏的实现(1)中,我们学习了win32 相关的一些知识,本篇文章,博主将带领大家从0开始实现贪吃蛇小游戏!

贪吃蛇游戏设计与分析

本地化

  • <locale.h>实现本地化,该头文件提供的函数用于控制C标准库中对于不同的地区会产生不一样行为的部分,如:数字量的格式,货币量的格式,字符集以及日期和时间的表示形式
  • 类项:通过修改地区,程序可以改变它的行为来适应世界的不同区域,但地区的改变可能会影响库的许多部分,其中有一部分使我们不希望改变的。所以C语言支持针对不同的类项进行修改,下面的一个宏,指定一个类项
LC_COLLATE影响字符串比较函数
LC_CTYPE影响字符处理函数
LC_MONETARY影响货币格式
LC_TIME影响时间格式
LC_NUMERIC影响printf()的数字格式
LC_ALL针对所有类项的修改
  • setlocale函数char * setlocale (int category,const char* locale);其中第一个参数可以是前面说明的类项中的一个,第二个参数有两种取值:“C”和“ ”。“C”代表正常模式,“ ”代表本地模式。

在任意程序执行开始时,都会隐藏调用

setlocale(LC_ALL,"C");

当程序运行起来后,想改变地区,就要调用setlocale函数切换到本地模式

setlocale(LC_ALL," ");
  • 宽字符的打印
  1. 宽字符的字面量必须加上前缀L,否则C语言会把字面量当做窄字符类型来处理。
  2. 前缀L加在单引号前面,表示宽字符,宽字符的打印用wprintf,对应wprintf的占位符为%lc
  3. 在双引号前面表示宽字符,对应wprintf的占位符为%ls
#include <stdio.h>
#include <locale.h>
int main()
{setlocale(LC_ALL," ");wchar_t ch1 = L'新';wchar_t ch2 = L'年';wchar_t ch3 = L'快';wchar_t ch4 = L'乐';wprintf(L"%lc\n",ch1);wprintf(L"%lc\n",ch2);wprintf(L"%lc\n",ch3);wprintf(L"%lc\n",ch4);return 0;
}

元素设计

  • 地图坐标:实现一个27行,58列的棋盘,再围绕地图画出墙。

  • 蛇身和食物:初始化状态,假设蛇的长度是5,蛇身的每个节点为〇,在固定的一个坐标处,比如(24,5) 处开始出现蛇,连续5个节点。注意:蛇的每个节点的x坐标必须是2的倍数,否则可能会出现蛇的一个节点有一半出现在墙体内另一半出现在墙体外的情况。关于食物,就是在墙体内随机生成一个坐标(x坐标必须是2的倍数)坐标不能和蛇的身体重合,然后打印❤
  • 数据结构设计
  1. 蛇节点结构:在游戏运行过程中,蛇每次吃一个食物,身体就会变长一节,如果我们使用链表存储蛇的信息,那么蛇的每一节其实就是链表的每个节点。每个节点只需要记录好地图上的坐标就行。蛇节点结构如下:
    typedef struct SnakeNode
    {int x;int y;struct SnakeNode* next;
    }SnakeNode,*pSnakeNode;
  2. 要管理整条贪吃蛇,需要再封装一个snake结构来维护整条贪吃蛇
    typedef struct Snake
    {pSnakeNode _pSnake;//维护整条蛇的指针pSnakeNode _pFood;//维护食物的指针enum DIRECTION _Dir;//蛇头方向enum GAME_STATUS _Status;//游戏状态int _Score;//当前获得分数int _foodWeight;//默认每个食物十分int _sleepTime;//每走一步的休眠时间
    }Snake,*pSnake;
  3. 枚举蛇的运动方向
    enum DIRECTION
    {UP = 1,DOWN,LEFT,RIGHT
    };
  4. 枚举运动状态
    //枚举游戏状态
    enum GAME_STATUS
    {OK,//正常运行KILL_BY_WALL,//撞墙KILL_BY_SELF,//咬到自己END_NORMAL//正常结束
    };
    

     游戏流程设计

在下一节中,我们将根据游戏流程的设计,进行具体代码的实现~今天是博主复工的第一天,相信不少小伙伴也都以及回到工作学习的岗位上了,新年新气象,大家一起加油冲呀!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【方法】PDF如何与其它格式文件互相转换?

在工作上&#xff0c;有时候我们需要把PDF文件转换成其他格式的文件&#xff0c;比如Word、PPT、jpg等&#xff0c;或者是其他格式文件转换成PDF&#xff0c;那具体要如何操作呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 想把PDF文件转换成其他格式文件&#xff0c…

bisect_left 和 bisect_right 的源码实现及区别解析

哈喽大家好&#xff0c;我是chowley&#xff0c;最近再练二分查找的题&#xff0c;也顺便看了看Python官方的bisect库&#xff0c;这次做一个总结博客。 在 Python 中&#xff0c;bisect_left 和 bisect_right 是两个常用的二分查找函数&#xff0c;用于在已排序的序列中查找元…

Unity Shader ASE基础效果思路与代码(二):边缘光、扰动火焰

Unity Shader ASE基础效果思路与代码(二)&#xff1a;边缘光、扰动火焰 文章目录 Unity Shader ASE基础效果思路与代码(二)&#xff1a;边缘光、扰动火焰边缘光效果展示&#xff1a;代码与思路&#xff1a; 扰动火焰效果展示&#xff1a;代码与思路&#xff1a; 边缘光 效果展…

【黑马程序员】STL容器之string

string string 基本概念 string本质 string是c风格的字符串&#xff0c;而string本质上是一个类 string和char* 区别 char* 是一个指针string是一个类&#xff0c;类内部封装了char*,管理这个字符串&#xff0c;是一个char*型的容器 特点 string 内部封装了很多成员方法…

Linux第65步_学习“Makefie”

学习“Makefie”&#xff0c;为后期学习linux驱动开发做铺垫。 1、在“/home/zgq/linux/atk-mp1”创建一个“Test_MakeFile”目录用于学习“Makefie”。 打开终端 输入“cd /home/zgq/linux/回车”&#xff0c;切换到“/home/zgq/linux/”目录 输入“mkdir Linux_Drivers回…

Python 在Word中创建表格并填入数据、图片

在Word中&#xff0c;表格是一个强大的工具&#xff0c;它可以帮助你更好地组织、呈现和分析信息。本文将介绍如何使用Python在Word中创建表格并填入数据、图片&#xff0c;以及设置表格样式等。 Python Word库&#xff1a; 要使用Python在Word中创建或操作表格&#xff0c;需…

使用向量数据库pinecone构建应用06:日志系统异常检测 Anomaly Detection

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

[Java 项目亮点] 三层限流设计

思路来源&#xff1a;bilibili 河北王校长 文章目录 面试官可能会问你能详细介绍一下Nginx的http_limit_req_module模块吗&#xff1f;你能解释一下如何在Nginx中配置http_limit_req_module模块吗&#xff1f;你知道如何调整Nginx的http_limit_req_module模块以适应不同的业务需…

Mybatis总结--传参

MyBatis 传递参数&#xff1a;从 java 代码中把参数传递到 mapper.xml 文件 六、一个简单参数&#xff1a; Dao 接口中方法的参数只有一个简单类型&#xff08; java 基本类型和 String &#xff09;&#xff0c; 占位符 #{ 任意字符 } &#xff0c;和方法的参数名无关…

Mac OS 搭建C++开发环境【已解决】

Mac OS 搭建C开发环境 文章目录 Mac OS 搭建C开发环境一、安装命令行工具&#xff1a;二、安装vscode三、安装gcc3.1 安装Homebrew3.2 安装gcc3.3 修改配置 四、更改VSCode默认编译器五、安装gdb六、安装Cmake && git七、编译运行 本地环境&#xff1a; Mac OS Sonoma …

VTK的渲染原理

下面三张图均是用VTK实现的&#xff0c;从中很容易看出它们渲染的效果是有区别的&#xff1a; 第一张图&#xff1a;过于明亮&#xff0c;看不到阴影&#xff0c;颜色过渡也不平缓&#xff1b; 第二张图&#xff1a;阴影过于明显&#xff0c;图整体不够明亮&#xff1b; 第三…

C++基础知识(四:类的学习)

类 类指的就是对同一类对象&#xff0c;把所有的属性都封装起来&#xff0c;你也可以把类看成一个高级版的结构体。 【1】定义 class 类名 { 访问权限:成员属性; 访问权限:成员方法; }访问权限&#xff1a; public:共有的&#xff0c;类内、类外和子类中都可以访问 private:私有…

接近于pi的程序

在一个平静的午后&#xff0c;两个神秘的数字悄然相遇了。它们分别是-1031158223和-328227871。这两个数字看起来普普通通&#xff0c;但谁知它们背后隐藏着一段令人惊叹的奇幻之旅。 这两个数字其实是π的两位探险家&#xff0c;它们决定通过一次除法运算来探索π的奥秘。它们…

怎么在线生成动态gif?这个网站一定要知道

静态图片是指一张固定的、不具有动态效果的图片。它通常是由像素点组成的&#xff0c;可以是照片、插图、图标等。静态图片只能呈现一种特定的场景或图像&#xff0c;不能展示动态变化。动态图片&#xff08;是由一系列静态图片组成的&#xff0c;通过快速连续播放这些画面&…

线程共享和非共享的资源及线程优缺点

注意&#xff1a;共享的内存地址空间中不包括栈&#xff1b;共享文件描述符表&#xff0c;表示&#xff0c;同一进程中线程可以操作同一文件。

使用代理IP技术实现爬虫同步获取和保存

概述 在网络爬虫中&#xff0c;使用代理IP技术可以有效地提高爬取数据的效率和稳定性。本文将介绍如何在爬虫中同步获取和保存数据&#xff0c;并结合代理IP技术&#xff0c;以提高爬取效率。 正文 代理IP技术是一种常用的网络爬虫技术&#xff0c;通过代理服务器转发请求&a…

力扣 48. 旋转图像

1.题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 探索设计模式的魅力&#xff1a;状态模式揭秘-如何优雅地处理复杂状态转换 文章目录 一、案例…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-WatchDog

目录 一、 WATCHDOG 概述功能简介基本概念 二、WATCHDOG 模块相关API三、WATCHDOG HDF驱动开发3.1、开发步骤(待续...) 坚持就有收获 一、 WATCHDOG 概述 功能简介 看门狗&#xff08;Watchdog&#xff09;&#xff0c;又称看门狗计时器&#xff08;Watchdog timer&#xff0…

零基础学编程,编程简单学,中文编程工具下载及工具箱进度条构件的用法

一、前言 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常用工具下载——编程工具免费版下载及实例源码下载。 进度条 进度…