(C语言贪吃蛇)14.用绝对值方式解决不合理的走位
目录
前言
解决方式
运行效果
总结
前言
我们上节实现了贪吃蛇四方向走位,但是出现了一些不合理的走位,比如说身体节点和头节点重合等等,本节我们便来解决这个问题。
我们希望贪吃蛇撞到自身时游戏会重新开始,并且贪吃蛇的运动方向不能与上一秒的运动方向相反,即贪吃蛇的身体节点不能重合。
解决方式
对于我们上节宏定义的四个方向需要改变其值,为了更好的以绝对值的方式判断方向。
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
修改后:
#define UP 1
#define DOWN -1
#define LEFT 2
#define RIGHT -2
我们这样修改的目的是:之前我们改变方向的时候是通过change()函数,只要我们有按键被按下的时候就改变他的方向,现在我们封装一个函数turn()来判断不合理走位。
void turn()
{int direction;if(dir != abs(dir)){dir = direction;}
}
这个函数用来判断贪吃蛇的走位是否合理,如果按下的按键方向和之前运动的方向相反,那么就不执行,那么我们就解决了贪吃蛇的一个不合理走位了。
void turn(int direction)
{if(abs(dir) != abs(direction)){dir = direction;}
}void* changeDir()
{while (1){key = getch();switch (key){case 0402:turn(DOWN);break;case 0403:turn(UP);break;case 0404:turn(LEFT);break;case 0405:turn(RIGHT);break;}}
}
该文件默认名称为snake13.c
打开终端运行以下指令编译该文件
“gcc snake13.c -lcurses”
系统默认生成一个名为“a.out”的可执行文件,输入以下指令运行该文件
"./a.out"
运行效果
打开终端运行该程序,可以看出贪吃蛇已经正常运行,不会出现不合理的走位。
在Windows环境中可能会出现乱码,因为上下左右键作为相应键会返回出一些值出现在屏幕上导致乱码,我们只需要加上ncurses库里自带的函数即可。
(出现问题的友友这样修改就行了)
void initNcurse()
{initscr();keypad(stdscr,1);noecho();
}

此时我们的贪吃蛇就不会出现不合理的走位了!
总结
我们本节解决了贪吃蛇不合理走位的问题,通过宏定义改变数值然后封装函数解决问题。
相关文章:
(C语言贪吃蛇)14.用绝对值方式解决不合理的走位
目录 前言 解决方式 运行效果 总结 前言 我们上节实现了贪吃蛇四方向走位,但是出现了一些不合理的走位,比如说身体节点和头节点重合等等,本节我们便来解决这个问题。 我们希望贪吃蛇撞到自身时游戏会重新开始,并且贪吃蛇的运动方…...
[深度学习]基于YOLO高质量项目源码+模型+GUI界面汇总
以下项目全部是本人亲自编写代码,项目汇总如下: 序号项目名称下载地址1基于yolov8的辣椒缺陷检测系统python源码onnx模型评估指标曲线精美GUI界面.zip点我下载2基于yolov8的海上红外目标系统python源码onnx模型评估指标曲线精美GUI界面.zip点我下载3基于…...
仕考网:公务员国考有三不限岗位吗?
国家公务员考试中的“三不限”岗位,即不限制专业背景、政治面貌、基层工作经验的职位。在国考中,是有的但是数量比较少。 这些岗位主要集中在省级及以下单位,以民航空警和铁路公安为主。其中,有一半的职位是面向四项目人员&#…...
RabbitMq生产者可靠性
基本概念: RabbitMQ生产者可靠性主要涉及确保消息能够可靠地发送到RabbitMQ服务器,并且在出现故障时能够进行适当的处理。 消息确认机制(Publisher Confirms): 启用 Publisher Confirms:生产者在发送消息之…...
Linux Debian12使用Podman安装bwapp靶场环境
一、bwapp简介 bWAPP(buggy Web Application)是一个开源的、故意设计有漏洞的Web应用程序,旨在帮助安全爱好者、开发人员和学生发现和防止Web漏洞。它包含了超过100种不同的漏洞,涵盖了所有主要的已知Web漏洞。 二、bwapp下载 …...
小白快速上手 Docker 02 | Docker 容器生命周期
容器生命周期 下图显示了容器生命周期的简化状态。 CreatedRunningPausedStoppedDeleted 现在让我们逐一讨论容器生命周期的每个状态: 创建状态(Created) 这是容器生命周期的第一个状态,在这个阶段,容器被创建但…...
深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式
背景 现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在,只需要复制到指定的位置即可。 sentinel是独立进程,有对应的脚本来执行。 基于之前的redis 一主二从的架构,我们继续启动3个sentinel进程。 哨兵模式的…...
STM32重启源深度解析
文章目录 STM32重启源深度解析一、STM32重启概述二、硬件层面的重启源1、电源异常电压不稳定:电源供电不足: 2、复位电路故障复位引脚异常:复位电路设计不合理: 3、外部干扰电磁干扰:静电干扰: 三、软件层面…...
windows配置C++编译环境和VScode C++配置(保姆级教程)
1.安装MinGW-w64 MinGW-w64是一个开源的编译器套件,适用于Windows平台,支持32位和64位应用程序的开发。它包含了GCC编译器、GDB调试器以及其他必要的工具,是C开发者在Windows环境下进行开发的重要工具。 我找到了一个下载比较快的链接&#…...
【微信小程序前端开发】入门Day03 —— 页面导航、事件、生命周期、WXS 脚本及自定义组件
1. 页面导航 导航方式 声明式导航:使用<navigator>组件实现页面跳转。 <!-- 导航到tabBar页面 --> <navigator url"/pages/message/message" open-type"switchTab">导航到消息页面</navigator><!-- 导航到非tabBar页…...
【51单片机】点亮LED之经典流水灯
开发环境 开发板:普中51-单核-A2单片机:STC89C52RC(双列直插40引脚 DIP40)Keil uVision5 v9.61 最新版破解方法自行百度,相关文档和视频资料很多,我自己将这一操作记录下来当做博客发布,CSDN以…...
深度学习数据增强的常用方法
以下是在深度学习中经常使用的图像增强的方法 目录 前言 1、加噪声 2、调整亮度 3、cutout 4、旋转 5、对比度增强 6、仿射变化扩充图像 7、HSV数据增强 8、错切变化扩充图像 9、平移扩充图像,根图像移动的像素距离可自行调整,具体方法如下注释所示 10、…...
影院管理新篇章:小徐的Spring Boot应用
第三章 系统分析 整个系统的功能模块主要是对各个项目元素组合、分解和更换做出对应的单元,最后在根据各个系统模块来做出一个简单的原则,系统的整体设计是根据用户的需求来进行设计的。为了更好的服务于用户要从小徐影城管理系统的设计与实现方面上做出…...
【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)
目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点: 伪元素补充文本溢出属性转换 没有基础的朋友ÿ…...
java中Files和File对象详情和区别比较
Files 和 File 是 Java 中用于文件处理的两个不同类,分别属于 java.nio.file 和 java.io 包,它们的设计思路和用途有所不同。以下是它们的详细区别: 1. File 对象 File 是 Java 中最早用于处理文件和目录的类,它来自 java.io 包&…...
Unity3D PostLateUpdate为何突然占用大量时间详解
在Unity3D中,直接名为PostLateUpdate的函数并不是Unity标准API中的一部分。然而,这个术语可能指的是在LateUpdate之后执行的某些自定义逻辑或Unity内部机制中的某种后续处理。当提到PostLateUpdate或LateUpdate突然占用大量时间时,我们需要考…...
如何快速熟悉项目
背景 最近新入职,对项目很不熟悉,也不能全部依赖别人(别人也不会全心全意去帮你),你大部分还是只能靠自己。材料就是:文档,代码,开发环境。 但是文档,代码,都…...
Spring Boot实现新闻个性化推荐
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
优化后的版本
docker_operations.sh #!/bin/bash# all definition NETWORK_NAME"net-1" VOLUME_MOUNT"-v /home/norten/Public/tools:/mnt" # 容器内部挂载到主机的路径 SCRIPT_ROUTE"/mnt" # container_run_medium.sh所在的路径 IMAGE_NAME"ubuntu&quo…...
【Linux系统编程】第二十七弹---文件描述符与重定向:fd奥秘、dup2应用与Shell重定向实战
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、文件描述符fd 1.1、0 & 1 & 2 1.2、文件描述符的分配规则 2、重定向 3、使用 dup2 系统调用 3.1、> 输出…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

