BAD APPLE C++控制台程序
使用C++语言编写,如果想改成C语言,手动以GetProcAddress的方式来调用相关函数即可。
1 #include <windows.h> 2 #include <mmsystem.h> 3 #include <stdio.h> 4 5 #pragma comment(lib, "winmm.lib") 6 7 8 #define DATAFILE "BADAPPLE.txt" 9 10 #define FRAME_WIDTH 80 11 #define FRAME_HEIGHT 32 12 13 #define DATA_TOKEN_SIZE ( 5 + 1 ) // $0000\n 14 #define DATA_PITCH_SIZE ( FRAME_WIDTH + 1 ) // ###...\n 15 #define DATA_FRAME_SIZE ( DATA_TOKEN_SIZE + ( DATA_PITCH_SIZE * FRAME_HEIGHT ) ) 16 17 #define FRAME_COUNT 3271 18 19 #define VIDEO_TIME 218000.0f // 3:38 (218000ms) 20 21 22 void main(void) 23 { 24 HANDLE hOutput; 25 26 hOutput = GetStdHandle( STD_OUTPUT_HANDLE ); 27 28 CONSOLE_CURSOR_INFO coc = { 1, FALSE }; 29 COORD co = { FRAME_WIDTH, FRAME_HEIGHT }; 30 SMALL_RECT rc = { 0, 0, FRAME_WIDTH - 1, FRAME_HEIGHT - 1 }; 31 32 SetConsoleCursorInfo( hOutput, &coc ); 33 SetConsoleScreenBufferSize( hOutput, co ); 34 SetConsoleWindowInfo( hOutput, TRUE, &rc ); 35 36 SetConsoleTitle( "Bad Apple By Crsky @2016" ); 37 38 FILE *fp; 39 int size; 40 char *buf; 41 char *cur; 42 int start; 43 44 buf = NULL; 45 46 fp = fopen( DATAFILE, "rb" ); 47 48 if ( !fp ) 49 { 50 printf( "%s not found.\n", DATAFILE ); 51 goto err; 52 } 53 54 size = DATA_FRAME_SIZE * FRAME_COUNT; 55 56 buf = new char[ size ]; 57 58 if ( fread( buf, size - 1, 1, fp ) != 1 ) 59 { 60 printf( "Failed to read in data file.\n" ); 61 goto err; 62 } 63 64 buf[ size - 1 ] = '\0'; 65 66 fclose( fp ); 67 68 mciSendString( "open BADAPPLE.wma alias BGM", NULL, 0, NULL ); 69 mciSendString( "play BGM", NULL, 0, NULL ); 70 71 start = GetTickCount(); 72 73 while ( 1 ) 74 { 75 int time; 76 float percen; 77 int frame; 78 COORD xy = { 0, 0 }; 79 DWORD written; 80 81 if ( GetKeyState( VK_SPACE ) ) 82 { 83 printf( "Stop play.\n" ); 84 break; 85 } 86 87 time = GetTickCount(); 88 percen = ( time - start ) / VIDEO_TIME; 89 90 if ( percen > 1 ) 91 { 92 printf( "End of play.\n" ); 93 break; 94 } 95 96 frame = percen * FRAME_COUNT; 97 cur = &buf[ ( DATA_FRAME_SIZE * frame ) + DATA_TOKEN_SIZE ]; 98 99 for ( ; xy.Y < FRAME_HEIGHT; xy.Y++, cur += DATA_PITCH_SIZE ) 100 WriteConsoleOutputCharacter( hOutput, cur, DATA_PITCH_SIZE - 1, xy, &written ); 101 102 Sleep( 60 ); 103 } 104 105 mciSendString( "stop", NULL, 0, NULL ); 106 mciSendString( "close", NULL, 0, NULL ); 107 108 err: 109 if ( buf ) 110 delete[] buf; 111 112 Sleep( 500 ); 113 }
效果图:
完整程序下载:百度网盘
转载于:https://www.cnblogs.com/crsky/p/5984260.html
BAD APPLE C++控制台程序相关推荐
- VC++ 隐藏控制台程序窗口
转自:http://hi.baidu.com/sicceer/blog/item/d9c35a810d15c4c8bc3e1ec8.html 设置 #pragma comment( linker, & ...
- 在vc6控制台程序中如何调用运行ImageMagick命令行工具
在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...
- 使用VSCode调试C#控制台程序
转载自: http://www.cnblogs.com/lxhbky/p/6673230.html http://www.cnblogs.com/lxhbky/p/6692065.html 一.环境安 ...
- VS C/C++控制台程序添加内存泄漏自动检测功能
基于MFC框架的应用程序由模板生成时,已经自动添加了内存泄漏自动检测功能,当你的程序有内存泄漏,在Debug调式模式下运行就会在vc的输出窗口里显示出来,容易发现并及时解决.但是我们在写一些测试程序时 ...
- Mysql:mysql 控制台程序的提示符 prompt 字符串设置
The prompt command reconfigures the default mysql> prompt. The string for defining the prompt can ...
- 把控制台程序嵌入到 WinForm 中执行
我们经常有一些用控制台实现的简单应用,这种应用一般都是一步一步"向导"式执行,在每一步上收集用户的输入,最后得到程序执行的结果.但有些用户可能不喜欢用键盘操作的命令行界面,还是愿意 ...
- 【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
文章目录 一.报错信息 二.解决方案 一.报错信息 Windows 控制台程序编译报错 : 已启动生成- 1>------ 已启动生成: 项目: hacktool, 配置: Debug Win3 ...
- 【Visual Studio】Visual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )
文章目录 一.安装 C++ 桌面开发组件 二.创建并运行 Windows 控制台程序 一.安装 C++ 桌面开发组件 打开 Visual Studio Installer , 点击 " 修改 ...
最新文章
- 提高汽车系统的安全性
- 世界上最好的光刻机为什么来自荷兰?【物联网智商精选】
- Robotium调用getActivity()导致程序挂起的方法
- Java虚拟机是什么
- App如何适配Jelly Bean 和 Nexus 7
- easypoi导出word表格_拒绝加班,批量将word文档中的信息高效率提取出来存储到Excel中...
- 运用xlib进行事件响应(X11 API)的小例子
- lstm数学推导_如何在训练LSTM的同时训练词向量?
- Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询
- 关于xendesktop外部SQL数据库连接设置的问题
- BoxBlur(方框模糊)
- ubuntu开机启动+图标配置
- chinapub读书会第10期:机器学习与人工智能 6月25日相约阿里云+优客工场
- A3C的算法原理和算法流程
- 分数阶麻雀搜索算法-附代码
- css 关于元素选中时会显示蓝色背景
- 无线串口服务器规模,无线串口服务器讲述.doc
- 华硕AC68U路由器APP远程控制设置方法
- 计算机应用基础试题操作题,计算机应用基础期末考试操作题.doc
- qlib的工作流管理:mlflow机器学习生命周期管理平台