#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;
}
分享到:
相关推荐
迷宫生成器1.0 迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫...
走迷宫 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。 要求: 1老鼠形象可辨认,可用键盘操纵老鼠上下左右移动...
《Qt C++构建的迷宫游戏详解》 在IT领域,游戏开发是一项充满挑战与创新的任务,而迷宫游戏作为经典的游戏类型,以其独特的趣味性和逻辑性吸引了众多开发者。本项目利用Qt C++框架,实现了迷宫的随机生成以及游戏...
在本文中,我们将深入探讨如何使用C++编程语言来实现一个经典的迷宫游戏。迷宫游戏是一种极具挑战性和趣味性的智力活动,它涉及到路径搜索、决策制定和算法应用。在这个项目中,我们将创建一个名为“小老鼠走迷宫”...
有一个N*M的格子迷宫,1代表该格子为墙,不能通过,0代表可以通过,另外,在迷宫中有一些传送门,走到传送门的入口即会自动被传送到传送门的出口(一次传送算1步)。人在迷宫中可以尝试上下左右四个方向移动。现在...
### 知识点一:迷宫问题背景及定义 在计算机科学中,迷宫问题是一种经典的搜索问题。题目描述了一个由0和1组成的m×n矩阵来表示迷宫,其中0表示可通行路径,1表示障碍物。目标是从迷宫的入口出发找到一条到达出口的...
从给定的C语言代码片段来看,这是一个典型的迷宫生成与解决算法的实现。下面将对这段代码涉及的关键知识点进行详细解析。 ### 迷宫生成与路径查找算法 #### 迷宫生成 在代码中,迷宫是通过一个二维数组`maze[100]...
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现要求: ⑴ 实现一个以链表作存储结构的栈类型,然后编写...
电脑鼠是一个小型的由微处理器控制的机器人车辆,在复杂迷宫中具有导航的功能。要 在指定的迷宫中比赛,如同一个人置身于竞赛,必须要靠本身的判断力、敏捷动作及正确探 测周边环境,来赢得胜利。因此它必须具备...
在计算机科学领域,迷宫问题是一个经典的问题,它涉及到路径搜索和图遍历算法。本文将深入探讨在C++环境中解决迷宫问题所涉及的知识点,包括基础的编程概念、数据结构以及算法。 首先,我们要了解C++语言基础。C++...
实现基于基础搜索算法和 Deep QLearning 算法的机器人,使机器人自动走到迷宫的出口。 使用 Python 语言。 使用基础搜索算法完成机器人走迷宫。 使用 Deep QLearning 算法完成机器人走迷宫。 使用 Maze(maze_size=...
1.迷宫问题:迷宫问题是一个经典的问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫,迷宫中设有很多隔壁,对前进方向形成了多处障碍,假设前进方向有四个,分别为上、下、左、右,心理学家在迷宫的...
在本文中,我们将深入探讨如何使用Java编程语言创建一个迷宫游戏。首先,我们要了解迷宫游戏的基本概念,然后分析两种常见的迷宫生成算法:随机布点法和图的深度优先遍历法。接着,我们将讨论如何在游戏中实现自动...
走迷宫游戏: 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处,老鼠只能按照上下左右四个方向行走。 1)图形化的...
Java迷宫课程设计是一项常见的编程练习,旨在帮助初学者掌握Java编程语言以及图形用户界面(GUI)开发。在这个项目中,我们使用了JavaFX库来创建用户界面,它是一个强大的工具,提供了丰富的功能来构建现代、动态的...
使用强化学习算法,对于给定的迷宫,训练老鼠在迷宫中寻找蛋糕。 2、必做任务二 自行生成不同迷宫(尺寸、地图),完成前述操作。 我对这个任务的理解是:程序中事先定义好了一些不同大小和样式的迷宫,供用户挑选,...
### vc++绘制迷宫游戏知识点解析 #### 一、项目概述 该项目是一个基于vc++的迷宫游戏,利用easyX库实现图形界面功能。通过分析给出的部分代码,我们可以看出这是一款简单但完整的迷宫探索游戏。 #### 二、依赖库与...
### 数据结构程序设计-迷宫问题 #### 一、需求分析 迷宫问题是计算机科学领域内的一个典型问题,常用于教学和研究数据结构与算法。本项目旨在通过设计合适的数据结构和算法,解决一个给定的迷宫问题,即找出从迷宫...
基于Prolog的迷宫系统是一种利用人工智能算法解决路径搜索问题的方法。Prolog是一种逻辑编程语言,它非常适合处理这种基于规则的问题。在这个迷宫系统中,我们主要关注以下几个关键概念: 1. **迷宫图**:迷宫图是...