用C语言写Badapple
程序思路
大概分成两部份,视频转txt和打印txt,这篇文章只讨论打印txt的部分。
接下来,我们要做的分成下面几个步骤:
- 读取txt。(先学会读取一个txt,再定位读取多个)
- 打印txt。(先试着打印一个txt,再连续打印多个)
- 控制txt打印的时间间隔,使打印变得有序。
- 最后插入音乐,程序完成。
要打印的txt及代码:
https://gitee.com/lizidehuayuan/badapple
相关的资料链接:
GCC编译器30分钟入门教程
MinGW安装教程
C语言读写文件
C语言文件操作详解
C语言fopen函数的用法,C语言打开文件详解
【C/C++】Sleep函数的用法
解决用mciSendString()函数不能播放音乐的问题
gcc链接WinMM.Lib问题
---------分割线---------
以上内容尽量自行完成,再阅读下面的代码(仅供参考)。
参考代码
1.0v
/*
* @Author: Lizi_garden
* @Date: 2021-12-29 21:25:51
* @LastEditTime: 2022-01-01 10:53:35
* @FilePath: \undefinedd:\Project\Badapple_code\code.c
*/
/*
* IDE:vscode
* 编译器:gcc
*/
#include <stdio.h> //为fgets函数提供原型
#include <stdlib.h> //为perror函数提供原型
#include <string.h> //为strcpy函数和strcat函数提供原型
#include <time.h> //为clock函数提供原型
/*
* 为添加音乐的函数提供原型
* 我使用的是gcc,要用这个命令才能通过gcc code.c -o test -lwinmm
* (ps:这个我是在编程论坛上找到的,如果不通过,还可以试试-mwindows)
* 原文链接:http://bbs.bccn.net/thread-494027-1-1.html
*/
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
//#include <unistd.h> //为exit函数提供原型(只适用于linux,相当于windows.h)
/*定义bool类型*/
#define FALSE 0
#define TURE 1
/*定义字符动画的长和宽(原分辨率为1440*1080,改为72*54)*/
#define LENGTH 80 + 1 //最后一位用于存放\0
#define WIDTH 24
/*其他必要的视频参数*/
#define FRAME_NUM 30 //帧数
#define PICTURE_NUM 6572 //文件的数量
#define INTERVEL 27 //每帧间隔的时间
int main(void)
{
mciSendString("open BadApple.mp3 alias song", NULL, 0, NULL); //打开音乐
mciSendString("play song repeat", NULL, 0, NULL); //播放音乐
char picture[LENGTH]; //存储字符画
int check; //用于存储一些函数的返回值,来判断是否执行成功
char filename[] = "out//0001.txt"; //存储文件名
char pa[] = "0001"; //文件编号
FILE *fp = NULL; //声明文件指针名并初始化
clock_t code_start, code_finish; //用于存储代码运行的时间
system("cls");
for (int i = 1; i <= PICTURE_NUM; i++)
{
code_start = clock(); //记录开始的时间
/*递增到下一个文件,具体思路将字符串分成三份,递增文件编号*/
strcpy(filename, "out//");
sprintf(pa, "%4d", i); //改变文件的编号
/*将空格转换成0*/
for (int j = 0; j < (4 - 1); j++)
pa[j] = (pa[j] == ' ') ? '0' : pa[j];
strcat(filename, pa);
strcat(filename, ".txt");
fp = fopen(filename, "rt+"); //以文本的形式打开文件,允许读和写
/*检查是否正确打开文件,错误则终止程序*/
if (NULL == fp)
{
perror("fopen"); //用于显示错误信息
//exit(1); //终止程序,表示异常退出
}
/*读取文件信息到数组并打印,方法为逐行读入并打印*/
for (int j = 1; j <= WIDTH; j++)
{
fgets(picture, LENGTH, fp); //在数组内不含有换行符
printf("\t"); //回到该行行首
fputs(picture, stdout); //打印数组,不在末尾处添加换行符
}
check = fclose(fp); //关闭文件
/*检查是否正确关闭文件,*/
if (check == FALSE)
{
perror("fclose"); //用于显示错误信息
//exit(1); //终止程序,表示异常退出
}
code_finish = clock(); //记录结束的时间
/*时间间隔*/
Sleep(INTERVEL - (code_start - code_finish));
/*实现回到开头*/
for (int j = 1; j <= WIDTH + 1; j++)
printf("\033[1A"); //回到上一行
}
mciSendString("close song", NULL, 0, NULL); //关闭音乐
getchar();
return 0;
}
/*
* 在此感谢B站UP主的分享,我是看了TA的视频才有了播放Badapple的想法
* (视频链接:https://www.bilibili.com/video/BV1Ax411N775)
* 因本人水平十分有限,这个版本有许多不当之处,欢迎大家指正。
*/
运行效果:
用C语言做了个Badapple