贪吃蛇(五)蛇撞墙

上节我们实现了蛇身向右移动的功能,原理就是增加一个节点,删除一个节点。
本节我们处理蛇撞墙重置的功能

实现原理

在移动函数中检查蛇头(链表尾节点)是否达到墙边的坐标,这里有四种撞墙的情况:

  1. 上墙(当行为0的时候)
  2. 下墙(当行为20的时候)
  3. 左墙(当列为0的时候)
  4. 右墙(当列为20的时候。注意我设置的是19,根据实际修改)
#include"curses.h"
#include "stdlib.h"
struct SnakeNode
{int row;int col;struct SnakeNode* next; 
};struct SnakeNode* head = NULL;
struct SnakeNode* tail = NULL;void addNode();
void mapinit();
void snakeinit()
{// free struct SnakeNode* p;while(head != NULL){p = head;head = head->next;free(p);}head = (struct SnakeNode*)malloc(sizeof(struct SnakeNode));head->row = 2;head->col = 2;head->next = NULL;tail = head;addNode();addNode();
}void addNode()
{  struct SnakeNode* node = (struct SnakeNode*)malloc(sizeof(struct SnakeNode));node->row = tail->row;node->col = tail->col + 1;node->next = NULL;tail->next = node;tail = node;
}void deleteNode()
{struct SnakeNode* p;p = head;head = head->next;free(p);
}void moveSnake()
{addNode();deleteNode();// if snake is over.if(tail->row == 0 || tail->col == 0 || tail->row >= 20 || tail->col >= 19){snakeinit();}
}void cursesinit()
{initscr();keypad(stdscr,1);
}int hasSnake(int row,int col)
{struct SnakeNode* p = head;while(p!=NULL){if(row == p->row && col == p->col)return 1;p = p->next;}return 0; 
}void mapinit()
{int row;int col;move(0,0);for(row = 0;row < 20;row++){// oneif(row == 0 || row == 19){for(col = 0;col < 19;col++)printw("--");}// twoelse{for(col = 0;col < 20;col++){if(col == 0 || col == 19 ) printw("|");else if(hasSnake(row,col)){printw("[]");}else{printw("  "); }}}printw("\n");}// game startprintw("By hongzhe\n");
}int main()
{int key;cursesinit();snakeinit();mapinit();while(1){key = getch();if(key == KEY_RIGHT){moveSnake();mapinit(); // fresh map	}}getch();  endwin();return 0;
}

学习打卡

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排障启示录-终端无法接入网络

问题现象&#xff1a;终端连接无线提示无法接入 可能故障方向&#xff1a; 1、策略限制终端接入 2、接入过程不完整 3、存在反制 4、距离较远导致无法接入 信息收集&#xff1a; 全部终端无法接入&#xff1a; 从AP后台打印wifilog或者空口抓包&#xff0c;查看终端从接…

linux怎么做定时执行命令

在Linux中&#xff0c;可以使用cron命令来定时执行命令。cron是一个在指定时间自动执行命令或脚本的守护进程。以下是在Linux中设置定时执行命令的步骤&#xff1a; 1.打开终端&#xff0c;输入以下命令以编辑crontab文件&#xff1a; crontab -e 2.在打开的编辑器中&#xff0…

随笔:集成学习:关于随机森林,梯度提升机的东拉西扯

1.集成学习 这里不会描述算法过程。 当我们有许多学习器对同一个任务做出判断&#xff0c;他们预测的概率可能各不相同&#xff0c;比如预测一个男生(小徐)会不会喜欢另一个女生(小雪)&#xff0c;支持向量机算出来小徐爱上小雪的概率是0.8&#xff0c;朴素贝叶斯认为是0.3&a…

qt线程池子线程辅助类传信号

import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton from PyQt5.QtCore import QObject, QRunnable, pyqtSignal, QThreadPool# 辅助类&#xff0c;用于定义信号 class WorkerSignals(QObject):print(pass signal)finished pyqtSignal(bool) # …

使用Docker-镜像命令

镜像名称一般分两部分组成:[repository]:[tag] 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 案例一&#xff1a;从DockerHub中拉取一个nginx镜像并查看 1.1. 首先去镜像仓库搜索nginx镜像&#xff0c;比如DockerHub 点击nginx 复制拉取命令 1.2.…

MySQL中替换字符串中的指定部分之REPLACE函数

REPLACE函数是用来替换字符串中的指定部分内容的。在本文中&#xff0c;将介绍如何在MySQL中使用REPLACE函数进行字符串替换 REPLACE函数的语法&#xff1a; REPLACE(str, search_str, replace_str) 其中&#xff0c;str是要进行替换操作的字符串&#xff0c;search_str是要搜…

使用Mosquitto/python3进行MQTT连接

一、简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议&#xff0c;为此&#xff0c;它需要一个消息中间件。 …

【CMake保姆级教程】制作动静态链接库、指定动静态库输出路径

文章目录 前言一、动静态链接库的介绍1.1 动态链接库 (DLL)1.2 静态链接库 (LIB) 二、制作静态库三、制作动态库四、指定动静态库输出路径4.1 方式1 - 适用于动态库4.2 方式2 - 都适用 总结 前言 在软件开发中&#xff0c;我们经常听到动态链接库&#xff08;Dynamic Link Lib…

[LitCTF 2023]PHP是世界上最好的语言!!

[LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; wp 进入页面&#xff0c;发现左边有输入框&#xff0c;下面有 RUN CODE 字样&#xff0c;估计是可以执行命令的。 执行 PHP 代码测试 <?php print(1); ?>将 PHP 一句话木马写入文件 为了蚁剑能连上&am…

全国30米分辨率逐年最大NDVI数据集

全国30米分辨率逐年最大NDVI数据集 中国30m逐年NDVI最大值数据集是基于Google Earth Engine&#xff08;GEE&#xff09;遥感云计算平台&#xff0c;利用美国陆地卫星Landsat 5/7/8/9遥感影像计算的1986年以来的逐年度NDVI最大值数据集。计算过程中对每年度全年所有的Landsat5/…

深度学习在训练什么,什么是模型

深度学习是机器学习的一个分支&#xff0c;它主要通过使用称为神经网络的复杂结构来学习数据的表征。在深度学习中&#xff0c;"训练"和"模型"是两个核心概念。 训练 在深度学习中&#xff0c;"训练"是指用数据来训练一个神经网络。这个过程涉…

【C语言】6-5 判断回文字符串 分数 20

6-5 判断回文字符串 分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写函数&#xff0c;判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。 函数接口定义&#xff1a; bool palindr…

智能算力进阶C位,揭秘人工智能产业背后的“冰山一角”

作者 | 曾响铃 文 | 响铃说 前几年&#xff0c;在IDC领域&#xff0c;市场谈及最多的还是数据中心&#xff0c;随着人工智能产业的成熟&#xff0c;特别是今年以来大模型的爆发&#xff0c;智算中心逐步替代了数据中心进入大众视野&#xff0c;成为市场热议的关键词&#xff…

hbase用shell命令新建表报错ERROR: KeeperErrorCode = NoNode for /hbase/master

或者HMster开启后几秒消失问题解决 报错如图&#xff1a; 首先jps命令查看当前运行的内容有没有HMaster,如果没有&#xff0c;开启一下hbase,稍微等一会儿&#xff0c;再看一下HMaster,如果仍和下图一样没有&#xff0c;就基本找到问题了 本人问题原因&#xff1a;hbase-site…

redis 从0到1完整学习 (四):字符串 SDS 数据结构

文章目录 1. 引言2. redis 源码下载3. 字符串数据结构4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;redis 常用命令》 《redis…

【每日一题】美丽塔 II

Tag 【单调栈】【数组】【2023-12-21】 题目来源 2866. 美丽塔 II 题目解读 题目意思相对明确&#xff0c;所谓的美丽塔数组就是山状数组&#xff0c;即有一个高度为 maxHeight[i] 的山峰&#xff0c;山峰两侧的高度要小于 maxHeight[i] 并且小于各自的允许高度。需要找出满…

从一个复杂的泛型参数的函数签名深入理解typescript关于泛型的类型推断

以下是nuxt3中useFetch的函数签名&#xff0c;看起来很长有点乱对不对&#xff0c;但这还是我优化格式后的结果&#xff0c;不然更难看&#xff08;原始的代码是在同一行里显示&#xff09;&#xff0c;泛型参数部分看红色的左右尖括号里的部分&#xff08;各个泛型参数用红色的…

Simulink仿真中Sine Wave产生的正弦波形不规则,怎么解决

在使用simulink仿真时&#xff0c;使用Sine Wave模块产生的正弦波形不是正弦的&#xff0c;如下所示&#xff1a; 这个是由于simulink仿真中自动计算步长很长的原因导致的&#xff0c;此时需要将自动的步长更改&#xff0c;操作步骤如下所示&#xff1a; 1.点击设置按钮&#…

Unresolved plugin: ‘org.apache.maven.plugins‘解决报错

新建springboot项目报Unresolved plugin: ‘org.apache.maven.plugins:maven-surefire-plugin:3.1.2’ 缺什么插件 引入什么插件的依赖就行 <dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifact…

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 1

本系列将分成三个部分&#xff0c;您将学习如何使用 Helm 在 Kubernetes 上集成 Prometheus 和 Grafana&#xff0c;以及如何在 Grafana 上创建一个简单的控制面板。Prometheus 和 Grafana 是 Kubernetes 最受欢迎的两种开源监控工具。学习如何使用 Helm 集成这两个工具&#x…