使用C++语言编写,如果想改成C语言,手动以GetProcAddress的方式来调用相关函数即可。

 #include <windows.h>
#include <mmsystem.h>
#include <stdio.h> #pragma comment(lib, "winmm.lib") #define DATAFILE "BADAPPLE.txt" #define FRAME_WIDTH 80
#define FRAME_HEIGHT 32 #define DATA_TOKEN_SIZE ( 5 + 1 ) // $0000\n
#define DATA_PITCH_SIZE ( FRAME_WIDTH + 1 ) // ###...\n
#define DATA_FRAME_SIZE ( DATA_TOKEN_SIZE + ( DATA_PITCH_SIZE * FRAME_HEIGHT ) ) #define FRAME_COUNT 3271 #define VIDEO_TIME 218000.0f // 3:38 (218000ms) void main(void)
{
HANDLE hOutput; hOutput = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_CURSOR_INFO coc = { , FALSE };
COORD co = { FRAME_WIDTH, FRAME_HEIGHT };
SMALL_RECT rc = { , , FRAME_WIDTH - , FRAME_HEIGHT - }; SetConsoleCursorInfo( hOutput, &coc );
SetConsoleScreenBufferSize( hOutput, co );
SetConsoleWindowInfo( hOutput, TRUE, &rc ); SetConsoleTitle( "Bad Apple By Crsky @2016" ); FILE *fp;
int size;
char *buf;
char *cur;
int start; buf = NULL; fp = fopen( DATAFILE, "rb" ); if ( !fp )
{
printf( "%s not found.\n", DATAFILE );
goto err;
} size = DATA_FRAME_SIZE * FRAME_COUNT; buf = new char[ size ]; if ( fread( buf, size - , , fp ) != )
{
printf( "Failed to read in data file.\n" );
goto err;
} buf[ size - ] = '\0'; fclose( fp ); mciSendString( "open BADAPPLE.wma alias BGM", NULL, , NULL );
mciSendString( "play BGM", NULL, , NULL ); start = GetTickCount(); while ( )
{
int time;
float percen;
int frame;
COORD xy = { , };
DWORD written; if ( GetKeyState( VK_SPACE ) )
{
printf( "Stop play.\n" );
break;
} time = GetTickCount();
percen = ( time - start ) / VIDEO_TIME; if ( percen > )
{
printf( "End of play.\n" );
break;
} frame = percen * FRAME_COUNT;
cur = &buf[ ( DATA_FRAME_SIZE * frame ) + DATA_TOKEN_SIZE ]; for ( ; xy.Y < FRAME_HEIGHT; xy.Y++, cur += DATA_PITCH_SIZE )
WriteConsoleOutputCharacter( hOutput, cur, DATA_PITCH_SIZE - , xy, &written ); Sleep( );
} mciSendString( "stop", NULL, , NULL );
mciSendString( "close", NULL, , NULL ); err:
if ( buf )
delete[] buf; Sleep( );
}

效果图:

完整程序下载:百度网盘

BAD APPLE C++控制台程序的更多相关文章

  1. Mac OS X上用CoreCLR运行一个真正的.NET控制台程序

    这个真正的控制台程序来自corefxlab,名叫CoreClrHelloWorld,是一个跨平台的.NET控制台演示程序,可以显示微软.Linux.苹果的logo. CoreClrHelloWorld ...

  2. MAC COCOA call command 调用终端控制台程序

    MAC COCOA call command 调用终端控制台程序 STEP 1 先写一个C++ DOS程序 STEP2 使用NSTask来运行,然后用NSPipe和 NSData来接受运行的结果字符串 ...

  3. 在.NET Core控制台程序中使用依赖注入

    之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...

  4. 使用 CommandLineApplication 类创建专业的控制台程序

    闲话 在很久很久以前,电脑是命令行/终端/控制台的天下,那屏幕上的光标在行云流水般的键盘敲击下欢快地飞跃着,那一行行的字符输出唰唰唰地滚动着--直到 Windows 95 的出现(那时候我还不知道苹果 ...

  5. C#基础-关于用json给控制台程序传值的坑

    上周遇到了一个非常诡异的坑,首先写了两个程序,第一个程序输出成dll,第二个程序是控制台程序. 在第一个程序里,我使用了process去启动第二个程序,同时传入了一个Json作为参数,即: Proce ...

  6. 你们信不信一句Console.WriteLine就能让你的控制台程序失去响应

    好久没更新博客了,今天是扒衣见君节,难得闲下来就来说说一个最近有趣的发现吧. 首先废话不多说,直接上代码吧 class Program { static void Main(string[] args ...

  7. 【转】WIN32 控制台程序

    http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...

  8. Async Console Programs 异步控制台程序

    如果你正在写一个控制台程序,你可能最终想要一个异步的main方法,像这样: class Program { static async void Main(string[] args) { ... } ...

  9. C#控制台程序的参数解析类库 CommandLine简单使用说明

    前言 C#开发的控制台程序,默认接收string[] args参数.如果有多个参数需要输入时,可以按照顺序依次输入:但如果有些参数不是必选的,或者有些参数中间需要有空格比如时间“2016-05-18 ...

随机推荐

  1. JavaScript调试 - debugger语句

    语法: debugger 作用: 启动调试器 备注: 1. 可以将debugger语句放在过程的任何地方以中止执行.2. 使用debugger语句类似于在代码中设置断点. 3. debugger语句中 ...

  2. 基于HTML5 Canvas实现的图片马赛克模糊特效

    效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...

  3. 基于git diff进行的eslint代码检测

    缘起 在项目中, 通常都会使用代码检测工具来规范团队的代码风格, 比如eslint.随着代码的不断增加, eslint进行代码检测的时间也越来越久.每次检测的时候, 需要检测的文件和实际检测的文件极度 ...

  4. Android开发学习——应用安装过程

    首先一个android项目,然后编译和打包,将.java文件编译为.class,.class编译为.dex,将所有文件打包为一个apk,只编译代码,不编译资源. .apk里面的.arsc是资源的索引, ...

  5. iOS 数字滚动 类似于老 - 虎- 机的效果

    效果图 具体实现代码如下 ZCWScrollNumView.h文件 #import <UIKit/UIKit.h> typedef enum { ZCWScrollNumAnimation ...

  6. ToList()方法

    //ToList()方法,翻译:把****转化为List集合. // 控制台试试: string[] fruits = { "apple", "passionfruit& ...

  7. RHEL 6.6安装桌面环境GNOME

    在测试服务器(Red Hat Enterprise Linux Server release 6.6)需要安装桌面系统环境,于是选择GNOME桌面环境安装. 一:检查系统的运行级别以及是否安装了桌面环 ...

  8. Echarts 之三 —— 地市联动数据统计二

    一.简介 除了是一个地图之外,我们也可以使用多地图进行地市.区县联动数据统计.需求如下:展示整改广东省的地图,并显示统计信息,当点击某一个地市的时候,就显示该地市的地图,并统计该地市区县的数据信息.二 ...

  9. x01.Weiqi.12: 定式布局

    定式 下一步当将定式保存到数据库中,如布局中的代码所示,但其初始的代码更有利于理解.以小飞挂为例: // 0 // + 0 0 // + // // + List<Pos> P_LuSta ...

  10. Linux shell 通配符 / glob 模式

    概念 glob 模式(globbing)也被称之为 shell 通配符,名字的起源来自于 Unix V6 中的 /etc/glob (详见 man 文档).glob 是一种特殊的模式匹配,最常见的是通 ...