用C语言写Badapple

用C语言写Badapple

程序思路

大概分成两部份,视频转txt和打印txt,这篇文章只讨论打印txt的部分。

接下来,我们要做的分成下面几个步骤:

  1. 读取txt。(先学会读取一个txt,再定位读取多个)
  2. 打印txt。(先试着打印一个txt,再连续打印多个)
  3. 控制txt打印的时间间隔,使打印变得有序。
  4. 最后插入音乐,程序完成。

要打印的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

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值