// BadApple1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string.h>
#include<time.h>
#include<windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
void playMusic()
{
MCIERROR mciError;
wchar_t buf[50];
mciError = mciSendString(TEXT("open BadApple.mp3 alias mysong"),NULL,0,NULL);
if(mciError)
{
mciGetErrorString(mciError,buf,50);
//MessageBox(buf);
return ;
}
mciSendString(TEXT("play mySong"),NULL,0,NULL);
}
void gotoxy (int x, int y)
{
COORD coord; // coordinates
coord.X = x; coord.Y = y; // X and Y coordinates
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); // moves to the coordinates
}
void PrintChar(char *ch,UINT count,UINT x,UINT y) //在坐标(x,y)处输出字符串ch,ch里有count个字符
{
HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
ULONG unuse;
pos.X=x;
pos.Y=y;
CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息
GetConsoleScreenBufferInfo(h, &bInfo );
WriteConsoleOutputCharacterA(h,ch,count,pos,&unuse);
}
class BadApple
{
public:
BadApple();
void recursur();
void display();
FILE *fp;
private:
int frame,caf;
clock_t stime,ftime;
char buf[1920],seat[20];
};
BadApple::BadApple()
{
frame=0;
caf=33;
stime=clock();
stime=clock();
}
void BadApple::recursur()
{
HANDLE hout;
COORD coord;
coord.X = 0;
coord.Y = 0;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,coord);
}
void BadApple::display()
{
playMusic();
fp = fopen("AscPic.txt", "r");
int count =0 ;
char Line[162];
while (!feof(fp))
{
caf =26;
for(int loop = 0; loop < 61; loop++)
{
if(fgets(Line, 162, fp) == NULL)
{
break;
}
Line[161] = '\0';
PrintChar(Line,161,0,loop);
}
Sleep(caf);
count++;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
system("color F0");
system("mode con cols=162 lines=58");
cout<<"-----Bad Apple字符画播放器-----"<<endl<<"\t按Enter键播放\t"<<endl;
getchar();
system("cls");
BadApple A;
A.display();
system("cls");
cout<<"-----感谢你的观看!-----"<<endl<<"作者:chuan 修改者:Alice.小杰"<<endl<<"\t按Enter键退出\t"<<endl;
getchar();
}
参考人家写的badApple,其实主要控制字符的输出,还有控制声音的播放。
控制mp3的播放:
MCI ApI 头文件#include <mmsystem.h>
MCIERROR mciSendString(
LPCTSTR lpszCommand, //MCI命令字符串
LPTSTR lpszReturnString, //存放反馈信息的缓冲区
UINT cchReturn, //缓冲区的长度
HANDLE hwndCallback //回调窗口的句柄,一般为NULL
);
//靠发送命令来播放如:mciSendString(TEXT("open BadApple.mp3 alias mysong"),NULL,0,NULL);
GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。
STD_INPUT_HANDLE 标准输入的句柄
STD_OUTPUT_HANDLE 标准输出的句柄
STD_ERROR_HANDLE 标准错误的句柄
一些接口:
FillConsoleOutputAttribute API 将属性写入屏幕缓冲区
FillConsoleOutputCharacter API 将字符写入屏幕缓冲区
FlushConsoleInputBuffer API 清除控制台输入缓冲区
FlushFileBuffers API 清除文件缓冲区
FreeConsole API 释放控制台
FreeDDElParam API 释放DDE消息IPARAM
GetConsoleCP API 为控制台输入获取代码页
GetConsoleCursorInfo API 返回光标大小
GetConsoleMode API 返回控制台输入输出模式
GetConsoleOutputCP API 为控制台输出获取代码页
GetConsoleScreenBufferInfo API 返回屏幕缓冲区信息
GetConsoleTitle API 返回控制台窗口标题
GetCurrentProcess API 返回当前进程的句柄
GetCurrentProcessId API 返回当前进程ID值
GetCurrentThread API 返回当前线索的句柄
GetCurrentThreadId API 返回当前线索ID值
GetCursor API 返回当前光标的句柄
GetCursorPos API 返回当前光标的位置
GetDlgItem API 返回对话框控件句柄
GetForegroundWindow API 返回前景窗口句柄
GetFocus API 返回当前焦点窗口句柄
GetKeyboardType API 返回键盘信息
GetNumberOfConsoleInputEvents API 返回控制台队列事件数
GetTextCharsetInfo API 返回当前字体设置信息
GetTextColor API 返回当前文本色彩
GetTextFace API 返回当前字体的字样
GetTextMetrics API 返回当前字体的公制
SetConsoleActiveScreenBuffer API 改变显示屏幕缓冲区
SetConsoleCP API 设置控制台输入代码页
SetConsoleCtrlHandler API 设置控制台进程的单个句柄
SetConsoleCursorInfo API 设置控制台光标大小
SetConsoleCursorPosition API 设置控制台光标位置
SetConsoleMode API 设置控制台输入输出模式
SetConsoleOutputCP API 设置控制台输出代码页
SetConsoleScreenBufferSize API 改变屏幕缓冲区大小
SetConsoleTextAttribute API 设置屏幕文本属性
SetConsoleTitle API 设置控制台窗口标题字符串
SetConsoleWindowInfo API 设置控制台窗口大小
system("cls");控制清屏。
如果改变光标坐标,会有闪屏的情况。其次要控制帧数,主要靠sleep来控制,每一祯有控制好字符串的显示。