📄 main.cpp
字号:
#include <windows.h>
#include <stdio.h>
#include "resource.h"
HWND hWnd;
MSG msg;
WNDCLASSEX wc;
int map[15][20];
TCHAR tmpText[50];
int m,n,s,Gname=0;
HBITMAP hmap,hbg;// 绘制平面
HDC hdc,htdc,hadc;
HGDIOBJ hold;
HPEN hpen;
HANDLE hback,hman;
FILE *fp;
struct _Date
{
int m_map[15][20];
}CDate[100];
struct _Date aate[100];
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM,HINSTANCE);
void SaveDate();
void LoadDate(int);
void InitBitmap(HWND hWnd);
void Redraw();
void COpenFile();
void ReleaseTbox(HWND hWnd);
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(hInstance,(LPCTSTR)IDC_CURSOR);
wc.hbrBackground= (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = (LPCSTR)IDR_MENU;
wc.lpszClassName= "Game";
wc.hIconSm = NULL;
RegisterClassEx(&wc);
}
hWnd= CreateWindow("Game", "推箱子地图编辑器", 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(0);
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,50,NULL);
hpen=CreatePen(PS_SOLID,5,RGB(255,0,0));
break;
case WM_PAINT:
Redraw();
ValidateRect(hWnd,NULL);
break;
case WM_LBUTTONDOWN:
m=(LOWORD(lParam)+16)/32;
n=(HIWORD(lParam)+16)/32;
map[n][m]=s;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDM_SAVE:
SaveDate();
break;
case ID_M1:
if(Gname<99){
Gname++;
}
LoadDate(Gname);
break;
case ID_M2:
if(Gname>0){
Gname--;
}
LoadDate(Gname);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
}
Redraw();
break;
case WM_KEYDOWN:
if(wParam==VK_F1)
{
s=1;
}
if(wParam==VK_F2)
{
s=2;
}
if(wParam==VK_F3)
{
s=3;
}
if(wParam==VK_F4)
{
s=4;
}
if(wParam==VK_F5)
{
s=5;
}
if(wParam==VK_F6)
{
s=6;
}
if(wParam==VK_RIGHT){
if(Gname<99){
Gname++;
}
LoadDate(Gname);
}
if(wParam==VK_LEFT){
if(Gname>0){
Gname--;
}
LoadDate(Gname);
}
if(wParam==VK_UP){
if(Gname>0){
Gname--;
}
LoadDate(Gname);
}
if(wParam==VK_DOWN){
if(Gname<99){
Gname++;
}
LoadDate(Gname);
}
break;
case WM_TIMER:
Redraw();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
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关",Gname);
SetWindowText(hWnd,tmpText);
}
void InitBitmap(HWND hWnd)
{
hdc=GetDC(hWnd);
htdc=CreateCompatibleDC(hdc);
hadc=CreateCompatibleDC(hdc);
hmap=CreateCompatibleBitmap(hdc, 640, 480);
SelectObject(htdc,hmap);
hold=SelectObject(hdc,hpen);
SelectObject(htdc,hold);
BitBlt(hdc,0,0,640,480,htdc,0,0,SRCCOPY);
Redraw();
}
void Redraw() //绘制
{
for(int j=0;j<15;j++)
{
for(int i=0;i<20;i++)
{
switch (map[j][i])
{
case 0:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32, hadc, 0, 0, SRCCOPY);
SelectObject(hadc,hold);
map[j][i]=1;
break;
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);
hold=SelectObject(hadc,hman);
BitBlt(htdc,i*32,j*32,32,32,hadc,0,32,SRCAND);
BitBlt(htdc,i*32,j*32,32,32,hadc,0,0,SRCPAINT);
SelectObject(hadc,hold);
break;
case 3:
hold=SelectObject(hadc,hback);
BitBlt(htdc,i*32,j*32,32,32,hadc,96,0,SRCCOPY);
SelectObject(hadc,hold);
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(htdc,hold);
BitBlt(hdc,0,0,640,480,htdc,0,0,SRCCOPY);
}
void SaveDate()
{
if((fp=fopen("Data/map.dat","w"))==NULL)
{
MessageBox(hWnd,"无法打开地图数据","警告",MB_OK);
}
for(int j=0;j<15;j++)
{
for(int i=0;i<20;i++)
{
aate[Gname].m_map[j][i]=map[j][i];
}
}
for(int n=0;n<100;n++){
fwrite(&aate[n],sizeof(struct _Date),1,fp);
}
fclose(fp);
}
void COpenFile(){
if((fp=fopen("Data/map.dat","r"))==NULL)
{
MessageBox(hWnd,"无法打开地图数据,要新建一个地图文件","警告",MB_OK);
fp=fopen("Data/map.dat","w");
for(int n=0;n<100;n++){
fwrite(&aate[n],sizeof(struct _Date),1,fp);
}
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(hback);
DeleteObject(hman);
DeleteDC(hadc);
DeleteDC(htdc);
ReleaseDC(hWnd,hdc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -