自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 linux、c语言贪吃蛇项目(十一)——找死篇

if(tail->hang < 0||tail->hang == 20||tail->lie == 0||tail->lie == 20)//撞墙找死的边界值。要想蛇撞墙死,我们可以设置边界值,当我们的蛇头部的某一行或者某一列刚好等于游戏界面的边界值时,我们就直接初始化游戏,并且删除内存,用free来释放空间。if(p->hang == tail->hang && p->lie == tail->lie ){ // 遍历蛇头是否撞到了自己。= NULL){ //判断蛇是否为空,如果有数据就释放内存。

2024-06-16 02:52:56 237

原创 linux、c语言贪吃蛇项目(十)——食物篇

当我们蛇能够实现风骚走位之后,我们就要开始设置食物,我们将食物用 “##” 这个符号来表示, 并且我们要知道,当我们食物与蛇的头部重合时,也就是食物被蛇吃掉时,“##”符号被删除,而蛇身要加长一节。通过上面的代码慢慢的贪吃蛇就有点像是在玩游戏的感觉了,好了,今天的内容就到这里了,如果又不懂的可以关注一手,私信问我,或者可以发码原给你们参考学习。if(setFood(tail->hang,tail->lie)){ //先判断蛇头部是否与设置的随机食物是否重合。//引用rand ,随机生成食物的坐标。

2024-06-16 02:30:58 787

原创 linux、c语言贪吃蛇项目(九)——蛇身风骚走位(完)

上一章最后,我们通过打印数值获取到了按键的信息,但是在实际应用中,我们不需要打印数值,而是执行上下左右的命令,所以我们在addnode()函数和changeDir()里面修改来执行具体操作:在头部定义全局变量:int dir;

2024-06-12 17:58:47 156

原创 linux、c语言贪吃蛇项目(八)——蛇身风骚走位之线程

蛇要想实现风骚走位,肯定是不能一直往一个方向一直前行的,需要配合我们的键盘,实现上下左右的移动,这就需要我们实现既要改变键盘的方向,同时也要进行函数界面的刷新,当两个循环构建在一起时,常规是不能一起进行的,所以我们需要借助线程来帮我们解决这个困难。运行上面的代码,我们就可以实现func1和func2两个函数 的循环,这就是线程的简单应用。当我们按下按键,最底部的数组会做出反应,代表着我们系统已经接收到了 键盘的指令。

2024-06-12 17:47:52 194

原创 linux、c语言贪吃蛇项目(七)——蛇身风骚走位之一直向右

在贪吃蛇游戏中,让蛇一直向右移动,听起来似乎是一件很简单的事情,但背后却蕴含了一系列有趣而复杂的编程逻辑。在initSnake函数里面加入一个判断语句,在重新构建蛇身时, 判断head里面是否为空,如果是空的,直接进行后面的代码,若是重新复活的,里面的head肯定不为空,则去使用free去释放内存,其实很好理解,大家可以捋一捋其中的关系。看代码可以知道,我们只需要在蛇移动函数里面加一个判断语句就可以实现,当蛇头或者蛇尾(取决于你自己的设置)刚搞到达边界时,我们就直接重新画一个蛇身,回到起始位置。

2024-06-12 17:25:07 297

原创 linux、c语言贪吃蛇项目(六)——蛇身向右移动

在main函数中我又重新调用了Gamepic()函数,原因是因为如果不重新调用刷新游戏界面,可能代码已经运行了,但是却还是没有显示变化,所以需要调用Gamepic()刷新游戏界面,大家可以尝试一下将Gamepic注释掉,验证一下。从上图可以看到,我们的蛇身虽然向右移动了,但是我们移动的图在下面,我们更倾向于向右移动后的图将之前的图覆盖,产生这样的原因是什么呢?当蛇向右移动一个单位的时候,头部要加一个身子,尾部要减少一个身子,循环遍历就能实现蛇身向右移动了。

2024-06-11 18:54:24 293

原创 linux、c语言贪吃蛇项目(五)——引用struct拉长蛇身

上一篇文章提到,怎么将蛇身给拉长,我们采用的是循环加判断的方式,如果坐标刚好等于我们扫描到的坐标,我们就将这个坐标处的值复制为【】从而实现拉长蛇身的目的。由于我们就是引用了一次addnode()函数,结果就是我们得到了两个【】【】蛇身, 如果我们需要五个蛇身,就引用四次就好,后面的问题就可以直接转换成函数的引用,就不会像之前那样需要几个蛇身就struct Snake去定义几个了,实在太土,好了今天就到这里,一起加油吧~同时将之前的 p = &snake1;

2024-06-11 18:08:10 220

原创 linux、c语言贪吃蛇项目(四)——蛇身拉长

这里可能就有人要问了,为什么要这么定义,首先蛇肯定是在一条水平线上,或者是在一条竖线上,总不可能开始就给他设置成歪歪扭扭的,当然也不是不可以,法律允许,但不推荐,不太美观。上一篇文章提到,假设蛇的头在{2,2}处,我们就定行动列,将蛇的坐标定位{2,2}、{2,3}、{2,4}这三个点,问题就是我们怎么将三段蛇身连接起来?那一点也不美观,我们是专业人员,就得用专业的办法。上一个文章提到了怎么将蛇身设置出来,这一篇文章我们来讲一下怎么将蛇身拉长,毕竟蛇身就一个【】也不是那么的好看,一点蛇样也没有。

2024-06-09 22:45:52 276

原创 linux、c语言贪吃蛇项目(三)——蛇身配置

根据上一篇文章提到的,我们配置好了地图,但是我们在地图中,空白区域都是由空格组成,所以我们需要用到一串代码来将图中的空格替换掉。参考一下下面的代码,我在下面更改的部分标红。通过这样一样也可以得到结果,下一节我们用结构体和指针将蛇身【】拉长,感兴趣的可以关注一手,好了就这就是今天的内容。经过前面的环境配置和地图配置,接下来我们配置游戏的主角,配置蛇身我们需要用到结构体的内容。这就蛇复活的初始位置,当然我们可以将。其中用hang和lie来表示蛇的坐标。

2024-06-09 22:28:11 761

原创 linux、c语言贪吃蛇项目(二)——地图配置

这个很简单,下面是代码,有点基础的 人都能看懂,全部用的printw函数,简单的输出~

2024-06-09 20:45:55 282

原创 linux、c语言贪吃蛇项目(一)——环境配置

虽然c语言也可以直接使用printf将项目界面框打印出来,但是我们使用printf结合scanf输入的话,需要没按一次键就需要按一次回车才能输出结果,这样就没有 游戏体验感,使用我们用curses来操作一下,当然也可以用c图形库gtk,c++的QT,嵌入式上的Android系统等等,我们这里主要用到curse。#include // 需要包含curses的头文件。//内部定义函数,获取键盘上的上下左右键。endwin()可能会报错。

2024-06-09 19:21:56 390 1

原创 windows下的摄像头如何连接到linux中去?

首先我们打开linux, 点击虚拟机->设置->usb控制器->选择3.0(有的可能是3.1),然后点确定。首先打开linux的一个编辑器,输入如下代码,找到dev,dev中含有所有的设备名称。我关掉连接后,重新输入ls查看目录,发现找不到video了,其实很好解决~然后点击虚拟机->可移动设备->usb2.0->连接即可。显示打开摄像头成功就表示可以了,好了今天就到这里~~~先将目录换到你项目存放的目录cd / .....完成了上面的步骤之后,我们来验证一下。

2024-06-08 17:35:48 171

原创 ai人脸识别打卡机(一)

/我们的外设摄像头是连接在windows上的,所以我们需要自己将。如果你想安装完整的构建工具集合,你可以安装`build-essential`包,它包括g++和其他一些常用的编译工具(如gcc、make等)//自己去建立连接,因为我们项目是在ubuntu上进行的,但是。#include "opencv2/opencv.hpp" //这个头文件可以参考opencv官网的 用法。//打开摄像头,默认的是0,当然可能有多个摄像头,但是需要。cout

2024-06-08 17:08:25 197

原创 链表从指定节点后插入与指定节点前插入

在C语言中,链表是一种常见的数据结构,用于存储一系列的元素,这些元素在内存中并不一定是连续存储的。在链表中从指定节点后插入新节点是链表操作中的基本操作之一。前面提到了链表与数组的区别,接下来在这串代码的基础上了解,在链表指定节点前后插入的区别。if(p->data == data){ //首先判断是否是在表头插入,如果是直接替换表头。= NULL){//判断最后一个节点是否为空,空的就结束循环。这是一段前插入的代码,前插入可以分为两中情况,在表头插入,替代表头成为表头。二、链表从指定节点前插入。

2024-06-06 22:14:59 741 1

原创 链表是个好东西

通俗的来讲,数组就是一个瓶子里面放了很多个弹珠,但是你要将底部的弹珠取出来,得把上面的弹珠全部倒出来,这是一个很麻烦的操作过程,所以当元素进行频繁插入和删除操作时,就得用链表,如果说你只是要对元素进行频繁访问和查询,那么就用数组,毕竟瓶子里面有什么东西我还是可以直接看到的~~~一、链表与数组的区别。

2024-06-06 19:23:17 344

原创 打印结构体指针的地址时为什么不能直接打印,而需要用void *强转?

这是因为 `%p` 被设计用来打印通用指针类型,即 `void *`,而不是特定类型的指针。因此,当你尝试打印一个指针的地址时,最佳实践是首先将指针转换为 `void *` 类型,以确保与 `%p` 格式说明符的兼容性。如果你不进行 `(void *)` 的强制类型转换,某些编译器可能会发出警告,因为直接传递 `ptr` 可能不会与 `%p` 的预期参数类型完全匹配。简而言之,使用 `void *` 强转是为了确保与 `printf` 的 `%p` 格式说明符的类型安全和兼容性,遵循C语言标准的最佳实践。

2024-06-06 19:04:52 197

linux、c语言贪吃蛇项目代码文件

贪吃蛇代码

2024-06-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除