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表示,它存放一个地址.该地址指向一个元素 ...
随机推荐
- perl的学习:将分句脚本split-sentences.perl转为python脚本
初识perl,只为完成分句脚本的转换.因此本文具有极强的目的性,perl的很多好用功能就不研究了,主要内容围绕分句脚本展开,部分基础知识就不再赘述. 1.仓库的地址:https://gitee.com ...
- js将json数据保存下载为json文件
const button = document.createElement('a'); button.onclick = () => { // 要保存的字符串, 需要先将数据转成字符串 cons ...
- hostPath类型的卷挂载
卷类型之hostPath hostPath类型的卷可以把宿主机节点上的文件或文件夹挂载到pod中 先来看看hostPath类型的卷如何配置: apiVersion: v1 kind: Pod meta ...
- Excel之VLOOKUP()函数的基本用法
语法: VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup]) 规则: 注意: 查找的值:内容需要完全一样 查找范围:查找范围的 ...
- 初学银河麒麟linux笔记 第三章 QT缺少的模块下载、更新软件源操作
在共享文件夹里将WINDOWS里已经编写好的QT程序编译之后,提示 Qt5: Unknown module(s) in QT: serialport 经查询,需要安装对应的模块库,写入 sudo ap ...
- shell脚本实战笔录-在PATH中查找程序
#!/bin/bashin_path(){ cmd=$1 ourpath=$2 result=1 #将默认的IFS(分隔符)为空格,这里先保留原本的给变量oldIFS,然 ...
- 推荐一个 python学习网站
kaggle python课程: https://www.kaggle.com/learn/python 知乎有个博主在专栏放了课程的中文版: https://www.zhihu.com/people ...
- android defaluthttpclient timeout 整理
android defaulthttpclient 超时无效的相关解放方式记录: With the marked solution I am still getting a UnknownHostEx ...
- sap软件功能介绍及主要功能(模块)有哪些?
SAP 成立于 1972 年,最初称为 System Analysis Program Development (Systemanalyse Programmentwicklung),后来采用缩写 S ...
- Mybatis二级缓存(2)
10.3.一级缓存的原理 10.3.3 一级缓存的测试