while(1)
{
if( PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))//消息循环
{
if (!GetMessage(&msg,NULL,0,0))//接收消息
{
return msg。wParam;
}
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//处理消息
}
else if( bActive)
{
UpdateFrame();
}
else
{
WaitMessage();
}
}
KillTimer(hwnd,1);//时钟停止
return msg。wParam;
}
键盘运用后,要先对其进行构造, 构造函数主要调用WindowFunc函数:
LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_ACTIVATEAPP://
bActive = wParam;
break;
游戏构造后,要进行游戏中各种页面的创建,主要运用了directdraw来对游戏形象进行创建。Directdraw主要用于视频的输入输出,通过DirectDraw,视频处理程序以更加方便快捷的方式来进行高效的编写。DirectDraw提供了完成管理多页面 、直接访问视频RAM 、换页、后台缓存、管理调色板、裁剪和视频端口的工具[11]。创建DirectDraw 对象一个实例如下,
DirectDrawCreate(NULL, &lpDD, NULL);
该实例中lpDD是调用DirectDrawCreate 函数创建的DirectDraw对象的指针,指向DirectDraw对象的地址。之后可以通过调用IDirectDraw::SetCooperativeLevel和IDirectDraw::SetDisplayMode 方法来设定模式要求和选择显示分辨率[12]。设置模式为协作模式后,通过调用IDirectDrawSurface函数进行主页面和离屏页面的创建,实例如下:
//创建主页面
lpDD->CreateSurface(&ddsd, &lpDDSFront, NULL);
//创建离屏页面
lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL );
当窗口模式设置为协作级别,主页面和离屏页面创建后,则可以开始进行游戏中重要元素—游戏形象的创建,实例如下:
//创建老鼠页面
lpDD->CreateSurface( &ddsd, &lpDDSMouse[0], NULL );
DDReLoadBitmap(lpDDSMouse[0], "MOUSE00。BMP");
DDSetColorKey(lpDDSMouse[0],RGB(0,0,255));
本段程序中,老鼠形象通过函数DDReLoadBitmap调用设计好的BMP图像,MOUSE00老鼠图像分别对应上文中的黄老鼠。灰老鼠和粉老鼠图像同理对应MOUSE01和MOUSE02,程序同上,这里不再详细诉说。文献综述
//创建木锤
lpDD->CreateSurface( &ddsd, &lpDDSHammer, NULL );
DDReLoadBitmap(lpDDSHammer, "HAM。BMP");
DDSetColorKey(lpDDSHammer,RGB(0,0,255));
同创建老鼠形象一样,也是通过函数调用以HAM。BMP为名的木槌形象,木槌形象如图4所示
图4 木槌形象
同理,可以通过函数DDReLoadBitmap调用图片,依次完成火花、标题、背景、时间和分数页面的创建。最后进行Clipper裁剪器的创建,Clipper裁剪器也是用DirectDraw进行创建。到此,游戏的前期工作已准备完毕。
3。3。2 进入游戏界面
在弹出游戏窗口后,根据游戏界面logo的提示,点击游戏页面任意处开始游戏。会弹出一个对话框,如图5所示:
图5 弹出的对话框
弹出的对话框的主要作用是向玩家介绍游戏的玩法和注意事项,实现这一现象的程序如下,主要是用来初始化老鼠洞:
for (i =0 ;i<9;i++)
{
mouse[i] = 0;
status[i] = 0;
behit[i] = 0;
}
MessageBox(hwnd,"游戏开始咯!\n黄色的老鼠只要打一下\n灰色的老鼠要连续打三下\n粉红色的老鼠不要随便打哦\n时间限制20秒\n打掉一只灰色的老鼠可以加1秒\n","注意啦!",MB_OK);