迷宫

来源:互联网 发布:c语言笔试大一带答案 编辑:程序博客网 时间:2024/05/16 18:59
#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;
}



原创粉丝点击