C语言-链表流星雨(EsayX)
刷B站看到的,做个玩玩。IDE:Visual Studio 2022。依赖EsayX图形库
1-效果
2-程序
/*
链表流星雨单文件版本
依赖EsayX图形库
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <graphics.h>
typedef struct Rain
{
int x;
int y;
char str[20];
}ElemType;
//定义节点
typedef struct LNode
{
struct LNode* next;
ElemType data;
}Node, * LinkList;
//链表函数
LinkList createList();
void push_back(LinkList list, ElemType val);
void pop_back(LinkList list);
void showAll(LinkList list);
bool empty(LinkList);
//数字雨函数
//初始化数字雨
void initRain(LinkList list, int size)
{
for (int i = 0; i < size; i++)
{
struct Rain newRain;
newRain.x = i * 15;
newRain.y = rand() % getheight();
for (int i = 0; i < 19; i++)
{
newRain.str[i] = rand() % 26 + 'A';
}
push_back(list, newRain);
}
}
//绘制数字雨
void drawRain(LinkList list)
{
LinkList curNode = list->next;
while (curNode)
{
for (int i = 0; i < 19; i++)
{
settextcolor(RGB(0, 255 - i * 13, 0));
outtextxy(curNode->data.x, curNode->data.y - i * 15, curNode->data.str[i]);
}
curNode = curNode->next;
}
}
//移动一根数字雨
void moveRain(LinkList node)
{
node->data.y++;
if (node->data.y > getheight())
{
node->data.y = 0;
}
}
typedef void(*FUN)(LinkList node);//函数指针
//移动所有数字雨
void moveAllRain(LinkList list, FUN fun)
{
LinkList curNode = list;
while (curNode)
{
fun(curNode);
curNode = curNode->next;
}
}
int main()
{
//创建一个图形窗口
initgraph(960, 640);
//初始化一个链表
LinkList list = createList();
//初始化数字雨,70根
initRain(list, 70);
BeginBatchDraw();
while (true)
{
cleardevice();
//绘制数字雨
drawRain(list);
//移动所有数字雨
moveAllRain(list, moveRain);
FlushBatchDraw();
}
EndBatchDraw();
}
//创建带头节点的链表
LinkList createList()
{
LinkList headNode = (LinkList)calloc(1, sizeof(Node));
if (!headNode)
return NULL;
return headNode;
}
//往链表中插入元素
void push_back(LinkList list, ElemType val)
{
LinkList newNode = (LinkList)calloc(1, sizeof(Node));
if (!newNode)
return;
newNode->data = val;
LinkList curNode = list;
while (curNode->next != NULL)
{
curNode = curNode->next;
}
curNode->next = newNode;
}
//删除尾部元素
void pop_back(LinkList list)
{
if (empty(list))
return;
LinkList curNode = list;
while (curNode->next->next != NULL)
{
curNode = curNode->next;
}
free(curNode->next);
curNode->next = NULL;
}
//遍历所有元素
void showAll(LinkList list)
{
LinkList curNode = list->next;
while (curNode)
{
//printf("%d ", curNode->data);
curNode = curNode->next;
}
//printf("\n");
}
//判断链表是否为空
bool empty(LinkList list)
{
return list->next == NULL;
}
C语言-链表流星雨(EsayX)的更多相关文章
- C语言 链表
原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C语言链表结构体(学习笔记)
#include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...
- C语言链表实例--玩转链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- c语言-链表VS数组
数组和链表的区别 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要 ...
- 再次复习数据结构:c语言链表的简单操作
最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少. 现在c指针感觉知道点了,也就匆忙开展数据结 ...
- [数据结构]C语言链表实现
我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们 ...
- [C语言]链表实现贪吃蛇及部分模块优化
在继上篇[C语言]贪吃蛇_结构数组实现大半年后,链表实现的版本也终于出炉了.两篇隔了这么久除了是懒癌晚期的原因外,对整个游戏流程的改进,模块的精简也花了一些时间(都是借口). 优化模块的前沿链接: · ...
- 玩转C语言链表-链表各类操作详解
链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个"头指针"变量,以head表示,它存放一个地址.该地址指向一个元素 ...
随机推荐
- vue 图片分页
<div class="activities phone"> <!-- 动态 --> <div class="activity" ...
- More exceptional c++读书笔记【附高清PDF下载】
Part1我是在读完Scott Meyers的<Effective c++>之后才读到这本书的.能够讨论特定的主题而不是将一门语言作为一个整体来看待是我理解c++的首选方式,所以Sutte ...
- VIT论文笔记
VIT An image is worth 16x16 words: transformers for image recognition at scale 将transformer首次应用在视觉任务 ...
- SVN检出未响应,版本库浏览打不开卡死。
今天遇到一个奇葩问题. 1.换了新电脑,首先SVN地址没问题.检出就未响应,不弹出输入用户名,密码. 2.发现装了讯软加密软件,后安装的SVN.(未告知管理员,对新机加密软件配置).配置完可以正常用了 ...
- error:0308010C:digital envelope routines::unsupported
Node.js v18.14.1 运行项目 node:internal/crypto/hash:71 this[kHandle] = new _Hash(algorithm, xofLen); ^ E ...
- webpack5基础用法2
webpack的基础用法2 webpack的优化方向 提升开发体验 提升打包构建速度 减少代码体积 优化代码运行性能 SourceMap 生成一个.map文件,形成一个映射, 可以通过错误找到源文件 ...
- 硬件IIC主从机中断代码注释解析
目录 硬件IIC的主从中断在582的最新EVT中已支持. 对于IIC从机中断,例程中已封装好中断处理过程,用户调用app_i2c时,初始化中需要配置回调函数. 初始化的配置如下. struct i2c ...
- leecode76. 最小覆盖子串
76. 最小覆盖子串 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: ...
- PHP二维数组根据某个元素(key)排序
/** * 二维数组根据key排序 * @param $arr * @param $arr_key * @param string $order 排序规则 * @return mixed */ fun ...
- asp.net core 全局授权管理系统简介
大家好,我最近在做一个管理系统,我希望能做出一种授权机制,通过数据库的配置,来动态管控每个登入用于的访问权限. 因为才接触core不久,了解core的授权机制还是用了些时间的. 所以总结出来,供大家分 ...