贪吃蛇(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…...
【反蒸馏实战 14】BI工程师:从报表开发者到数据架构师@BI工程师反蒸馏进化论(附 Python/SQL 完整代码)
摘要:2026年Agentic BI全面爆发,业务人员借助AI问数工具3分钟即可完成传统BI工程师半天的工作,报表开发、SQL取数等基础岗位需求同比下降26%,但具备数据架构设计、数据治理能力的BI工程师薪资高达18.2K/月(较纯报表工程师溢价30%)。本文基于真实企业场景,通过3个完整实战…...
AI Agent 记忆系统设计 2026:从无状态到有记忆的工程实践
没有记忆的 Agent 就像一个每天醒来都失忆的人——能做事,但永远无法积累经验。 一、为什么 Agent 需要记忆当前大多数 AI Agent 的根本局限在于:它们是无状态的。每次对话结束,Agent 就"遗忘"了一切。下次对话,一切从头…...
别再手动登录了!用VBS脚本自动打开Chrome并填写表单(附完整代码)
解放双手:用VBS脚本实现Chrome自动化表单填写全攻略 每次打开浏览器、输入网址、填写账号密码、点击登录...这些重复性操作是否让你感到厌倦?对于测试工程师、运维人员或经常需要处理批量表单的行政人员来说,这类机械操作不仅耗时耗力&#x…...
告别命令行恐惧:用Portainer在Ubuntu 22.04上图形化管理Docker容器
告别命令行恐惧:用Portainer在Ubuntu 22.04上图形化管理Docker容器 对于刚接触Docker的新手来说,命令行界面往往是一道难以逾越的门槛。每次操作都需要记忆复杂的命令和参数,稍有不慎就会出错。而Portainer的出现,彻底改变了这一局…...
EM菌在水产养殖中的作用与优质产品推荐
EM菌在水产养殖中的作用抑制有害菌:通过竞争性占位和代谢产物抑制弧菌、大肠杆菌等病原微生物繁殖。分解有机质:加速残饵、粪便的降解,减少底部淤泥堆积,降低硫化氢和氨氮浓度。稳定水质:调节水体pH值,促进…...
C# 14原生AOT编译Dify客户端全链路优化(成本控制黄金公式首次公开)
第一章:C# 14原生AOT编译Dify客户端全链路优化概览C# 14 引入的原生 AOT(Ahead-of-Time)编译能力,为构建高性能、低延迟、零运行时依赖的 Dify 客户端提供了全新路径。与传统 JIT 编译相比,AOT 可将 C# 代码直接编译为…...
Loom虚拟线程响应式改造失败率高达63%?这4个关键配置错误你中了几个?
第一章:Loom虚拟线程响应式改造失败率高达63%?这4个关键配置错误你中了几个?Loom 虚拟线程(Virtual Threads)在 Spring Boot 3.2 和 Project Reactor 2023.0.0 中原生支持响应式编程模型,但大量团队在迁移过…...
工业现场设备的监控系统(有完整资料)
资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T1532310M设计简介:本设计是工业现场设备的监控系统,主要实现以下功能:通过温湿度传感器检测温湿度,湿度过高…...
告别CasADi的慢速:用ACADOS在Python里10倍速搞定移动机器人MPC(附避坑配置)
10倍性能飞跃:用ACADOS重构移动机器人MPC控制栈实战指南 当全向移动机器人需要在动态环境中执行毫米级精度的轨迹跟踪时,20毫秒的求解延迟足以让整个系统失控。这正是许多工程师从CasADi转向ACADOS的关键转折点——我们不再满足于"能用"的解决…...
