使用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. 【原创-算法-实现】异步HTTP请求操作

    一.说明 1) 这个类 是我 在真实项目中,优化解决真实问题 时,不参考第三方代码,完全由自己查阅MSDN官方文档 , 完成的一个真实生产环境中使用的功能类 2) 读者在使用此类时,请尊重原创,在代码 ...

  2. 推荐15款最佳的 jQuery 分步引导插件

    当用户浏览到一个网站,它可能从不知道如何浏览,如何操作网站或 Web 应用程序的内容和流程.在这篇文章中,我们编制了一些最好的 jQuery 引导插件列表.你会发现这些插件对于提高你的网站的整体用户体 ...

  3. ArcGIS安装错误1402

    以前出遇到过在安装ArcGIS软件的时候出现1402错误,错误原因是因为权限不足,具体是什么造成权限不足还不清楚,估计是安装了什么软件后造成. 错误信息 解决方法 找到相应的注册表,在项上右键设置权限 ...

  4. IOS开发基础知识--碎片24

    1:兼容字体大小6plue跟它以下的区别 #define FONT_COMPATIBLE_SCREEN_OFFSET(_fontSize_) [UIFont systemFontOfSize:(_fo ...

  5. Struts2 - Conversion Plugin

    转载:http://www.cnblogs.com/ikuman/archive/2013/11/04/3403073.html 1.struts2自2.1以后推荐使用Convention Plugi ...

  6. MVC学习系列3--怎么从控制器向视图传递数据

    在MVC中,从控制器到视图,传递数据,可以使用 ViewData 和 ViewBag:同样从视图到控制器,传递数据,可以使用Post,QueryString,或者隐藏域:最后从控制器到控制器,传递数据 ...

  7. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

  8. 【转】Hadoop命令大全

    Hadoop命令大全 本节比较全面的向大家介绍一下Hadoop命令,欢迎大家一起来学习,希望通过本节的介绍大家能够掌握一些常见Hadoop命令的使用方法.下面是Hadoop命令的详细介绍. 1.列出所 ...

  9. 职业规划:管理vs技术

    "每个人都身怀天赋,但如果用会不会爬树能力来评判一只鱼,那它这辈子都会觉得自己是条蠢鱼" - 阿尔伯特.爱因斯坦 我想我为这篇博客已经准备了很长时间.但是看起了我还一直挣扎我该往哪 ...

  10. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...