[开源] 字符动画库 For C – C语言实现的一个终端字符动画库

唔嘫worable 发布于 2025-11-12 149 次阅读 994 字 预计阅读时间: 5 分钟


Character Animation Library For C

仓库地址

https://github.com/worable233/Character-Animation-Library-For-C

简介

字符动画库 For C 是一个基于C语言标准库开发的轻量级终端字符动画库,专门用于在命令行界面中创建流畅的字符加载动画和对话框效果,为C语言开发者提供了简单易用的终端动画解决方案,让命令行程序拥有更丰富的视觉体验!

主要特性

✨ 核心优势

  • 🚀 超轻量级 - 仅依赖C标准库,无额外依赖
  • ⚡ 高性能 - 优化的动画渲染逻辑
  • 🔧 高度可定制 - 支持手动修改动画帧和参数
  • 🛡️  稳定可靠 - 内置空指针检查,增强程序健壮性

功能特色

🎯 已完成功能

  • ✅ 字符加载动画显示
  • ✅ 支持多种动画样式
  • ✅ 可调节帧间隔时间
  • ✅ 自定义动画总时长
  • ✅ 智能对话框输出
  • ✅ 自动清屏和光标控制
  • ✅ 空指针安全检测

技术特点

  • 🎮 动画控制 - 精确控制动画时长和帧率
  • 📝 文本处理 - 智能处理空格和标点符号
  • 🖥️ 终端兼容 - 使用ANSI转义码,兼容主流终端
  • 🔄 循环动画 - 自动循环播放动画帧序列

快速开始

1. 引入头文件

#include <stdio.h>
#include <unistd.h>

2. 声明函数和全局变量

请将以下内容添加到主函数前。

// 声明函数
void clean(void);
int loading(char *text,int times,float sleeptime);
int textbox(char *name,char *text,float sleeptime);
int loading_text(char *text,int times,float sleeptime);
// 声明全局变量
const char *strings[] = {"|", "/", "—", "\\"}; 
const int int_len = sizeof(strings) / sizeof(strings[0]);

3. 声明函数内容

请将以下内容添加到主函数后。

int loading(char *text,int times,float sleeptime) { // 加载动画函数
	if (text == NULL) { 
		return 1;
	}
	sleeptime = sleeptime * 1000000; 
	for (int i = 0; i < times; i++) { 
		clean();
		printf("\r%s %s",text, strings[i % int_len]);  
		fflush(stdout); 
		usleep(sleeptime); 
	}
	clean();
	return 0;
}
int loading_text(char *text,int times,float sleeptime) {
	if (text == NULL) {
		return 1;
	}
	sleeptime = sleeptime * 1000000;
	int TIME_plustime = 100 / times;
	int TIME_nowtime = 0;
	for (int i = 0; i < times; i++) {
		clean();
		printf("\r%s %i%%",text, TIME_nowtime);
		fflush(stdout);
		usleep(sleeptime);
		TIME_nowtime += TIME_plustime;
	}
	clean();
	return 0;
}
int textbox(char *name,char *text,float sleeptime) { // 对话框函数
	if (name == NULL || text == NULL) {
		return 1;
	}
	sleeptime = sleeptime * 1000000;
	int string_len = strlen(text);
	printf("\r%s | ",name);
	fflush(stdout);
	for(int n = 0; n < string_len; n++) {
		printf("%c",text[n]);
		fflush(stdout); 
		if (text[n] == ' ') {
			usleep(sleeptime * 1.5);
		} else {
			usleep(sleeptime);
		} 
	}
	return 0;
}
void clean(void) { // 清空当前行终端函数
	printf("\033[2K");
}

4.在您的程序中调用动画函数

// 普通加载动画
loading("提示文本内容",动画时长,帧间隔时长);

第一项传入的参数须为char*类型字符串。

第二项传入的参数须为int类型整数。

第三项传入的参数须为double类型浮点数。

// 百分比加载动画
loading_text("提示文本内容",动画时长,帧间隔时长);

第一项传入的参数须为char*类型字符串。

第二项传入的参数须为int类型整数。

第三项传入的参数须为double类型浮点数。

// 对话框输出
textbox("提示文本内容", "文本内容", 帧间隔时长);

第一项传入的参数须为char*类型字符串。

第二项传入的参数须为char*类型字符串。

第三项传入的参数须为double类型浮点数。

更新日志

v0.3 新特性

  • 💬 新增百分比进度函数 - 支持显示百分比进度效果

v0.2 新特性

  • 🎨 项目重命名 - 更改为"字符动画库 For C"
  • 💬 新增对话框函数 - 支持逐字输出的对话框效果
  • 🔒 增强安全性 - 添加空指针判断
  • 🔄 优化动画逻辑 - 支持用户自定义动画帧
  • 🧹 改进清屏 - 仅清空当前行,提升用户体验

v0.1 新建项目

  • 新建项目