刷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;
}

最新文章

  1. 谈对象 MVC 和 多端
  2. cordova android platform cordova build 遇到的问题
  3. 引用计数gc机制使用不当导致内存泄漏
  4. Zookeeper未授权访问
  5. Linux使用本地iso作为yum源
  6. UVa 11489 (博弈) Integer Game
  7. Java程序员也应该知道的系统知识系列之(网卡,cpu,内存,硬盘,虚拟化)
  8. 0721JS
  9. 多线程中join()的用法
  10. JavaOOP-集合框架
  11. 公司间INVOICE的库存设置
  12. epoll的本质
  13. Windows 环境下进行的jenkins持续集成
  14. 使用Github添加标签
  15. 架构之路:nginx与IIS服务器搭建集群实现负载均衡(三)
  16. Go Example--方法
  17. ASP.NET MVC IActionFilter IResultFilter IExceptionFilter/HandleError
  18. 详解Tensorflow数据读取有三种方式(next_batch)
  19. 7 款灵巧实用的 CSS3/jQuery 工具
  20. ReactNative Ios报出 &#39;React/RCTBundleURLProvider.h&#39; file not found错误

热门文章

  1. Git 知识
  2. 浅谈zookeeper
  3. hostPath类型的卷挂载
  4. 常用的基础方法,对象转数组,phpcurl请求
  5. C++ 手动实现队列(queue) (课后作业版)
  6. Python爬取三国演义章节标题和内容(bs4爬取,解决中文乱码)
  7. 关于oracle中scott用户恢复到初始状态的步骤,和一些问题解决方法。
  8. go1.8-泛型
  9. Markdown的在线使用
  10. java-文件IO常用操作对比