C++代码字符舞-极乐净土

19 篇文章 1 订阅
本文介绍了一种使用C++创建字符动画的方法,灵感来源于抖音上的代码舞。作者通过读取ASCII文本文件,逐帧播放并在控制台上显示,实现了动画效果。代码中包含了音乐播放功能,确保音频与视频同步。动画的字符文件由图片转换而来,图片则从视频帧中提取。整个项目在Windows环境下运行。
摘要由CSDN通过智能技术生成

在抖音上看到代码舞觉得很好看,上网一搜好多语言都有实现的,但是C++的比较少。参考其他实现方法,我用C++写了一个。先看结果。

运行后会播放动画和音乐。代码如下:

#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <mmsystem.h>

using namespace std;
#define MAX_ROW 100
#define MAX_COL 100
#define MAX_FRAME 1348

//#pragma comment(lib, "winmm.lib") //这里不用加,这个程序是用Qt Creator编写的,在.pro文件中增加了LIBS +=  -lWinmm。如果其他编译器则需要这句


static char buffer[MAX_COL*MAX_ROW];    //定义一个buffer存图片
void init()
{
    //console title
    SetConsoleTitle("Code-Dance");

    // 分辨率:控制台窗口大小
    system("mode con cols=151 lines=50");

    //隐藏控制台的光标
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO info = {1, 0};
    SetConsoleCursorInfo(hout, &info);
}
void readData()
{
    FILE *fp;
    char fileName[128];
    for (int i=0; i<MAX_FRAME; i++)
    {
        sprintf(fileName,"F:/Programs/CodeDance/txtPath/ASCII-%d.txt", 5*(i+1));    //读取文件,这个是我本机的路径,里面存了很多文件,文件名的格式为ASCII-数字.txt这样的。
        fp = fopen(fileName, "r");
        if (fp == NULL)
        {
            continue;
        }
        fseek(fp, 0, SEEK_END);
        long length = ftell(fp);
        rewind(fp);
        memset(buffer, 0, MAX_COL*MAX_ROW);
        fread(buffer, 1, static_cast<size_t>(length), fp);

        fclose(fp);
        printf("%s",buffer);    //用cout<<buffer;输出也可以
        Sleep(167);     //间隔时间,是根据总时长除以图片数算的为了音频与视频对齐

        HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE);
        COORD loc;
        loc.X = 0;
        loc.Y = 0;
        SetConsoleCursorPosition(houtput, loc);
    }
}

int main()
{
    init();
    mciSendString("play ./video.mp3", NULL, 0, 0);      //play music
    readData();
    return 0;
}

代码中的video.mp3是音乐文件,为了保持一致,这个音乐文件和视频文件长度一样。

上面程序主要用来播放字符文件,播放一张清除一下屏幕,连续的播放产生字符动画的效果。于是有了这样的问题:

字符文件从哪来? --> 是从图片转换过来。我将批量的图片文件用ASCIIGenerator这个软件进行转换,并且可以指定图片大小。该软件上网可以搜到。

这些图片从哪里来? --> 是从视频中提取出来。详见Qt从视频中获取每一帧数据

有了这些准备工作后,就可以播放了。附加一句,这个是在windows下实现的。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值