📄 main.cpp
字号:
#include <windows.h>
#include <stdio.h>
#include "resource.h"
HWND hWnd,hwndd;//窗口句丙
MSG msgd,msg;//消息句丙
WNDCLASSEX wc;//注册窗口结构
int map[15][20];
int man[15][20],fx;
HBITMAP hmap,hbg,hadg;// 绘制平面
HDC hdc,htdc,hadc,hbdc;
HGDIOBJ hold;
HPEN hpen;
HANDLE hback,hman;
bool fs;
char szbuffer[45];
int g=0,box=0;
TCHAR tmpText[50];
FILE *fp;
struct _Date
{
int m_map[15][20];
}CDate[100];
struct _Date aate[100];
LRESULT CALLBACK DProc(HWND hWndd, UINT msgd, WPARAM wParam, LPARAM lParam,HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM,HINSTANCE);
void LoadDate(int g); //数据初始化
void InitBitmap(HWND hWnd); //平面初始化
void Redraw(); //绘制
bool Pan();
void ReleaseTbox(HWND hWnd);
void COpenFile();
void SetData();
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
if(!hPrevInstance)
{
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbWndExtra = 0;
wc.cbClsExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_WINICON);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground= (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = (LPCTSTR)IDR_MENU;
wc.lpszClassName= "Game";
wc.hIconSm = NULL;
RegisterClassEx(&wc);
}
hWnd= CreateWindow("Game", "推箱子1.0", WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
190, 140, 646, 524, NULL, NULL, hInstance, NULL);
if(!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hback = LoadImage(hInstance, "pic/back.bmp",IMAGE_BITMAP,160,32,LR_LOADFROMFILE);
hman = LoadImage(hInstance, "pic/man.bmp",IMAGE_BITMAP,128,64,LR_LOADFROMFILE);
COpenFile();
LoadDate(g);
InitBitmap(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
ReleaseTbox(hWnd);
UnregisterClass("Game", wc.hInstance);
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam,HINSTANCE hInstance)
{
switch (msg)
{
case WM_CREATE:
SetTimer(hWnd,1,100,NULL);
hpen=CreatePen(PS_SOLID,5,RGB(255,0,0));
break;
case WM_PAINT:
Redraw();
ValidateRect(hWnd,NULL);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDR_MENU1:
SetData();
break;
case IDR_MENU2:
if( g<100 )
{
g++;
}
SetData();
break;
case IDR_MENU3:
if(g>0)
{
g--;
}
SetData();
break;
case IDR_EXIT:
PostQuitMessage(0);
break;
}
Redraw();
break;
case WM_KEYDOWN:
if(wParam==VK_LEFT)
{
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
if(man[i][j]==2)
{
if(man[i][j-1]==3)
{
if(map[i][j-2]!=4 && man[i][j-2]!=3)
{
man[i][j-1]=2;
man[i][j]=0;
man[i][j-2]=3;
}
}
else
{
if(map[i][j-1]!=4)
{
man[i][j-1]=2;
man[i][j]=0;
}
}
fx=1;
}
}
}
}
if(wParam==VK_RIGHT)
{
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
if(man[i][j]==2)
{
if(man[i][j+1]==3)
{
if(map[i][j+2]!=4 && man[i][j+2]!=3)
{
man[i][j+1]=2;
man[i][j]=0;
man[i][j+2]=3;
}
}
else
{
if(map[i][j+1]!=4)
{
man[i][j+1]=2;
man[i][j]=0;
}
}
fx=0;
goto e1;
}
}
}
}
e1:
if(wParam==VK_UP)
{
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
if(man[i][j]==2)
{
if(man[i-1][j]==3)
{
if(map[i-2][j]!=4 && man[i-2][j]!=3)
{
man[i-1][j]=2;
man[i][j]=0;
man[i-2][j]=3;
}
}
else
{
if(map[i-1][j]!=4)
{
man[i-1][j]=2;
man[i][j]=0;
}
}
fx=2;
}
}
}
}
if(wParam==VK_DOWN)
{
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
if(man[i][j]==2)
{
if(man[i+1][j]==3)
{
if(map[i+2][j]!=4 && man[i+2][j]!=3)
{
man[i+1][j]=2;
man[i][j]=0;
man[i+2][j]=3;
}
}
else
{
if(map[i+1][j]!=4)
{
man[i+1][j]=2;
man[i][j]=0;
}
}
fx=3;
goto e2;
}
}
}
}
e2:
if(wParam==VK_F3)
{
box=0;
ReleaseTbox(hWnd);
LoadDate(g);
for(int i=0;i<15;i++){
for(int n=0;n<20;n++){
man[i][n]=0;
}
}
InitBitmap(hWnd);
}
if(wParam==VK_F1)
{
if(g>0)
{
g--;
}
box=0;
ReleaseTbox(hWnd);
LoadDate(g);
for(int i=0;i<15;i++){
for(int n=0;n<20;n++){
man[i][n]=0;
}
}
InitBitmap(hWnd);
}
if(wParam==VK_F2)
{
if( g<99 )
{
g++;
}
box=0;
ReleaseTbox(hWnd);
LoadDate(g);
for(int i=0;i<15;i++){
for(int n=0;n<20;n++){
man[i][n]=0;
}
}
InitBitmap(hWnd);
}
break;
case WM_TIMER:
if(!Pan())
{
g++;
box=0;
ReleaseTbox(hWnd);
LoadDate(g);
for(int i=0;i<15;i++){
for(int n=0;n<20;n++){
man[i][n]=0;
}
}
InitBitmap(hWnd);
}
Redraw();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK DProc(HWND hWndd, UINT msgd, WPARAM wParam, LPARAM lParam,HINSTANCE hInstance)
{
switch(msgd){
case WM_INITDIALOG:
if(fs)
{
LoadString(hInstance,IDS_TRUE,szbuffer,45);
SetDlgItemText(hWndd,IDC_S1,szbuffer);
}
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_DOWN)
{
EndDialog(hWndd, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
void LoadDate(int g)
{
for(int n=0;n<15;n++)
{
for(int h=0;h<20;h++)
{
map[n][h]=0;
}
}
for(int j=0;j<15;j++)
{
for(int i=0;i<20;i++)
{
map[j][i]=aate[g].m_map[j][i];
}
}
sprintf(tmpText,"推箱子1.0--------第%d关",g);
SetWindowText(hWnd,tmpText);
}
void InitBitmap(HWND hWnd)
{
hdc=GetDC(hWnd);
htdc=CreateCompatibleDC(hdc);
hadc=CreateCompatibleDC(hdc);
hbdc = CreateCompatibleDC(hdc);
hmap=CreateCompatibleBitmap(hdc, 640, 480);
hadg=CreateCompatibleBitmap(hdc, 640, 480);
SelectObject(htdc,hmap);
SelectObject(hbdc,hadg);
for(int j=0;j<15;j++)
{
for(int i=0;i<20;i++)
{
switch (map[j][i])
{
case 1:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32, hadc, 0, 0, SRCCOPY);
SelectObject(hadc,hold);
break;
case 2:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32,hadc,32,0,SRCCOPY);
SelectObject(hadc,hold);
man[j][i]=2;
break;
case 3:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32,hadc,32,0,SRCCOPY);
SelectObject(hadc,hold);
man[j][i]=3;
box++;
break;
case 4:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32,hadc,128,0,SRCCOPY);
SelectObject(hadc,hold);
break;
case 5:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32,hadc,64,0,SRCCOPY);
SelectObject(hadc,hold);
break;
case 6:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32,hadc,32,0,SRCCOPY);
SelectObject(hadc,hold);
break;
}
}
}
hold=SelectObject(hdc,hpen);
SelectObject(hbdc,hold);
BitBlt(hadc,0,0,640,480,htdc,0,0,SRCCOPY);
Redraw();
}
void Redraw()
{
BitBlt(hbdc,0,0,640,480,htdc,0,0,SRCCOPY);
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
switch(man[i][j])
{
case 2:
hold=SelectObject(hadc,hman);
BitBlt(hbdc,j*32,i*32,32,32,hadc,fx*32,32,SRCAND);
BitBlt(hbdc,j*32,i*32,32,32,hadc,fx*32,0,SRCPAINT);
SelectObject(hadc,hold);
break;
case 3:
hold=SelectObject(hadc,hback);
BitBlt(hbdc,j*32,i*32,32,32,hadc,96,0,SRCCOPY);
SelectObject(hadc,hold);
break;
}
}
}
hold=SelectObject(hdc,hpen);
SelectObject(hbdc,hold);
BitBlt(hdc,0,0,640,480,hbdc,0,0,SRCCOPY);
}
bool Pan()
{
if(map[7][10]==0){
g--;
SetData();
MessageBox(hWnd,"此关无地图数据","END",MB_OK);
}
else
{
int a=0;
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
if(man[i][j]==3 && map[i][j]==5)
{
a++;
}
}
}
if(a==box)
{
return false;
}
}
return true;
}
void COpenFile(){
if((fp=fopen("Data/map.dat","r"))==NULL)
{
MessageBox(hWnd,"无法打开地图数据","警告",MB_OK);
}
for(int i=0;i<100;i++){
fread(&aate[i],sizeof(struct _Date),1,fp);
}
fclose(fp);
}
void ReleaseTbox(HWND hWnd)
{
SelectObject(htdc,hold);
DeleteObject(hmap);
DeleteObject(hbg);
DeleteObject(hadg);
DeleteDC(hadc);
DeleteDC(htdc);
DeleteDC(hbdc);
ReleaseDC(hWnd,hdc);
}
void SetData(){
box=0;
ReleaseTbox(hWnd);
LoadDate(g);
for(int i = 0;i<15;i++){
for(int n =0;n<20;n++){
man[i][n]=0;
}
}
InitBitmap(hWnd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -