📄 主程序.cpp
字号:
/*********************************************
程序设计:罗穆峰 2008-11-20
http://lmf.biaotian.com
E-mail: lmf@biaotian.com
QQ: 16324942 [模范英雄]
*********************************************/
#include "Graph.h"
#include "GraphMan.h"
#include "Sound.h"
#include "SoundMan.h"
#include "Game.h"
#include "Control.h"
CGraph gGraph;
CGraphMan gGraphMan;
CSound gSound;
CSoundMan gSoundMan;
CControl gControl;
CGame gGame;
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
int KeyState;
switch(uMsg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_PAINT://刷新显示
BeginPaint(hWnd,&ps);
BitBlt(ps.hdc,0,0,288,256,gGraph.GetMemDC(),0,0,SRCCOPY);
EndPaint(hWnd,&ps);
break;
case WM_TIMER:
gControl.Clock();//向游戏控制器发送时钟信号
break;
case WM_KEYDOWN:
case WM_KEYUP:
//检查各个按键的状态
KeyState=0;
if(GetKeyState(VK_UP)&0x80000000)KeyState|=1<<0;
if(GetKeyState(VK_DOWN)&0x80000000)KeyState|=1<<1;
if(GetKeyState(VK_LEFT)&0x80000000)KeyState|=1<<2;
if(GetKeyState(VK_RIGHT)&0x80000000)KeyState|=1<<3;
if(GetKeyState('W')&0x80000000)KeyState|=1<<4;
if(GetKeyState('Q')&0x80000000)KeyState|=1<<5;
if(GetKeyState(VK_RETURN)&0x80000000)KeyState|=1<<6;
gControl.KeyChanged(KeyState);
break;
default:
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return 0;
}
int main()
{
//从资源文件中加载声音数据
HMODULE hModule=GetModuleHandle(NULL);
HRSRC hrSrc;
hrSrc=FindResource(hModule,"BackMusic1","WAVE");
BackMusic_Len[0]=SizeofResource(hModule,hrSrc);
BackMusic_Sound[0]=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"BackMusic2","WAVE");
BackMusic_Len[1]=SizeofResource(hModule,hrSrc);
BackMusic_Sound[1]=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"AttackDemon","WAVE");
AttackDemon_Len=SizeofResource(hModule,hrSrc);
AttackDemon_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"AttackMario","WAVE");
AttackMario_Len=SizeofResource(hModule,hrSrc);
AttackMario_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"Block","WAVE");
Block_Len=SizeofResource(hModule,hrSrc);
Block_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"Bullet","WAVE");
Bullet_Len=SizeofResource(hModule,hrSrc);
Bullet_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"Coin","WAVE");
Coin_Len=SizeofResource(hModule,hrSrc);
Coin_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"Death","WAVE");
Death_Len=SizeofResource(hModule,hrSrc);
Death_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"EatFlower","WAVE");
EatFlower_Len=SizeofResource(hModule,hrSrc);
EatFlower_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"FlowerRise","WAVE");
FlowerRise_Len=SizeofResource(hModule,hrSrc);
FlowerRise_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"Jump","WAVE");
Jump_Len=SizeofResource(hModule,hrSrc);
Jump_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"KillDemon","WAVE");
KillDemon_Len=SizeofResource(hModule,hrSrc);
KillDemon_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
hrSrc=FindResource(hModule,"BrickBroken","WAVE");
BrickBroken_Len=SizeofResource(hModule,hrSrc);
BrickBroken_Sound=(char*)LockResource(LoadResource(hModule,hrSrc));
//注册一个窗口类
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(NULL_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hInstance=GetModuleHandle(NULL);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.lpfnWndProc=WndProc;
wc.lpszClassName="MarioWnd";
wc.lpszMenuName=NULL;
wc.style=0;
RegisterClass(&wc);
//创建主窗口
HWND hMainWnd=CreateWindow("MarioWnd","采磨菇",WS_OVERLAPPED|WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,288,256,NULL,NULL,wc.hInstance,NULL);
//调整主窗口客户区的大小为288*256
RECT rect;
GetClientRect(hMainWnd,&rect);
rect.right=288+(288-rect.right);
rect.bottom=256+(256-rect.bottom);
SetWindowPos(hMainWnd,NULL,0,0,rect.right,rect.bottom,SWP_NOZORDER|SWP_NOMOVE);
//显示主窗口
ShowWindow(hMainWnd,SW_SHOW);
//将各个类连接起来
gGraph.Init(hMainWnd);
gGraphMan.SetGraph(&gGraph);
gGraphMan.SetGame(&gGame);
gSound.Init();
gSoundMan.SetSound(&gSound);
gControl.SetGraph(&gGraphMan);
gControl.SetGame(&gGame);
gGame.SetSound(&gSoundMan);
//启动定时器
SetTimer(hMainWnd,1,50,NULL);
//进入消息循环
MSG msg;
while(GetMessage(&msg,NULL,NULL,NULL))
{
DispatchMessage(&msg);
}
gGraph.UnInit();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -