//By Vonger Chin
#include <windows.h>
#include "resource.h"
#define C_START 6
#define C_W_SIZE 150
#define C_H_SIZE 150
#define C_DISTANCE 2
HDC MainDC, ImageDC;
char Matrix[3][4] = {-2, 0, 8, 2, -1, 6, 5, 7,-1, 4, 1, 3};//打乱的顺序-2为空白,-1为不可移区域
char Matrix_Orig[3][4] = {-2, 0, 1, 2, -1, 3, 4, 5,-1, 6, 7, 8};//正常顺序
void LoadBitmapToDC(HINSTANCE hInst, TCHAR* FileName)
{
HANDLE hBitmap;
hBitmap = ::LoadImage(hInst, FileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
ImageDC = ::CreateCompatibleDC(NULL);
::SelectObject(ImageDC, hBitmap);
}
void RedrawMatrix()
{
for(int j = 0; j < 4; j++)
for(int i = 0; i < 3; i++)
if(Matrix[i][j] >= 0)
::BitBlt(MainDC, C_START+j*(C_W_SIZE+C_DISTANCE), C_START+i*(C_H_SIZE+C_DISTANCE),
C_W_SIZE, C_H_SIZE, ImageDC, Matrix[i][j]%3*C_W_SIZE, Matrix[i][j]/3*C_H_SIZE, SRCCOPY);
}
void GameMain(WPARAM wParam)
{
static int PosX, PosY;//空格的位置
if(wParam == VK_RIGHT && PosY-1 >= 0 && Matrix[PosX][PosY-1] >= 0)
Matrix[PosX][PosY] = Matrix[PosX][PosY---1];
else if(wParam == VK_LEFT && PosY+1 < 4 && Matrix[PosX][PosY+1] >= 0)
Matrix[PosX][PosY] = Matrix[PosX][PosY+++1];
else if(wParam == VK_DOWN && PosX-1 >= 0 && Matrix[PosX-1][PosY] >= 0)
Matrix[PosX][PosY] = Matrix[PosX---1][PosY];
else if(wParam == VK_UP && PosX+1 < 3 && Matrix[PosX+1][PosY] >= 0)
Matrix[PosX][PosY] = Matrix[PosX+++1][PosY];
Matrix[PosX][PosY] = -2;
}
LRESULT _stdcall MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_KEYUP:
GameMain(wParam);
::InvalidateRect(hWnd, 0, true);
if(!::memcmp(Matrix, Matrix_Orig,sizeof(char)*12))
MessageBox(NULL, TEXT("YOU WIN!!!"), TEXT("Notice"), MB_OK|MB_ICONWARNING);
break;
case WM_PAINT:
MainDC = ::BeginPaint(hWnd, &ps);
RedrawMatrix();
::EndPaint(hWnd, &ps);
break;
case WM_CLOSE:
if(ImageDC)::DeleteDC(ImageDC);
::EndDialog(hWnd, 1);
break;
}
return 0;
}
int _stdcall ::WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
{
LoadBitmapToDC(hInstance, TEXT(".\\Main.bmp"));
return (int)::DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, (DLGPROC)MainProc);
}
只有72行的拼图,Windows API编写
5星 · 超过95%的资源 需积分: 10 137 浏览量
2008-04-13
12:11:50
上传
评论 1
收藏 344KB RAR 举报
Vonger
- 粉丝: 43
- 资源: 7
最新资源
- SSCMS登录模块需要的JS文件
- JSP网络购物中心毕业设计(源代码+论文).rar
- 白盒测试报告.docx
- 基于LM5117芯片评估开发板硬件参考设计(原理图+PCB)+中英文数据手册资料.zip
- 照片批量重命名软件(文件批量修改图片文件名)
- app.apk
- 人工智能(AI)是计算机科学的一个分支,旨在开发和应用能够模拟、延伸和扩展人类智能的理论、方法和技术,包括机器人、语言识别、图像
- 嵌入式与物联网开发是当今信息技术领域的两大重要分支,它们相互交织,共同推动着智能化时代的进步 嵌入式开发主要关注在嵌入式操作
- 网络安全,这一看似高深莫测的领域,实则与我们每个人的生活息息相关
- 毕业设计基于深度学习的视觉问答系统源码+文档说明+答辩PPT.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈