迷宫

#include <windows.h>
#include "StdAfx.h"
#include <stdio.h>
TCHAR szTitle[32]=TEXT("迷宫"); //窗口的标题
TCHAR szWindowClass[32]=TEXT("Simple"); //窗口的名称
HINSTANCE hInst;
HDC hdc,mdc;
HBITMAP wall = (HBITMAP)LoadImage(NULL,TEXT("res/wall.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HBITMAP man = (HBITMAP)LoadImage(NULL,TEXT("res/man.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HBITMAP door = (HBITMAP)LoadImage(NULL,TEXT("res/door.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HWND hWnd;
PAINTSTRUCT ps;


int map[10][12]={
0,0,0,0,0,0,0,0,0,0,0,0,
2,1,0,1,1,1,0,0,0,0,0,0,
0,1,0,1,0,1,1,0,1,1,1,3,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,1,1,0,1,0,1,1,1,1,0,
0,0,0,0,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
};


int maps[10][12]={
0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,1,1,1,0,0,0,0,0,0,
0,1,0,1,0,1,1,0,1,1,1,2,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,0,1,0,1,0,1,0,0,1,0,
0,1,1,1,0,1,0,1,1,1,1,0,
0,0,0,0,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
};




static int h,l,g=1;
void win();
void white(HDC hdc);
void Playgame(WPARAM wParam);
void Initpaint(HDC hdc);
ATOM MyRegisterClass(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);




int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;


MyRegisterClass(hInstance);
//注册窗口类


if (!InitInstance (hInstance, nCmdShow)) //初始化窗口
{
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0)) //消息循环
{
TranslateMessage(&msg); //消息解释
DispatchMessage(&msg); //消息发送
}

return msg.wParam;
}






ATOM MyRegisterClass(HINSTANCE hInstance)
{


WNDCLASSEX wc;

wc.cbSize= sizeof(WNDCLASSEX);
wc.style= CS_HREDRAW | CS_VREDRAW |CS_OWNDC;
wc.lpfnWndProc= (WNDPROC)WndProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance= hInstance; //实例句柄
wc.hIcon= LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = szWindowClass;
wc.hIconSm = LoadIcon(wc.hInstance, (LPCTSTR)IDI_APPLICATION);

return RegisterClassEx(&wc);
}


//初始化窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst=hInstance;



//创建窗口


hWnd = CreateWindow( szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW&~WS_SIZEBOX&~WS_MAXIMIZEBOX, //窗口式样
200,
100,
600,
525,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow); //显示窗口

hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
Initpaint(hdc);


//UpdateWindow(hWnd);

return TRUE;
}


void Initpaint(HDC hdc)
{
if(g == 1)
{
ReleaseDC(hWnd,hdc);
DeleteDC(hdc);
for(int i=0;i<10;i++)
{
for(int j=0;j<12;j++)
{
switch(map[i][j])
{
case 0:SelectObject(mdc,wall);
BitBlt(hdc,j*50,i*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
break;

case 2:SelectObject(mdc,man);
BitBlt(hdc,j*50,i*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
h = i;
l = j;
break;

case 3:SelectObject(mdc,door);
BitBlt(hdc,j*50,i*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
break;
}
}
}
}
else{
for(int i=0;i<10;i++)
{
for(int j=0;j<12;j++)
{
switch(maps[i][j])
{
case 0:SelectObject(mdc,wall);
BitBlt(hdc,j*50,i*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
break;

case 2:SelectObject(mdc,man);
BitBlt(hdc,j*50,i*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
h = i;
l = j;
break;

case 3:SelectObject(mdc,door);
BitBlt(hdc,j*50,i*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
break;
}
}
}


}
}
void Playgame(WPARAM wParam)//走起来
{
if(g==1){
switch(wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
case VK_UP:
if(h-1>0&&map[h-1][l] >0)
{
SelectObject(mdc,man);
BitBlt(hdc,l*50,(h-1)*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
h--;
win();
}
break;
case VK_DOWN:
if(h+1<10&&map[h+1][l] >0 )
{
SelectObject(mdc,man);
BitBlt(hdc,l*50,(h+1)*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
h++;
win();
}
break;
case VK_LEFT:
if(l-1>0&&map[h][l-1] >0)
{
SelectObject(mdc,man);
BitBlt(hdc,(l-1)*50,h*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
l--;
win();
}
break;
case VK_RIGHT:
if(l+1<12&&map[h][l+1] >0)
{
SelectObject(mdc,man);
BitBlt(hdc,(l+1)*50,h*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
l++;
win();



}
break;






}
}
else if(g==2)
{






switch(wParam)
{



case VK_ESCAPE:
PostQuitMessage(0);
break;
case VK_UP:
if(h-1>0&&maps[h-1][l] >0)
{
SelectObject(mdc,man);
BitBlt(hdc,l*50,(h-1)*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
h--;
win();
}
break;
case VK_DOWN:
if(h+1<10&&maps[h+1][l] >0 )
{
SelectObject(mdc,man);
BitBlt(hdc,l*50,(h+1)*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
h++;
win();
}
break;
case VK_LEFT:
if(l-1>0&&maps[h][l-1] >0)
{
SelectObject(mdc,man);
BitBlt(hdc,(l-1)*50,h*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
l--;
win();
}
break;
case VK_RIGHT:
if(l+1<12&&maps[h][l+1] >0)
{
SelectObject(mdc,man);
BitBlt(hdc,(l+1)*50,h*50,50,50,mdc,0,0,SRCCOPY);
//ReleaseDC(hWnd,hdc);
white(hdc);
l++;
win();


}
break;
}




}
}


void white(HDC hdc)//覆盖
{
hdc=GetDC(hWnd);
HPEN hpen;//获得笔
hpen=CreatePen(PS_DASH,10,RGB(255,255,255));
SelectObject(hdc,hpen);


HBRUSH hbrush=CreateSolidBrush(RGB(255,255,255));
SelectObject(hdc,hbrush);
Rectangle(hdc,l*50+5,h*50+5,l*50+50-5,h*50+50-5);

}


void win()//判断过关
{
if(g == 1)
{
if(map[h][l]==3)
{
g++;
IDYES==MessageBox(hWnd,TEXT("恭喜过关!第二关?"),TEXT("提示"),MB_YESNO);
Initpaint(hdc);



}
}
else if(g == 2 )
{
if(maps[h][l] == 3)
{
IDYES==MessageBox(hWnd,TEXT("恭喜你通关了!是否退出?"),TEXT("提示"),MB_YESNO);
PostQuitMessage(0);
}
}
}


//窗口消息处理
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ //TCHAR d[20];
PAINTSTRUCT ps;
HDC hdc = GetDC(hWnd);
switch (message)
{
case WM_CREATE:
break;


case WM_PAINT: //hdc = GetDC(hWnd);
hdc = BeginPaint(hWnd,&ps);
Initpaint(hdc);
ReleaseDC(hWnd,hdc);
DeleteDC(hdc);
EndPaint(hWnd,&ps);
break;
case WM_KEYDOWN:
Playgame(wParam) ;
break;


case WM_DESTROY:

PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);


}
return 0;
}



你可能感兴趣的:(迷宫)