📄 qipanfugai.cpp
字号:
#include<windows.h>
#include"resource.h"
int x1=89,x2=402;
int y1=91,y2=420;
int dx=39,dy=41;
int x,y; //画格
int grid[9][9]; //从1开始
int i=0,j=0; //控制变量
HDC hdcmem;
HBITMAP hBm[5];
bool IsGiveT;
int Tr,Tl; //特殊行、列,从1开始
void ChessBoard(int LR,int LL,int tr,int tl,int size);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="棋盘覆盖";
char lpszTitle[]="棋盘覆盖";
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
wndclass.hCursor=LoadCursor(NULL,IDI_APPLICATION);
wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName=MAKEINTRESOURCE(IDM_MENU1);
wndclass.lpszClassName=lpszClassName;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd=CreateWindow(lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW|WS_POPUP, //WS_OVERLAPPEDWINDOW最上顶蓝条
400,
50,
500,
530,
NULL,
NULL,
hInstance,
NULL);
hBm[0]=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP0));
hBm[1]=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
hBm[2]=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP2));
hBm[3]=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP3));
hBm[4]=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP4));
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT ps;
case WM_CREATE:
for(i=1;i<9;i++)
for(j=1;j<9;j++)
{
grid[i][j]=0;
}
IsGiveT=0;
hDC=GetDC(hwnd);
hdcmem=CreateCompatibleDC(hDC);
ReleaseDC(hwnd,hDC);
break;
case WM_PAINT:
hDC=BeginPaint(hwnd,&ps);
hPen=(HPEN)GetStockObject(BLACK_PEN);
hBrush=CreateSolidBrush(RGB(20,150,200));
SelectObject(hDC,hPen);
SelectObject(hDC,hBrush);
Rectangle(hDC,x1,y1,x2,y2); //构造游戏场所
for(i=1;i<9;i++)
for(j=1;j<9;j++)
{
grid[i][j]=0;
}
for(y=y1+dy;y<=y2;)
{
MoveToEx(hDC,x1,y,NULL);
LineTo(hDC,x2,y);
y+=dy;
}
for(x=x1+dx;x<=x2;)
{
MoveToEx(hDC,x,y1,NULL);
LineTo(hDC,x,y2);
x+=dx;
}
EndPaint(hwnd,&ps);
break;
case WM_LBUTTONDOWN:
if(!IsGiveT)
{
IsGiveT=1;
GetMessagePos(); //
hDC=GetDC(hwnd);
if(LOWORD(lParam)<x2&&LOWORD(lParam)>x1&&HIWORD(lParam)<y2&&HIWORD(lParam)>y1) //
{
i=(LOWORD(lParam)-x1)/dx; //从0开始
j=(HIWORD(lParam)-y1)/dy;
Tr=i+1; //从1开始
Tl=j+1;
SelectObject(hdcmem,hBm[0]);
BitBlt(hDC,(x1+i*dx)+1,(y1+j*dy)+1,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
}
ReleaseDC(hwnd,hDC);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_CHESSBOARD:
//
if(IsGiveT)
{
hDC=GetDC(hwnd);
ChessBoard(1,1,Tr,Tl,8); //LR=1,LL=1,tr=Tt,tl=Tl,size=8(2的k次方)
for(i=1;i<9;i++)
for(j=1;j<9;j++)
{
switch(grid[i][j])
{
case 0:
break;
case 1:
SelectObject(hdcmem,hBm[1]);
BitBlt(hDC,(x1+(i-1)*dx)+1,(y1+(j-1)*dy)+1,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
break;
case 2:
SelectObject(hdcmem,hBm[2]);
BitBlt(hDC,(x1+(i-1)*dx)+1,(y1+(j-1)*dy)+1,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
break;
case 3:
SelectObject(hdcmem,hBm[3]);
BitBlt(hDC,(x1+(i-1)*dx)+1,(y1+(j-1)*dy)+1,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
break;
case 4:
SelectObject(hdcmem,hBm[4]);
BitBlt(hDC,(x1+(i-1)*dx)+1,(y1+(j-1)*dy)+1,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
break;
default:
break;
}
}
ReleaseDC(hwnd,hDC);
}
else
MessageBox(hwnd,"没给特殊格","警告",MB_OK);
break;
case IDM_RESET:
if(IsGiveT)
{
InvalidateRect(hwnd,NULL,1);
IsGiveT=0;
}
break;
case IDM_STATE:
hDC=GetDC(hwnd);
SelectObject(hdcmem,hBm[0]);
BitBlt(hDC,25,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem,hBm[1]);
BitBlt(hDC,50+dx,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,50+2*dx,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,50+dx,3+dy,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem,hBm[2]);
BitBlt(hDC,75+3*dx,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,75+4*dx,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,75+4*dx,3+dy,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem,hBm[3]);
BitBlt(hDC,100+5*dx,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,100+5*dx,3+dy,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,100+6*dx,3+dy,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem,hBm[4]);
BitBlt(hDC,125+7*dx,3+dy,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,125+8*dx,3+dy,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
BitBlt(hDC,125+8*dx,3,dx-1,dy-1,hdcmem,0,0,SRCCOPY);
ReleaseDC(hwnd,hDC);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
}
void ChessBoard(int LR,int LL,int tr,int tl,int size) //LR 当前棋盘的左上角行
{ //LL 当前棋盘的左上角列
if(size==1) //tr 当前棋盘中的特殊格行
return; //tr 当前棋盘中的特殊格列
//size 当前棋盘2的k次方
int s=size/2;
if(tr<LR+s&&tl<LL+s)
{
grid[LR+s-1][LL+s]=4;
grid[LR+s][LL+s-1]=4;
grid[LR+s][LL+s]=4;
ChessBoard(LR,LL,tr,tl,s);
ChessBoard(LR,LL+s,LR+s-1,LL+s,s);
ChessBoard(LR+s,LL,LR+s,LL+s-1,s);
ChessBoard(LR+s,LL+s,LR+s,LL+s,s);
}
if(tr<LR+s&&tl>=LL+s)
{
grid[LR+s-1][LL+s-1]=3;
grid[LR+s][LL+s-1]=3;
grid[LR+s][LL+s]=3;
ChessBoard(LR,LL+s,tr,tl,s);
ChessBoard(LR,LL,LR+s-1,LL+s-1,s);
ChessBoard(LR+s,LL,LR+s,LL+s-1,s);
ChessBoard(LR+s,LL+s,LR+s,LL+s,s);
}
if(tr>=LR+s&&tl<LL+s)
{
grid[LR+s-1][LL+s-1]=2;
grid[LR+s-1][LL+s]=2;
grid[LR+s][LL+s]=2;
ChessBoard(LR+s,LL,tr,tl,s);
ChessBoard(LR,LL,LR+s-1,LL+s-1,s);
ChessBoard(LR,LL+s,LR+s-1,LL+s,s);
ChessBoard(LR+s,LL+s,LR+s,LL+s,s);
}
if(tr>=LR+s&&tl>=LL+s)
{
grid[LR+s-1][LL+s-1]=1;
grid[LR+s-1][LL+s]=1;
grid[LR+s][LL+s-1]=1;
ChessBoard(LR+s,LL+s,tr,tl,s);
ChessBoard(LR,LL,LR+s-1,LL+s-1,s);
ChessBoard(LR,LL+s,LR+s-1,LL+s,s);
ChessBoard(LR+s,LL,LR+s,LL+s,s);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -