项目实践---贪吃蛇游戏的实现

  • 上一章,我们已经分析了贪吃蛇的具体内容,包括它是如何实现的,怎样完成这个项目的,其中就提到了 贪吃蛇有三个代码:一个是测试代码,一个是头文件代码,还有一个是主函数代码。
  • 那么今天我们就来讲一讲测试代码,和一部分的头文件代码

测试代码:

  • 对于测试代码(test.c)它其中包含了

               初始化游戏
                     1.打印环境界面
              2.功能介绍
             3.绘制地图
           4.创建蛇
              5.创建食物
                               6.设置游戏的相关信息

  • 这7个信息,是在主函数中必不可少的内容,对于C语言,就不得不提主函数代码,无论是什么样的C语言代码,它都会有主函数,贪吃蛇也不例外,它的主函数代码为:
int main()
{
	//设置合适配本地环境

	setlocale(LC_ALL, "");
	srand((unsigned int)time(NULL));
	test();
	return 0;
}

test()是为了声明函数用的,那么就知道了,test()就是它的上一部分,

  • 则test()的代码为:
    #include<locale.h>
    #include"snake.h"
    //完成的是游戏的测试逻辑
    void test()
    {
    	int ch = 0;
    	do
    	{
    		system("cls");
    		//建立贪吃蛇
    		Snake snake = { 0 };
    		//初始化游戏
    		//1.打印环境界面
    		//2.功能介绍
    		//3.绘制地图
    		//4.创建蛇
    		//5.创建食物
    		//6.设置游戏的相关信息
    		GameStart(&snake);
    
    		//运行游戏
    		GameRun(&snake);
    
    		//结束游戏 - 善后工作
    
    		GameEnd(&snake);
    
    		SetPos(20, 15);
    		printf("再来一局吗?(Y/N): ");
    		ch = getchar();
    		while (getchar() != '\n');
    
    	} while(ch == 'Y' || ch == 'y');
    	SetPos(0, 27);
    }

    这个就是它的测试代码。我在上边都有标注的,请大家自行观看。

一部分的头文件代码:

  • 头文件是相当重要的一部分,如果没有它,所有的代码都无法解析外部命令。它就相当于一个监督者,没有它的命令都是无法执行的。

  • 这里就需要结构体,枚举,来定义它的类型。(上一章讲的蛇身就是要通过链表来完场的),则代码为:

    #include<stdio.h>
    #include<windows.h>
    #include<stdbool.h>
    #include<stdlib.h>
    #include<time.h>
    
    
    //类型大的声明
    
    //蛇的方向  用枚举来定义
    
    enum DIRECTION
    {
    	UP = 1,
    	DOWN,
    	LEFT,
    	RIGHT
    };
    
    //蛇的状态 
    //正常,撞墙,撞到自己,正常退出
    //也是用枚举来定义
    
    enum GAME_STATUS
    {
    	OK, //正常
    	KILL_BY_WALL, //撞墙
    	KILL_BY_SELF, //撞到自己
    	END_NORMAL    //正常退出
    };
    
    //蛇身的节点类型
    typedef struct SnakeNode
    {
    	//坐标
    	int x;
    	int y;
    	//指向下一个节点的指针
    	struct SnakeNode* next;
    }SnakeNode, * pSnakeNode;
    
    //贪吃蛇
    typedef struct Snake
    {
    	pSnakeNode _pSnake;//指向蛇头的指针
    	pSnakeNode _pFood;//指向食物节点的指针
    	enum DIRECTION _dir;//蛇的方向
    	enum GAME_STATUS _status;//游戏的状态
    	int _food_weight;//一个食物的分数
    	int _score;      //总成绩
    	int _sleep_time; //休息的时间,时间越短,速度越快,时间越长,速度越慢
    }Snake, *pSnake;
    

    这里的数字,其实是可以随意定义的。我的只是仅供参考罢了。

  • 对于测试代码和一部分的头文件代码就讲到这里,后续就是主要的来实现主函数的代码了。

                 在讲完贪吃蛇游戏代码后,我会再写一章,把所有的代码整理一遍,这样你们看的时候就会理解的更容易些。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】TiDB: A Raft-based HTAP Database

文章目录 数据库知识介绍数据库系统的ACID特性分布式系统和CAP理论关系型数据库与非关系型数据库关系型数据库非关系型数据库 OldSQL、NoSQL、NewSQLOldSQLNoSQLNewSQL OLTP、OLAP、HTAP 前言&#xff1a;为什么选择TiDB学习&#xff1f;pingCAP介绍TiDB介绍TiDB的影响力TiDB概…

什么是大语言模型以及如何构建自己的大型语言模型?

一、关于大语言模型 LLM 对于无数的应用程序非常有用&#xff0c;如果我们自己从头开始构建一个&#xff0c;那我们可以了解底层的ML技术&#xff0c;并可以根据特定需求定制LLM&#xff0c;但是对资源的需求巨大。大型语言模型是一种 ML 模型&#xff0c;可以执行各种自然语言…

《QT实用小工具·二十八》基于qt开发的各种曲线

1、概述 源码放在文章末尾 该项目实现了各种曲线的绘制&#xff0c;下面是项目的demo演示&#xff1a; 项目部分代码如下&#xff1a; #include "frmsmoothcurve.h" #include "ui_frmsmoothcurve.h" #include "smoothcurve.h" #include "…

【ThinkPHP框架教程·Part-01】ThinkPHP6.x框架安装教程

文章目录 一、框架介绍1、框架简介和版本选择2、主要新特性 二、安装步骤1、下载并运行Composer-Setup.exe2、安装TP前切换镜像3、安装稳定版4、测试运行 一、框架介绍 1、框架简介和版本选择 Thinkphp是一种基于php的开源web应用程序开发框架ThinkPHP框架&#xff0c;是免费开…

Axure设计原型图工具 Windows11安装步骤详解

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Axure 是一个流行的原型设计工具&#xff0c;它被用来创建交互式原型、线框图和用户界面设计。Axure 可以帮助用户在项目早期阶段快速制作出可交互的原型&#xff0c;以便进行用户测试、验证设计概念和与…

jetcache fastjson 泛型复杂对象JSON序列 ,反序列化

Jetcache fastjson 泛型复杂对象JSON序列 ,反序列化 默认的FastJson2 序列化存在问题增强FastJson 支持Encode 编码器Decode 解码器 默认的FastJson2 序列化存在问题 默认的序列化不能转换List 中的泛型数据类型, 从缓存拿取的list集合对象数据全部都转换成了JSONObject 增强F…

UE5 把蓝图内的变量和事件暴露给序列使用

在蓝图变量内勾选Expose to Cinematics 事件: 在角色内添加自定义事件 在序列内对着角色的号添加Event,选择Trigger 添加关键帧,然后在关键帧右键添加class,在class下绑定事件

fdisk使用的MBR分区

MBR和GPT分区 MBR分区 MBR分区一般在分区的时候 &#xff0c;MBR分区格式只能支持2TB以下的硬盘容量。 分区最多为4个主分区 或 3个主分区和1个扩展分区&#xff0c;而创建扩展分区后可以分无数个逻辑分区&#xff0c;当然跟磁盘容量有关&#xff0c; 逻辑分区在扩展分区上…

K210基础实验——独立按键中断

前言 学习K210开发板的独立按键和中断功能 一、涉及到的外设资源是K210开发板上的BOOT按键和RGB灯 二、BOOT按键按下&#xff0c;MCU上连接BOOT的IO口变为低电平&#xff0c;松开后为高电平 三、引脚对应关系 BOOT : IO16 RGB灯&#xff1a; R:IO6 G:IO7 B:IO8 四、在…

A-1:树状数组

A-1:树状数组 1.介绍Q1:树状数组解决什么问题&#xff1f;Q2:树状数组的使用1.前置知识&#xff1a;lowbit(x)2.单点修改3.求[1,n]的和4.区间查询5.hh Q3:树状数组是否优化了Q4:上图上例子解释上面说的东西(Important) 2.习题练习 1.介绍 树状数组是一个比较难以理解的高级数据…

Oracle体系结构初探:聊聊REDO

上一篇文章写了undo&#xff08;文章链接&#xff1a;聊聊UNDO&#xff09;&#xff0c;这篇和大家一起聊聊redo。redo如果按照我的傻瓜翻译&#xff0c;意为再次去做、重新去做。Oracle官方对于redo的描述是&#xff1a;记录对数据所做的所有更改&#xff0c;包括未提交和已提…

Electron+Vue3整合 - 开发时状态整合

说明 本文介绍一下 Electron Vue3 的整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b;步骤一&#xff1a;创建vue3项目 常规操作&#xff0c;不再赘…

启动 UE4编辑器报 加载 Plugin 失败

启动 UE4编辑器报 加载 Plugin 失败&#xff0c;报如下错误&#xff1a; Plugin ‘SteamVR’ failer to load because module ‘SteamVR’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. …

yolov5-6.0调测记录

直接运行yolov5-6.0/detect.py&#xff0c;输出如下&#xff1a; image 1/2 C:\Users\dun\Downloads\yolov5-6.0\data\images\bus.jpg: 640x480 4 persons, 1 bus, Done. (0.216s) image 2/2 C:\Users\dun\Downloads\yolov5-6.0\data\images\zidane.jpg: 384x640 2 persons, 2…

单链表的简单应用

目录 一、顺序表的问题及思考 二、链表的概念及结构 三、单链表的实现 3.1 增 3.1.1 尾插 3.1.2 头插 3.1.3 指定位置前插入 3.1.4 指定位置后插入 3.2 删 3.2.1 尾删 3.2.2 头删 3.2.3 指定位置删除 3.2.4 指定位置后删除 3.2.5 链表的销毁 3.3 查 3.4 改 四…

【Godot4自学手册】第三十九节利用shader(着色器)给游戏添加一层雾气效果

今天&#xff0c;主要是利用shader给游戏给地宫场景添加一层雾气效果&#xff0c;增加一下气氛&#xff0c;先看一下效果&#xff1a; 一、新建ParallaxBackground根节点 新建场景&#xff0c;根节点选择ParallaxBackground&#xff0c;命名为Fog&#xff0c;然后将该场景保…

什么是AIoT?

什么是AIoT? AIoT&#xff0c;即人工智能物联网&#xff0c;是一种将人工智能&#xff08;AI&#xff09;技术与物联网&#xff08;IoT&#xff09;相结合的新型应用形态。它不仅实现了设备之间的互联互通&#xff0c;还赋予了它们更智能化的特性。AIoT的核心在于通过AI的数据…

prometheus+grafana可视化监控

prometheus监控 一、用二进制安装 1、安装Prometheus 打开官方网址:https://prometheus.io/download/ wget https://github.com/prometheus/prometheus/releases/download/v2.45.4/prometheus-2.45.4.linux-amd64.tar.gz下载完成后解压一下安装包 tar vxf prometheus-2.45.…

解锁棋盘之谜:探索N皇后问题的全方位解决策略【python 力扣51题】

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

软考138-上午题-【软件工程】-软件评审

一、软件评审 通常&#xff0c;把“质量”理解为“用户满意程度”。为了使得用户满意&#xff0c;有以下两个必要条件&#xff1a; (1) 设计的规格说明书符合用户的要求&#xff0c;这称为设计质量。 (2) 程序按照设计规格说明所规定的情况正确执行&#xff0c;这称为程序质…