BAD APPLE C++控制台程序
使用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++控制台程序的更多相关文章
- Mac OS X上用CoreCLR运行一个真正的.NET控制台程序
这个真正的控制台程序来自corefxlab,名叫CoreClrHelloWorld,是一个跨平台的.NET控制台演示程序,可以显示微软.Linux.苹果的logo. CoreClrHelloWorld ...
- MAC COCOA call command 调用终端控制台程序
MAC COCOA call command 调用终端控制台程序 STEP 1 先写一个C++ DOS程序 STEP2 使用NSTask来运行,然后用NSPipe和 NSData来接受运行的结果字符串 ...
- 在.NET Core控制台程序中使用依赖注入
之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...
- 使用 CommandLineApplication 类创建专业的控制台程序
闲话 在很久很久以前,电脑是命令行/终端/控制台的天下,那屏幕上的光标在行云流水般的键盘敲击下欢快地飞跃着,那一行行的字符输出唰唰唰地滚动着--直到 Windows 95 的出现(那时候我还不知道苹果 ...
- C#基础-关于用json给控制台程序传值的坑
上周遇到了一个非常诡异的坑,首先写了两个程序,第一个程序输出成dll,第二个程序是控制台程序. 在第一个程序里,我使用了process去启动第二个程序,同时传入了一个Json作为参数,即: Proce ...
- 你们信不信一句Console.WriteLine就能让你的控制台程序失去响应
好久没更新博客了,今天是扒衣见君节,难得闲下来就来说说一个最近有趣的发现吧. 首先废话不多说,直接上代码吧 class Program { static void Main(string[] args ...
- 【转】WIN32 控制台程序
http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...
- Async Console Programs 异步控制台程序
如果你正在写一个控制台程序,你可能最终想要一个异步的main方法,像这样: class Program { static async void Main(string[] args) { ... } ...
- C#控制台程序的参数解析类库 CommandLine简单使用说明
前言 C#开发的控制台程序,默认接收string[] args参数.如果有多个参数需要输入时,可以按照顺序依次输入:但如果有些参数不是必选的,或者有些参数中间需要有空格比如时间“2016-05-18 ...
随机推荐
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- EasyUI弹出窗口实例
效果体验:http://hovertree.com/texiao/jeasyui/1.htm 源代码下载:HovertreeJEasyUI HTML文件代码: <!DOCTYPE html> ...
- JS学习笔记8之 BOM-浏览器对象模型
*什么是BOM -->BOM (Browser Object Model) 浏览器对象模型-->BOM提供了独立于内容而与浏览器窗口进行交互的对象-->BOM主要用于管理窗口与窗口之 ...
- iOS之ShareSDK实现分享、第三方登录等功能
(1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...
- ListView setOnItemClickListener无效原因分析
前言 最近在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题.我的情况是在item中有一个Button按钮.所以不会回调.上百度 ...
- iOS---searchBar 搜索框 光标初始位置后移
#import <UIKit/UIKit.h> @interface SearchBar : UITextField @property (nonatomic,strong) UIButt ...
- ObjectAnimator.start()工作原理
分析下面一段代码的逻辑 objectAnimator.start(); 他会调用父类的start(),即ValueAnimator,我们分析valueAnimator.start()即可 ValueA ...
- 使用DOTNETZIP过滤并压缩相对目录
业务要求: 压缩某个文件夹及其子目录 压缩时只压缩指定的文件类型,如cshtml 压缩后保持相对目录 找了很久,没有直接的DEMO,最后尝试通过以下代码完成 示例演示了只压缩cshtml和js,同 ...
- 在Mac电脑上为iPhone或iPad录屏的方法
在以前的Mac和iOS版本下,录制iPhone或者iPad屏幕操作是一件稍微复杂的事情.但是随着Yosemite的出现,在Mac电脑上为iPhone或iPad录屏的方法就变得简单了.下面就介绍一下具体 ...
- 通过Ajax使用FormData对象无刷新上传文件
写在前面:本文说的这个方案有浏览器兼容性问题:所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+.Firefox 4+.IE 10+.Opera 12+.Safari 5+,对兼容性比 ...