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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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