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表示,它存放一个地址.该地址指向一个元素 ...
随机推荐
- 使用windows平板学习与办公的一些经历(酷比魔方i9篇)
大概是在2019年的时候,我在某平台上购买了900元的二手windows平板电脑,酷比魔方i9 首先谈谈背景.当时我手里是有个笔记本,屏幕大概15.6寸,4G+256G的,平时用的时候功率平均20几W ...
- UE4启动顺序
GameMode PlayerController Actor Level gameMode , playerController控制pawn , 激活默认相机active camera , getP ...
- QT 连接SQLIte数据库
1.新建一个qt应用程序 2.在.pro文件中添加 sql (下图,可以查看使用方法) 添加结构查看: 3.开始连接数据库 4.运行结果查看: 5.查看数据库文件: 6.使用可视化工具创建一个 ...
- 复习第一点-1.跑通一个helloworld
创建项目 导入需要的jar包 对编译出现的jar包处理 整理项目架构 编写配置文件中的内容 web.xml <?xml version="1.0" encoding=&quo ...
- dism修改easyu中10PEx64.wim文件
从easyu的iso镜像中提取出10PEx64.wim文件,新建一个空分区,比如Z: 1.获取wim映像索引信息,命令 Dism /Get-WimInfo /WimFile:10PEx64.wim,一 ...
- JDK卸载与JDK12 安装
JDK卸载与JDK12 安装 一.JDK卸载 控制面板>程序和功能>jdk程序(java 8 update 391:java SE Development Kit8 update 391) ...
- iPhone添加节假日日历地址
添加苹果节假日日历地址 手动订阅节假日: 打开"设置">"日历">"帐户">"添加帐户">&qu ...
- 均值、中值、高斯、non-local means算法详解
文章仅为个人理解,如有不妥之处欢迎指正. 写几个常见的图像去噪滤波器. 1.均值滤波器 均值滤波器是最简单的图像平滑滤波器,其3*3的模板为 1 9 [ 1 1 1 1 1 1 1 1 1 ] \fr ...
- GP232RL国产USB串口如何兼容FT232RL开发资料
GP232RL是最新加入 ftdi 系列 usb 接口集成电路设备的设备. 232r是一个 usb 到串行 uart 接口,带有可选的时钟发生器输出,以及新的 ftdichip-idTM 安全加密器特 ...
- spark structured streaming (结构化流) join 操作( 官方文档翻译)
spark 结构化流 join 连接 结构化流支持将流dataset/DataFrame与静态dataset/DataFrame,或者另一个流数据集-DataFrame连接起来.流式连接的结果是增量生 ...