贪吃蛇(c实现)(真的超级超级简单)
1.代码请看贪吃蛇c实现 · 王赫辰/c语言 - 码云 - 开源中国 (gitee.com)
2.本项目宗旨:
1.不引入复杂的库函数(其他博主的全是陌生库函数看不懂?看我就对了!◕‿◕)
2.不使用c++语法 (都说了c实现,嘿嘿ᕙ(`▿´)ᕗ)
3.不使用函数,结构体和指针 (除非题目需要。不要折磨自己(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ ))
3.实现者要求:具备较强逻辑能力,具有灵活运用二维数组的能力,熟练运用循环与选择。
4.如果你准备好了,那么我们开始吧!❛‿˂̵✧
项目整体架构
1.规则:贪吃蛇移动的每一步都需要重新打印,贪吃蛇不能碰到自己和边框,贪吃蛇吃到食物加分,且食物随机生成。
2.二维数组使用方法:根据不同对象(边框,蛇,食物)的属性赋值,再根据值进行打印。
3.在每次移动的时候,蛇身要继承蛇头或者前面蛇身的位置,最后的蛇身需要被清理。
生成随机食物
1.来看看方法的来源利用时钟值来实现数组的真正随机 · 王赫辰/c语言 - 码云 - 开源中国 (gitee.com)
2.当我们选择生成四个食物时,需要对食物的横纵坐标分别随机赋值,但范围要使其不出现在蛇或者在边框上(别忘了头文件stdlib.h和time.h)
srand(time(NULL));
int a1 = rand() % 8 + 2;
int b1 = rand() % 16 + 2;
int a2 = rand() % 16 + 2;
int b2 = rand() % 9 + 2;
int a3 = rand() % 16 + 2;
int b3 = rand() % 17 + 2;
int a4 = rand() % 3 + 2;
int b4 = rand() % 16 + 2;
初始化变量
(这个应该都懂吧?〃•ω‹〃)(将四个食物坐标赋值以便打印)
int map[20][20] = { 0 };map[a1][b1] = 4;map[a2][b2] = 4;map[a3][b3] = 4;map[a4][b4] = 4;int count = 0;int e = 11;int f = 11;int g = 12;int h = 13;int i = 10;int l = 11;int m = 11;int z = 1;
控制移动
int a = 0;int b = 0;int j;scanf_s("%d", &j);if (j == 0){e = 11;f = 11;g = 12;h = 13;i = 10;l = 11;m = 11;count = 0;}if (j == 1){if (map[l - 1][i] == 4){count++;}if (e != l - 1&&l!=1){int n = l;int o = i;int p = e;int q = f;map[m][g] = 0;l--;e = n;f = o;m = p;g = q;}if (e == l - 1||l==1){printf("你输了\n");break;}}if (j == 2){if (map[l + 1][i] == 4){count++;}if (e != l + 1&&l!=18){int n = l;int o = i;int p = e;int q = f;map[m][g] = 0;l++;e = n;f = o;m = p;g = q;}if (e == l + 1||l==18){printf("你输了\n");break;}}if (j == 3){if (map[l][i-1] == 4){count++;}if (f != i - 1&&i!=1){int n = l;int o = i;int p = e;int q = f;map[m][g] = 0;i--;e = n;f = o;m = p;g = q;}if (f == i - 1||i==1){printf("你输了\n");break;}}if (j == 4){if (map[l][i+1] == 4){count++;}if (f != i + 1&&i!=18){int n = l;int o = i;int p = e;int q = f;map[m][g] = 0;i++;e = n;f = o;m = p;g = q;}if (f == i + 1||i==18){printf("你输了\n");break;}}
1.输入1234控制蛇上下左右移动,而笔者选择在控制中加入输赢判定,当碰到蛇身或墙壁的时候游戏失败,当碰到食物的时候加分
2.逻辑解惑:当我们控制蛇向上移动时,如果蛇身或者边框在蛇头上面,那么是不是移动后就输了?而如果食物在上面,是不是移动就加分了?所以我们可以在赋值操作前进行判断对不对?
3.继承逻辑:当蛇头自定义运行时,第一段蛇身到原来蛇头位置,第二段蛇身到原来第一段蛇身的位置,而原先的第二段蛇身需要赋值为0以便打印空格。
赋值操作
for (a = 0; a < 20; a++){for (b = 0; b < 20; b++){if (map[a][b] == 0){if (a == 0 || b == 0 || a == 19 || b == 19){map[a][b] = 1;}if ((a == e && b == f) || (a == m && b == g)){map[a][b] = 2;}if (a == l && b == i){map[a][b] = 3;}}}}
1.由于打印内容的不同,我们将边框的值赋为一类,而蛇头,蛇身同理而前面食物的赋值也是这个思路
打印游戏界面
int c = 0;int d = 0;for (c = 0; c < 20; c++){for (d = 0; d < 20; d++){if (map[c][d] == 1){printf("* ");}if (map[c][d] == 0){printf(" ");}if (map[c][d] == 2){printf("* ");}if (map[c][d] == 3){printf("@ ");}if (map[c][d] == 4){printf("$ ");}}printf("\n");}printf("得分为%d\n", count);}
1.分别依据二维数组的值打印不同的内容,注意空格的打印,这样游戏界面就是方的了。
ps:小彩蛋,蛇会慢慢蜕皮哦,去玩两把吧!੭ ᐕ)੭*⁾⁾
相关文章:
贪吃蛇(c实现)(真的超级超级简单)
1.代码请看贪吃蛇c实现 王赫辰/c语言 - 码云 - 开源中国 (gitee.com) 2.本项目宗旨: 1.不引入复杂的库函数(其他博主的全是陌生库函数看不懂?看我就对了!◕‿◕) 2.不使用c语法 (都说了c实现,…...
linux 内存回收mglru算法代码注释2
mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru,可参考linux 内存回收代码注释(未实现多代lru版本)-CSDN博客 新的算法在引入4代lru的同时,还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…...
Exchange意外登录日志
最近在审计Exchange邮件系统的时候,发现大量用户半夜登录的日志。而且都是成功的,几乎没有失败的情况。其中Logon Type 8表示用户从网络登录。 Logon type 8: NetworkCleartext. A user logged on to this computer from the network. The user’s pas…...
NX二次开发UF_CURVE_ask_curve_turn_angle 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_turn_angle Defined in: uf_curve.h int UF_CURVE_ask_curve_turn_angle(tag_t curve, double orientation [ 3 ] , double * angle ) overview 概述 Returns …...
UE 进阶篇一:动画系统
导语: 下面的动画部分功能比较全,可以参考这种实现方式,根据自己项目的颗粒度选择部分功能参考,我们商业项目动画部分也是这么实现的。 最后实现的效果如下: 最终效果 目录: ------------------------------------------- 文末有视频教程/工程地址链接 -------------…...
超文本传输协议
超文本传输协议(HypertextTransfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容…...
『heqingchun-Ubuntu系统+x86架构+编译安装ffmpeg+带有nvidia硬件加速』
Ubuntu系统x86架构编译安装ffmpeg带有nvidia硬件加速 一、准备文件 注:可直接下载我上传的CSDN资源,然后直接跳到"一"中的第"3"项"将文件按以下顺序存放"。 ffmpeg源码:音视频开发ffmpeg编译所需资源文件 其…...
UE5 UI教程学习笔记
参考资料:https://item.taobao.com/item.htm?spma21n57.1.0.0.2b4f523cAV5i43&id716635137219&ns1&abbucket15#detail 基础工程:https://download.csdn.net/download/qq_17523181/88559312 1. 介绍 工程素材 2. 创建Widget UE5 UI系统的…...
Leetcode:622. 设计循环队列 题解【具详细】
目录 一、题目: 二、思路详解: 1.循环队列的存储定义 2.循环队列的创建 3.循环队列的判空与判断情况 (1) 循环队列的判空: (2) 循环队列的判满 4.循环队列元素的插入 5.循环队列元素的删除 6.获取队头元素 7.获取队尾元素 8.循环队列释放 三…...
ArkTS基础知识 【习题】
判断题 1.循环渲染ForEach可以从数据源中迭代获取数据,并为每个数组项创建相应的组件。 正确(True) 2. Link变量不能在组件内部进行初始化。 正确(True) 单选题 1.用哪一种装饰器修饰的struct表示该结构体具有组件化能力?(A) A. Component B. Entry C…...
是否有无限提取的代理IP?作为技术你需要知道这些
最近有互联网行业的技术小伙伴问到,有没有可以无限提取的代理IP?就是比如我一秒钟提取几万、几十万次,或者很多台机器同时调用API提取链接,这样可以吗?看到这个问题,不禁沉思起来,其实理论上是存…...
【算法萌新闯力扣】:卡牌分组
力扣热题:卡牌分组 一、开篇 今天是备战蓝桥杯的第22天。这道题触及到我好几个知识盲区,以前欠下的债这道题一并补齐,哈希表的遍历、最大公约数与最小公倍数,如果你还没掌握,这道题练起来! 二、题目链接:…...
深入解析:如何开发抖音票务小程序
当下,开发抖音票务小程序成为了吸引年轻用户群体的一种创新方式。本文将深入解析如何开发抖音票务小程序,探讨关键步骤和技术要点。 1.确定需求和功能 考虑到抖音的用户特点,可以加入与短视频相关的票务功能,如在线购票、观影记录…...
vue中 mixin用法
在Vue.js中,mixin是一种可以在多个组件之间共享Vue组件选项的灵活方式。mixin对象可以包含任何组件选项。当组件使用mixin时,所有mixin对象的选项将被“混合”到该组件的选项中。 使用mixin的一个主要优点是可以在多个组件之间重用和共享代码。这可以帮…...
Java入门基础:浅显易懂 while
文章目录 前言一、布尔表达式二、while三、语法四、示例 前言 在开发过程中不管是 while 语句还是其他语句都会经常用到布尔表达式,所以在学习 while 之前需要先明白什么是布尔表达式? 一、布尔表达式 布尔表达式只有2种结果:true / false 看…...
DNS/ICMP协议、NAT技术
目录 DNS协议DNS背景域名简介 ICMP协议ICMP功能ping命令traceroute命令 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS协议 DNS(Domain Name System,域名系统)协议&…...
React整理总结(七、Hooks)
1.Class组件的优缺点 优点 class组件可以定义自己的state,用来保存组件自己内部的状态;函数式组件不可以,因为函数每次调用都会产生新的临时变量;class组件有自己的生命周期,我们可以在对应的生命周期中完成自己的逻…...
软件测试之银行测试详解
一、金融类软件测试 举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班的话想对来说没那么多(有些银行加班也挺严重的),但业务稳定。实在是测试类岗位中的香饽饽…...
C#中的警告CS0120、CS0176、CS0183、CS0618、CS8600、CS8602、CS8604、CS8625及处理
目录 一、CS0120 二、CS0176 1.解决前 2.解决后 3.解决办法 三、CS0183 四、CS0618 五、CS8600 六、CS8602 七、CS8622 1. 解决前: 2. 解决后: 3.解决方法: 八、CS8604和CS8625 一、CS0120 严重性 代码 说明 项目 文件 行…...
CSS:浏览器设置placeholder样式 / 微信小程序设置placeholder样式
一、web 设置placeholder 设置浏览器的placeholder样式 ::-webkit-input-placeholder { /* WebKit browsers */color: #999; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */color: #999; } ::-moz-placeholder { /* Mozilla Firefox 19 */color: #999; } :-ms-input-p…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...
ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...
