程序片段(01):01.字符串.c

内容概要:字符串

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h> //00.语音合成与语音识别:
// 语音合成:文字-->语音
// 语音识别:语音-->文字
// 注:任何语音操作都应当使用宽字符!
//01.宽窄字符问题1:
// 1.窄字符采用单字节存储,宽字符采用双字节存储!
// 宽窄字符的"本质区别"在于存储数据的盒子尺寸不一样!
// 2.宽窄字符当中使用sizeof关键字的情况区分:
// 1.sizeof求取的是数据类型所占用的尺寸而不是实际数据本身所占用的尺寸
// 2.但是操作"实际数据本身"的时候都是一样的
// 注:如果项目采用Unicode字符集,那所有非ASCII字符集范围内
// 的字符都必须采用宽字符进行存储(也即是除开英文之外的字符)
// 再加上本地化的设置才能正确的表示文字信息
int main01(void)
{
char ch = 'A';//窄字符-->1个字节:不可以存储单个汉字儿
wchar_t wch = L'A';//宽字符-->2个字节:可以存储单个汉字儿
printf("%d ,%d \n", sizeof(ch), sizeof(wch));
printf("%d ,%d \n", ch, wch);//内容一致-->ASCII码值一样 system("pause");
} //02.宽窄字符问题2:
// 1.宽窄字符只是存储数据的盒子不一样:
// 如果存储内容一样,那么二进制数据本质一样
// 2.Unicode字符集+(语言环境设置+宽字符使用):
// 才能使得除开标准ASCII编码集的字符之外的字符能够正确显示
// 3.只要在Unicode字符集的情况之下,所有内容都采用宽字符
// 就能保证字符的正确存储与使用
// 注:宽字符也是字符,只不过表象比窄字符多了一个宽字符标识符"L"
// 但还是需要使用单引号('')进行宽字符标识
int main02(void)
{
char ch = 'A';
putchar(ch); //wchar_t wch = L'A';
//putwchar(wch); setlocale(LC_ALL, "zh-CN");
wchar_t wch = L'我';
putwchar(wch);//采用字符集+设定语言环境+使用宽字符+使用宽字符操作函数-->字符正确存储并使用 system("pause");
} //03.宽窄字符问题3:
// 1.VS默认配置情况下,所有字符都采用窄字符进行存储:
// 因为窄字符对于ASCII编码表当中的字符都能够进行兼容
// 2.代码区的内容不可以进行修改!(编译不报错,运行直接挂掉!)
// 找到代码区+突破权限
// 3.代码区当中的两块儿重要内存(常量池和符号表):
// 常量池:只需要拷贝指针,直接进行访问(类似于函数传参,针对于数组无副本机制)
// 提高内存操作效率
// 符号表:但需要拷贝数据,生成于寄存器(必须通过寄存器进行数据的传递操作)
// 注:只要是代码区的内容,就不可以直接进行修改,无论是常量池内容还是符号表内容
// 但是通过Detours这款工具就可以突破任何Windows程序的代码区"访问权限",并且
// 可以对该代码区的内容进行直接修改"修改权限"
int main03(void)
{
char * pStr = "notepad";
printf("%d \n", sizeof(pStr));
printf("%d \n", sizeof("notepad"));
printf("%p \n", pStr);//该地址属于(内存-->代码区)的地址 //*pStr = 'A';//由于该指针所指向的内存区块儿位于代码区,因此只可读不可写[因为这里访问的字符串位于代码区常量池]
//"notepad"这个字符串属于代码区的常量池当中,该常量池也被称作为只读常量池
//"notepad"字符串都存储于代码区常量池,非字符串常量需要拷贝数据到寄存器才能对内存进行间接操作
//字符串传递的是地址 system("pause");
} //04.宽窄字符问题4:
// 1.针对于英文,使用宽窄字符的效果都一样,不同的只是存储字符的盒子尺寸不一样
// 宽窄字符的针对对象:非英文|非标准ASCII码表包含字符
// 2.无论是针对于窄字符字符串还是宽字符字符串,该字符串的结尾标识符都是字符'\0'
// 注:只不过区分窄字符('\0')和宽字符(L'\0')所占用的存储空间尺寸不一样!
// (1).strlen和sizeof();的区别(一个是求取有效字符数;一个是求取实际"占用"字节数)
// 区分:"占用"和"实际"两个关键词儿的区别
// (2).sizeof();取值运算符(星号:"*")加字符指针(区分宽窄字符指针),
// 所求字节数为单个相应字符(宽窄)所占用的字节数
// 3.宽窄字符的打印:
// wprintf+L"格式字符串"+格式控制符
// 注:严格区分"格式字符串"和"格式控制符"之间的区别
// 4.字符指针所指向的数据有多重解析方式:
// 字符串层面的意义解析方式(字符串函数)+字符层面的解析范式(sizeof关键字)
// 注:切忌注意!
int main04(void)
{
setlocale(LC_ALL, "zh-CN");
wchar_t * pWchar = L"你好天朝";//代码区常量池
printf("%d, %d \n", sizeof(pWchar), sizeof(*pWchar));//特殊点!->两个字节
printf("%d \n", sizeof(L"你好天朝"));//实际占用内存尺寸!
//printf("%p \n", pWchar);
wprintf(L"%p \n", pWchar); system("pause");
} //05.通过字符指针访问字符指针所指向的内存实体,只能访问到单个字符的效果!
// 数组:一旦前置手动初始化,那么后置一定是默认初始化,数据自动清为零
// 无论前置初始化的内容是什么,后置自动初始化的数据都为0
// 注:初始化与赋值的概念不同
// 取值运算符+字符指针-->只能访问到单个字符(区分宽窄字符!)
int main05(void)
{
char * pStr = "notepad";//窄字符字符串,pStr是指针变量,存储的是(代码区常量池)中的常量字符串的首地址
//pStr可以存储不同的指针,属于变量指针
*pStr = 'A';//随时注意指针变量所指向的内存空间的访问权限(代码区只可读,不可写,除非借助Detours)
char str[100] = "calc";
//str = 1;//str作为数组名是常量指针
//拷贝字符串到数组,等同于对数组的前置初始化,后置默认初始化,因此后续数据全部清零
printf("%p \n", str);
//system(str);
*str = 'X';//通过(取值运算符+字符指针)只能访问到单个字符(区分宽窄字符) system("pause");
} //06.宽窄字符数组注意事项:
// 1.数组名一定不可以直接进行修改!-->常量指针
// 2.C语言判断两个字符串是否相等的方式strcmp(str1, str2);函数
// 注:sizeof();和strlen();所求取的长度意义不同
// sizeof();求取的是真实的内存尺寸!
// strlen();和wstrlen();只是求取"有效"字符个数!
int main06(void)
{
char str1[100] = "calc";
char str2[100] = "calc1";
//char * p;
//str1 = str2;//比较的是常量指针的值
if (0 == strcmp(str1, str2))
{
printf("相等! \n");
}
else
{
printf("不相等! \n");
}
wchar_t wStr[100] = L"您好天朝";
printf("%d \n", sizeof(wStr)); system("pause");
}

程序片段(02):speechrecognition.cpp

内容概要:语音识别

#include <windows.h>
#include <atlstr.h>
#include <sphelper.h>
#include <sapi.h>
#include<comutil.h>
#include<string.h>//01.所需头文件 #pragma comment(lib,"sapi.lib")
#pragma comment(lib, "comsupp.lib") //02.链接静态库 #define GID_CMD_GR 333333
#define WM_RECOEVENT WM_USER+1 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//03.所需COM组件:通过COM组件实现语音(识别|合成)功能 char szAppName[] = "TsinghuaYincheng";
BOOL b_initSR;
BOOL b_Cmd_Grammar;
CComPtr<ISpRecoContext>m_cpRecoCtxt; //语音识别程序接口
CComPtr<ISpRecoGrammar>m_cpCmdGramma; //识别语法
CComPtr<ISpRecognizer>m_cpRecoEngine; //语音识别引擎
int speak(wchar_t *str); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =szAppName;
wndclass.lpszMenuName =NULL;
wndclass.style =CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
speak(L"尹成是一个猥琐男,曾彬更加猥琐,Hello XiaoBin i love you!!!");//04.语音合成:将文件转化为语音(注:使用宽字符)
//05.关于语音方面的编程概念:
// 1.什么叫做语音识别?什么叫做语音合成?
// 语音识别:将声音转化为文字
// 语音合成:将文字转化为声音
// 2.语音识别必须采用宽字符!
// 配置:项目属性-->Unicode字符集-->宽字符操作(所有都使用宽字符)
// speak(NULL);//表示不说话
hwnd=CreateWindow(szAppName,
TEXT("清华-尹成语音识别教程"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
} LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps; switch(message)
{
case WM_CREATE:
{
//初始化COM端口
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
//创建识别引擎COM实例为共享型
HRESULT hr=m_cpRecoEngine.CoCreateInstance(CLSID_SpSharedRecognizer);
//创建识别上下文接口
if(SUCCEEDED(hr))
{
hr=m_cpRecoEngine->CreateRecoContext(&m_cpRecoCtxt);
}
else MessageBox(hwnd,TEXT("error1"),TEXT("error"),S_OK);
//设置识别消息,使计算机时刻监听语音消息
if(SUCCEEDED(hr))
{
hr=m_cpRecoCtxt->SetNotifyWindowMessage(hwnd,WM_RECOEVENT,0,0);
}
else MessageBox(hwnd,TEXT("error2"),TEXT("error"),S_OK);
//设置我们感兴趣的事件
if(SUCCEEDED(hr))
{
ULONGLONG ullMyEvents=SPFEI(SPEI_SOUND_START)|SPFEI(SPEI_RECOGNITION)|SPFEI(SPEI_SOUND_END);
hr=m_cpRecoCtxt->SetInterest(ullMyEvents,ullMyEvents);
}
else MessageBox(hwnd,TEXT("error3"),TEXT("error"),S_OK);
//创建语法规则
b_Cmd_Grammar=TRUE;
if(FAILED(hr))
{
MessageBox(hwnd,TEXT("error4"),TEXT("error"),S_OK);
}
hr=m_cpRecoCtxt->CreateGrammar(GID_CMD_GR,&m_cpCmdGramma);
WCHAR wszXMLFile[20]=L"er.xml";
MultiByteToWideChar(CP_ACP,0,(LPCSTR)"er.xml",-1,wszXMLFile,256);
hr=m_cpCmdGramma->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
if(FAILED(hr))
{
MessageBox(hwnd,TEXT("error5"),TEXT("error"),S_OK);
}
b_initSR=TRUE;
//在开始识别时,激活语法进行识别
hr=m_cpCmdGramma->SetRuleState(NULL,NULL,SPRS_ACTIVE);
return 0;
}
case WM_RECOEVENT:
{
RECT rect;
GetClientRect(hwnd,&rect);
hdc=GetDC(hwnd);
USES_CONVERSION;
CSpEvent event;
while(event.GetFrom(m_cpRecoCtxt)==S_OK)
{
switch(event.eEventId)
{
case SPEI_RECOGNITION:
{
static const WCHAR wszUnrecognized[]=L"<Unrecognized>";
CSpDynamicString dstrText;
//取得识别结果
if(FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
{
dstrText=wszUnrecognized;
}
BSTR SRout;
dstrText.CopyToBSTR(&SRout);
char* lpszText2 = _com_util::ConvertBSTRToString(SRout);//06.获取语音识别之后所生成的字符串 if(b_Cmd_Grammar)
{
char * str[15] = {"我是学霸","清华土匪","天下无双","吴伟","曾彬",//07.查表法所对应的字符串表
"记事本","计算器","关机","重启","取消","画图板",
"何栋","林振华","聂千琳","赵学辉"};
int i = -1;
for (int j = 0; j < 15;j++)
{
if (strcmp(str[j], lpszText2) == 0)
{
i = j;
MessageBoxA(0, lpszText2, lpszText2, 0);//弹出对话框
DrawText(hdc, TEXT(lpszText2), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);//在窗体当中写一段儿文字
}
}
switch (i)//08.根据查表法所查询到的结果,进行针对于结果的处理
{
case -1:
break;
case 0:
speak(L"男神是学霸");
break;
case 1:
speak(L"猥琐男尹成");
break;
case 2:
speak(L"曾彬猥琐的天下无创");
break;
case 3:
speak(L"男神帅的惊动了白宫");
break;
case 4:
speak(L"曾彬猥琐的的惊动了白宫");
break;
case 5:
system("start calc");//09.需要采用异步进行打开
break;
case 6:
system("start notepad");
break;
case 7:
system("shutdown -s -t 600");
break;
case 8:
system("shutdown -r -t 600");
break;
case 9:
system("shutdown -a");//10.取消(关机|重启)指令
break;
case 10:
system("start mspaint");
break;
case 11:
speak(L"何栋向三大金刚问好");//11.注意:通过语音识别的联系,可以提高语音识别的精确度!
break;
case 12:
speak(L"振华睡得很晚");//12.Debug模式相比Release模式更加的消耗资源
break;
case 13:
speak(L"聂千琳爱编码");//13.某些COM组件的调用需要在Debug模式下进行
break;
case 14:
speak(L"赵学辉爱编码");//14.经过语音识别训练之后,电脑的语音识别效果更佳!
break;
default:
break;
}
}
}
}
}
return TRUE;
}
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
} #pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
int speak(wchar_t *str)
{
ISpVoice * pVoice = NULL;
::CoInitialize(NULL);
//获取ISpVoice接口:
long hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
hr = pVoice->Speak(str, 0, NULL);
pVoice->Release();
pVoice = NULL;
//千万不要忘记:
::CoUninitialize();
return TRUE;
}

程序片段(03):speechrecognition.cpp

内容概要:语音识别

#include <windows.h>
#include <atlstr.h>
#include <sphelper.h>
#include <sapi.h>
#include<comutil.h>
#include<string.h> #pragma comment(lib,"sapi.lib")
#pragma comment(lib, "comsupp.lib") #define GID_CMD_GR 333333
#define WM_RECOEVENT WM_USER+1 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); char szAppName[] = "TsinghuaYincheng";
BOOL b_initSR;
BOOL b_Cmd_Grammar;
CComPtr<ISpRecoContext>m_cpRecoCtxt; //语音识别程序接口
CComPtr<ISpRecoGrammar>m_cpCmdGramma; //识别语法
CComPtr<ISpRecognizer>m_cpRecoEngine; //语音识别引擎
int speak(wchar_t *str); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =szAppName;
wndclass.lpszMenuName =NULL;
wndclass.style =CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
speak(L"尹成是一个猥琐男");
// speak(NULL);
hwnd=CreateWindow(szAppName,
TEXT("清华-尹成语音识别教程"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
} LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps; switch(message)
{
case WM_CREATE:
{
//初始化COM端口
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
//创建识别引擎COM实例为共享型
HRESULT hr=m_cpRecoEngine.CoCreateInstance(CLSID_SpSharedRecognizer);
//创建识别上下文接口
if(SUCCEEDED(hr))
{
hr=m_cpRecoEngine->CreateRecoContext(&m_cpRecoCtxt);
}
else MessageBox(hwnd,TEXT("error1"),TEXT("error"),S_OK);
//设置识别消息,使计算机时刻监听语音消息
if(SUCCEEDED(hr))
{
hr=m_cpRecoCtxt->SetNotifyWindowMessage(hwnd,WM_RECOEVENT,0,0);
}
else MessageBox(hwnd,TEXT("error2"),TEXT("error"),S_OK);
//设置我们感兴趣的事件
if(SUCCEEDED(hr))
{
ULONGLONG ullMyEvents=SPFEI(SPEI_SOUND_START)|SPFEI(SPEI_RECOGNITION)|SPFEI(SPEI_SOUND_END);
hr=m_cpRecoCtxt->SetInterest(ullMyEvents,ullMyEvents);
}
else MessageBox(hwnd,TEXT("error3"),TEXT("error"),S_OK);
//创建语法规则
b_Cmd_Grammar=TRUE;
if(FAILED(hr))
{
MessageBox(hwnd,TEXT("error4"),TEXT("error"),S_OK);
}
hr=m_cpRecoCtxt->CreateGrammar(GID_CMD_GR,&m_cpCmdGramma);
WCHAR wszXMLFile[20]=L"er.xml";
MultiByteToWideChar(CP_ACP,0,(LPCSTR)"er.xml",-1,wszXMLFile,256);
hr=m_cpCmdGramma->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
if(FAILED(hr))
{
MessageBox(hwnd,TEXT("error5"),TEXT("error"),S_OK);
}
b_initSR=TRUE;
//在开始识别时,激活语法进行识别
hr=m_cpCmdGramma->SetRuleState(NULL,NULL,SPRS_ACTIVE);
return 0;
}
case WM_RECOEVENT:
{
RECT rect;
GetClientRect(hwnd,&rect);
hdc=GetDC(hwnd);
USES_CONVERSION;
CSpEvent event;
while(event.GetFrom(m_cpRecoCtxt)==S_OK)
{
switch(event.eEventId)
{
case SPEI_RECOGNITION:
{
static const WCHAR wszUnrecognized[]=L"<Unrecognized>";
CSpDynamicString dstrText;
//取得识别结果
if(FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
{
dstrText=wszUnrecognized;
}
BSTR SRout;
dstrText.CopyToBSTR(&SRout);
char* lpszText2 = _com_util::ConvertBSTRToString(SRout); if(b_Cmd_Grammar)
{
if (strcmp("跳跃",lpszText2)==0)
{
keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//松开
}
if (strcmp("趴下", lpszText2) == 0)
{
keybd_event('Y', 0, 0, 0);//按下
keybd_event('Y', 0, 2, 0);//松开
}
if (strcmp("后前前", lpszText2) == 0)
{
keybd_event('S', 0, 0, 0);//按下
keybd_event('S', 0, 2, 0);//松开
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//01.鼠标左键按下才开始攻击鼠标位置的人物!
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
////MapVirtualKey映射
//keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
//keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
if (strcmp("左右前", lpszText2) == 0)
{
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('D', 0, 0, 0);//按下
keybd_event('D', 0, 2, 0);//松开
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
if (strcmp("火冒三丈", lpszText2) == 0)
{
keybd_event(VK_OEM_102, 0, 0, 0);//按下//02.C语言函数模拟反斜杠("\")
keybd_event(VK_OEM_102, 0, 2, 0);//松开 \ang
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//松开
keybd_event('G', 0, 0, 0);//按下
keybd_event('G', 0, 2, 0);//松开 //MapVirtualKey映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN,0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
if (strcmp("旋风刀", lpszText2) == 0)
{
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('D', 0, 0, 0);//按下
keybd_event('D', 0, 2, 0);//松开
keybd_event('S', 0, 0, 0);//按下
keybd_event('S', 0, 2, 0);//松开
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
if (strcmp("大枪", lpszText2) == 0)
{
keybd_event(VK_OEM_102, 0, 0, 0);//按下
keybd_event(VK_OEM_102, 0, 2, 0);//松开 \ang
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
keybd_event('E', 0, 0, 0);//按下
keybd_event('E', 0, 2, 0);//松开
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('P', 0, 0, 0);//按下
keybd_event('P', 0, 2, 0);//松开
keybd_event('O', 0, 0, 0);//按下
keybd_event('O', 0, 2, 0);//松开
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//松开 keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//松开 keybd_event(VK_NUMPAD7, 0, 0, 0);//按下 //03.数字键所对应的虚拟映射键
keybd_event(VK_NUMPAD7, 0, 2, 0);//松开 //MapVirtualKey映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
if (strcmp("大刀", lpszText2) == 0)
{
keybd_event(VK_OEM_102, 0, 0, 0);//按下
keybd_event(VK_OEM_102, 0, 2, 0);//松开 \ang
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
keybd_event('E', 0, 0, 0);//按下
keybd_event('E', 0, 2, 0);//松开
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('P', 0, 0, 0);//按下
keybd_event('P', 0, 2, 0);//松开
keybd_event('O', 0, 0, 0);//按下
keybd_event('O', 0, 2, 0);//松开
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//松开 keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//松开 keybd_event(VK_NUMPAD6, 0, 0, 0);//按下
keybd_event(VK_NUMPAD6, 0, 2, 0);//松开 //MapVirtualKey映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
if (strcmp("刺蛇", lpszText2) == 0)
{
keybd_event(VK_OEM_102, 0, 0, 0);//按下
keybd_event(VK_OEM_102, 0, 2, 0);//松开 \ang
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
keybd_event('E', 0, 0, 0);//按下
keybd_event('E', 0, 2, 0);//松开
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('P', 0, 0, 0);//按下
keybd_event('P', 0, 2, 0);//松开
keybd_event('O', 0, 0, 0);//按下
keybd_event('O', 0, 2, 0);//松开
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//松开 keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//松开 keybd_event(VK_NUMPAD4, 0, 0, 0);//按下
keybd_event(VK_NUMPAD4, 0, 2, 0);//松开 //MapVirtualKey映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
if (strcmp("大剑", lpszText2) == 0)
{
keybd_event(VK_OEM_102, 0, 0, 0);//按下
keybd_event(VK_OEM_102, 0, 2, 0);//松开 \ang
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
keybd_event('E', 0, 0, 0);//按下
keybd_event('E', 0, 2, 0);//松开
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('P', 0, 0, 0);//按下
keybd_event('P', 0, 2, 0);//松开
keybd_event('O', 0, 0, 0);//按下
keybd_event('O', 0, 2, 0);//松开
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//松开 keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//松开 keybd_event(VK_NUMPAD1, 0, 0, 0);//按下
keybd_event(VK_NUMPAD1, 0, 2, 0);//松开
keybd_event(VK_NUMPAD5, 0, 0, 0);//按下
keybd_event(VK_NUMPAD5, 0, 2, 0);//松开 //MapVirtualKey映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
if (strcmp("大锤", lpszText2) == 0)
{
keybd_event(VK_OEM_102, 0, 0, 0);//按下
keybd_event(VK_OEM_102, 0, 2, 0);//松开 \ang
keybd_event('W', 0, 0, 0);//按下
keybd_event('W', 0, 2, 0);//松开
keybd_event('E', 0, 0, 0);//按下
keybd_event('E', 0, 2, 0);//松开
keybd_event('A', 0, 0, 0);//按下
keybd_event('A', 0, 2, 0);//松开
keybd_event('P', 0, 0, 0);//按下
keybd_event('P', 0, 2, 0);//松开
keybd_event('O', 0, 0, 0);//按下
keybd_event('O', 0, 2, 0);//松开
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//松开 keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//松开 keybd_event(VK_NUMPAD1, 0, 0, 0);//按下
keybd_event(VK_NUMPAD1, 0, 2, 0);//松开
keybd_event(VK_NUMPAD8, 0, 0, 0);//按下
keybd_event(VK_NUMPAD8, 0, 2, 0);//松开 //MapVirtualKey映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
}
}
}
}
return TRUE;
}
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
system("taskkill /f /im 语音识别.exe");
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
} #pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
int speak(wchar_t *str)
{
ISpVoice * pVoice = NULL;
::CoInitialize(NULL);
//获取ISpVoice接口:
long hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
hr = pVoice->Speak(str, 0, NULL);
pVoice->Release();
pVoice = NULL;
//千万不要忘记:
::CoUninitialize();
return TRUE;
}
//04.识别游戏资源文件的修改
//05.区分:游戏引擎和游戏脚本
//06.逻辑文件+剧情文件+资源文件
// 任意进行修改
//07.游戏文件通常采用zip格式进行压缩
// 注:解压缩游戏资源文件需要注意目录层级!
//08.大多数都是PAK文件

程序片段(04):speechrecognition.cpp

内容概要:语音识别

#include <windows.h>
#include <atlstr.h>
#include <sphelper.h>
#include <sapi.h>
#include<comutil.h>
#include<string.h> #pragma comment(lib,"sapi.lib")
#pragma comment(lib, "comsupp.lib") #define GID_CMD_GR 333333
#define WM_RECOEVENT WM_USER+1 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); char szAppName[] = "TsinghuaYincheng";
BOOL b_initSR;
BOOL b_Cmd_Grammar;
CComPtr<ISpRecoContext>m_cpRecoCtxt; //语音识别程序接口
CComPtr<ISpRecoGrammar>m_cpCmdGramma; //识别语法
CComPtr<ISpRecognizer>m_cpRecoEngine; //语音识别引擎
int speak(wchar_t *str); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =szAppName;
wndclass.lpszMenuName =NULL;
wndclass.style =CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
speak(L"尹成是一个猥琐男");
// speak(NULL);
hwnd=CreateWindow(szAppName,
TEXT("清华-尹成语音识别教程"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
} LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps; switch(message)
{
case WM_CREATE:
{
//初始化COM端口
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
//创建识别引擎COM实例为共享型
HRESULT hr=m_cpRecoEngine.CoCreateInstance(CLSID_SpSharedRecognizer);
//创建识别上下文接口
if(SUCCEEDED(hr))
{
hr=m_cpRecoEngine->CreateRecoContext(&m_cpRecoCtxt);
}
else MessageBox(hwnd,TEXT("error1"),TEXT("error"),S_OK);
//设置识别消息,使计算机时刻监听语音消息
if(SUCCEEDED(hr))
{
hr=m_cpRecoCtxt->SetNotifyWindowMessage(hwnd,WM_RECOEVENT,0,0);
}
else MessageBox(hwnd,TEXT("error2"),TEXT("error"),S_OK);
//设置我们感兴趣的事件
if(SUCCEEDED(hr))
{
ULONGLONG ullMyEvents=SPFEI(SPEI_SOUND_START)|SPFEI(SPEI_RECOGNITION)|SPFEI(SPEI_SOUND_END);
hr=m_cpRecoCtxt->SetInterest(ullMyEvents,ullMyEvents);
}
else MessageBox(hwnd,TEXT("error3"),TEXT("error"),S_OK);
//创建语法规则
b_Cmd_Grammar=TRUE;
if(FAILED(hr))
{
MessageBox(hwnd,TEXT("error4"),TEXT("error"),S_OK);
}
hr=m_cpRecoCtxt->CreateGrammar(GID_CMD_GR,&m_cpCmdGramma);
WCHAR wszXMLFile[20]=L"er.xml";
MultiByteToWideChar(CP_ACP,0,(LPCSTR)"er.xml",-1,wszXMLFile,256);
hr=m_cpCmdGramma->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
if(FAILED(hr))
{
MessageBox(hwnd,TEXT("error5"),TEXT("error"),S_OK);
}
b_initSR=TRUE;
//在开始识别时,激活语法进行识别
hr=m_cpCmdGramma->SetRuleState(NULL,NULL,SPRS_ACTIVE);
return 0;
}
case WM_RECOEVENT:
{
RECT rect;
GetClientRect(hwnd,&rect);
hdc=GetDC(hwnd);
USES_CONVERSION;
CSpEvent event;
while(event.GetFrom(m_cpRecoCtxt)==S_OK)
{
switch(event.eEventId)
{
case SPEI_RECOGNITION:
{
static const WCHAR wszUnrecognized[]=L"<Unrecognized>";
CSpDynamicString dstrText;
//取得识别结果
if(FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
{
dstrText=wszUnrecognized;
}
BSTR SRout;
dstrText.CopyToBSTR(&SRout);
char* lpszText2 = _com_util::ConvertBSTRToString(SRout); if(b_Cmd_Grammar)
{
if (strcmp("我是学霸",lpszText2)==0)
{
MessageBoxA(0, lpszText2, lpszText2, 0);
//DrawText(hdc,TEXT("我是学霸"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
}
if (strcmp("清华土匪", lpszText2) == 0)
{
MessageBoxA(0, lpszText2, lpszText2, 0);
//DrawText(hdc,TEXT("我是学霸"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
} if (strcmp("吴伟", lpszText2) == 0)
{
MessageBoxA(0, lpszText2, lpszText2, 0);
speak(L"吴伟帅的惊动了党中央国务院");
//DrawText(hdc,TEXT("我是学霸"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
}
if (strcmp("曾彬", lpszText2) == 0)
{
MessageBoxA(0, lpszText2, lpszText2, 0);
speak(L"曾彬猥琐的惊动了妇女偶像");
//DrawText(hdc,TEXT("我是学霸"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
}
}
}
}
}
return TRUE;
}
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
} #pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
int speak(wchar_t *str)
{
ISpVoice * pVoice = NULL;
::CoInitialize(NULL);
//获取ISpVoice接口:
long hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
hr = pVoice->Speak(str, 0, NULL);
pVoice->Release();
pVoice = NULL;
//千万不要忘记:
::CoUninitialize();
return TRUE;
}

程序片段(05):热键.c

内容概要:热键

//01.区分:普通应用程序和Win应用程序!
// 主函数(入口点)的不同:
// 普通应用程序:main();
// Win应用程序:WinMain();
// 注:普通应用程序是含有main();函数的,而Dll动态库当中
// 没有main();函数
#include <Windows.h> //02.Windows应用程序入口函数格式:
// APIENTRY:
// Win应用程序入口标识("APIENTRY")
// cInstance:
// 当前实例(当前窗口句柄)
// pInstance:
// 父级实例(父级窗口句柄)
// cmdLine:
// 命令行参数
// mcmdshow:
// 控制显示或者隐藏
int APIENTRY WinMain(HINSTANCE cInstance, HINSTANCE pInstance, LPSTR cmdLine, int mcmdshow)
{
//03.RegisterHotKey();函数格式:
// NULL:表示给系统窗口注册热键
// 0x001:表示给组合键编号(16进制整数形式)
// MOD_CONTROL | MOD_ALT:
// 表示组合键除开最后一个字符
// 'M':表示组合键最后一个字符
RegisterHotKey(NULL, 0x001, MOD_CONTROL | MOD_ALT, 'M');
RegisterHotKey(NULL, 0x002, MOD_CONTROL | MOD_ALT, 'N');
RegisterHotKey(NULL, 0x003, MOD_CONTROL | MOD_ALT, 'B'); //04.基于Windows窗体的消息机制控制:
// 1.循环获取消息队列当中的消息
// 2.根据消息对列的获取情况判断
// 注:获取队列消息+对获取情况判断
MSG msg;//描述消息的结构体
while (GetMessage(&msg, NULL, 0, 0))//死循环
{
if (WM_HOTKEY == msg.wParam)//热键判断
{
if (0x001 == msg.wParam)
{
//05.控制按键状态的两个宏指令:
// KEYEVENTF_EXTENDEDKEY(0)-->按下
// KEYEVENTF_KEYUP(2)-->松开
//06.字母键的大小写:
// 1.大写字母:w就是大写字母
// 2.小写字母:(shift+w)组合小写字母键
keybd_event('S', 0, KEYEVENTF_EXTENDEDKEY, 0);//按下
keybd_event('S', 0, KEYEVENTF_KEYUP, 0);//松开
keybd_event('W', 0, 0, 0);
keybd_event('W', 0, 2, 0);
keybd_event('W', 0, 0, 0);
keybd_event('W', 0, 2, 0);
//07.鼠标事件状态控制:
// 采用mouse_event();函数控制
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
else if (0x002 == msg.wParam)
{
//08.按键('\')用VK_OME_102进行表示
keybd_event(VK_OEM_102, 0, 0, 0);//按下
keybd_event(VK_OEM_102, 0, 2, 0);//松开
keybd_event('A', 0, 0, 0);
keybd_event('A', 0, 2, 0);
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, 2, 0);
keybd_event('G', 0, 0, 0);
keybd_event('G', 0, 2, 0);//表示顺序按下\ang
//09.MapVirtualKey映射:
// 字典虚拟键映射
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);//按下
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 2, 0);//松开
}
else
{
keybd_event('A', 0, 0, 0);
keybd_event('A', 0, 2, 0);
keybd_event('D', 0, 0, 0);
keybd_event('D', 0, 2, 0);
keybd_event('S', 0, 0, 0);
keybd_event('S', 0, 2, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
//MessageBoxA(0, "即将推出!", "确定", 0);
//10.取消注册热键:
// NULL:表示系统
// 0x001:组合键标识ID
//UnregisterHotKey(NULL, 0x001);
//UnregisterHotKey(NULL, 0x001);
//UnregisterHotKey(NULL, 0x003);
}
}
}
//11.注册的快捷键给系统:
// 于是其他程序在运行过程中;
// 只要触发了快捷键,就会自动触发按键函数
// 触动按键(进行字符输入) //the modifier of hot key:
//#define MOD_ALT 0x0001
//#define MOD_CONTROL 0x0002
//#define MOD_SHIFT 0x0004
//--------------------------------------
//#define MOD_LEFT 0x8000
//#define MOD_RIGHT 0x4000
//--------------------------------------
//#define MOD_ON_KEYUP 0x0800
//#define MOD_IGORE_ALL_MODIFIER 0x0400

20160209.CCPP体系详解(0019天)的更多相关文章

  1. 20160129.CCPP体系详解(0008天)

    程序片段(01):函数.c+call.c+测试.cpp 内容概要:函数 ///函数.c #include <stdio.h> #include <stdlib.h> //01. ...

  2. 20160226.CCPP体系详解(0036天)

    程序片段(01):01.多线程.c+02.多线程操作.c 内容概要:多线程 ///01.多线程.c #include <stdio.h> #include <stdlib.h> ...

  3. 20160208.CCPP体系详解(0018天)

    程序片段(01):main.c 内容概要:PointWithOutInit #include <stdio.h> #include <stdlib.h> //01.野指针详解: ...

  4. 20160206.CCPP体系详解(0016天)

    代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...

  5. 20160205.CCPP体系详解(0015天)

    程序片段(01):01.杨辉三角.c 内容概要:杨辉三角 #include <stdio.h> #include <stdlib.h> #define N 10 //01.杨辉 ...

  6. 20160204.CCPP体系详解(0014天)

    程序片段(01):define.h+data.h&data.c+control.h&control.c+view.h&view.c+AI.h&AI.c+main.c 内 ...

  7. 20160203.CCPP体系详解(0013天)

    程序片段(01):数组.c+02.数组初始化语法.c 内容概要:数组 ///01.数组.c #include <stdio.h> #include <stdlib.h> //0 ...

  8. 20160128.CCPP体系详解(0007天)

    以下内容有所摘取,进行了某些整理和补充 论浮点数的存储原理:float浮点数与double浮点数的二进制存储原理–>阶码 浮点数转二进制 1.整数int类型和浮点数float类型都是占用4个字节 ...

  9. 20160127.CCPP体系详解(0006天)

    程序片段(01):msg.c 内容概要:线程概念 #include <stdio.h> #include <stdlib.h> #include <Windows.h&g ...

随机推荐

  1. springaop——AspectJ不可不知的细节

    springaop简介 springaop是spring对AOP技术的具体实现,它是spring框架的核心技术.springaop底层使用JDK动态代理或CGLIB动态代理技术实现. 应用场景: 在多 ...

  2. 拥抱开源,Office 365开发迎来新时代

    前言 作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日.自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软 ...

  3. [LeetCode] Basic Calculator III 基本计算器之三

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  4. js 一些基础的理解

    javascript(JS)的组成? DOM 文档对象模型 BOM 浏览器对象模型 ECMAScript javascript(JS)在页面中处理了什么事情? 特效交互 数据交互 逻辑操作 常见特效的 ...

  5. Spring Cloud Eureka 自我保护机制

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...

  6. “百度杯”CTF比赛 九月场_再见CMS(齐博cms)

    题目在i春秋ctf大本营 又是一道cms的题,打开御剑一通乱扫,发现后台登录地址,访问一看妥妥的齐博cms 记得以前很久以前利用一个注入通用漏洞,这里我贴上链接,里面有原理与利用方法详细说明: 齐博c ...

  7. Python 爬取猫眼电影最受期待榜

     主要爬取猫眼电影最受期待榜的电影排名.图片链接.名称.主演.上映时间. 思路:1.定义一个获取网页源代码的函数: 2.定义一个解析网页源代码的函数: 3.定义一个将解析的数据保存为本地文件的函数: ...

  8. [Codeforces 919F]A Game With Numbers

    Description 题库链接 两个人 Van♂ 游戏,每人手上各有 \(8\) 张牌,牌上数字均为 \([0,4]\) 之间的数.每个人在自己的回合选自己手牌中数字不为 \(0\) 的一张与对方手 ...

  9. Fliptile 翻格子游戏

    问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec  内存限制: 128 MB 题目描述 Farmer John knows that an intell ...

  10. [3.19FJ四校联考]

    来自FallDream的博客.未经允许,请勿转载,谢谢. ---------------------------------------------------- A.积分,不会  以后补 B.给定一 ...