C/C++在Win32控制台播放Bad Apple

前言

效果展示
这里首先你需要准备一些文件,将一个Bad Apple的视频分别转换成txt和mp3格式(mp3用来作为背景音乐)
我将txt文件放到exe文件目录下的子目录files里了
转换方法可以用Adobe,这里不做详细介绍,你可以下载我已经准备好的文件,在文章末尾会给出连接

代码

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

#pragma comment (lib,"Winmm.lib") //加载windows播放音乐的库

#define MAX_ROW 66
#define MAX_COL 150
#define MAX_FRAME 13148

char map[MAX_FRAME][MAX_ROW][MAX_COL+1];

void init(){
    SetConsoleTitle("BadApple"); //控制台标题

    system("mode con cols=151 lines=68");

    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++) {
        //每次读取一个文件
        int row = 0;
        sprintf(fileName, "files/ASCII-badApple60fps%05d.txt", i); //生成一个文件名
        fp = fopen(fileName, "r");
        if (fp == NULL) {
            exit(1);
        }

        //当文件读完时结束循环
        while (!feof(fp)) {
            fgets(map[i][row],200,fp);
            map[i][row][MAX_COL] = '\0'; //取消每行最后的回车符
            row++;
        }
        fclose(fp);
    }
}

//播放动画函数
void play() {

    system("cls"); //清屏
    for (int i = 0; i < MAX_FRAME; i++) {
        for (int j = 0; j < MAX_ROW; j++) {
            //如果用printf()的话由于之前我们取消了换行符,所以要在此处加上
            puts(map[i][j]); //不断打印到每一行
        }
        Sleep(2); //休眠2毫秒

        //把光标引到最前方
        HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE); //控制台
        
        COORD loc; //引入结构体,并定义xy初始坐标
        loc.X = 0;
        loc.Y = 0;
        SetConsoleCursorPosition(houtput, loc);
    }


}

int main(void) {
    init(); //初始化

    //将文本文件加载到计算机内存
    readData();
    

    //开始播放
    while (1) {
        //播放背景音乐
        mciSendString("play bg.mp3", 0, 0, 0);
        play();
    }

    return 0;
}

文件

百度网盘链接:https://pan.baidu.com/s/1i8UEQsw5UPoLX7S41Xk9Hw
提取码:8848

posted @   CairBin  阅读(466)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示