简易五子棋,望指正
#include <windows.h>
#include<commctrl.h>
#define SIZE 20
UINT IDC_BUTTON1=200;
HWND hwnd;
HPEN penback=CreatePen(PS_SOLID,1,RGB(0,0,0));
HPEN penback2=CreatePen(PS_SOLID,1,RGB(255,255,255));
HBRUSH brushback=CreateSolidBrush(RGB(255,255,255));
HBRUSH chessblack=CreateSolidBrush(RGB(0,0,0));
HBRUSH chesswhite=CreateSolidBrush(RGB(255,255,255));
int map[SIZE-1][SIZE-1]={0};
const int white=2;
const int black=1;
int sum=1;HDC hdc;
POINT pt={0,0};
int i=0;
void printbackground()
{hdc=GetDC(hwnd);SelectObject(hdc,brushback); SelectObject(hdc,penback2);Rectangle(hdc,0,0,390,390); SelectObject(hdc,penback); for(int i=0;i<SIZE;i++)for(int j=0;j<SIZE;j++)Rectangle(hdc,j*15+7,i*15+7,(j+1)*15+7,(i+1)*15+7); //棋子放在方格点上 //Rectangle(hdc,j*15,i*15,(j+1)*15,(i+1)*15);//棋子放在方格内 }int whitewin() //判断白棋是否赢
{for(int i=0;i<SIZE;i++)for(int j=0;j<SIZE;j++)if(map[i][j]==white){for(int dx=-1;dx<=1;dx++)for(int dy=-1;dy<=1;dy++)if(dx!=0||dy!=0){ sum=1; for(int m=1;m<=4;m++){int x=i+dx*m;int y=j+dy*m;if(x<0||x>=SIZE||y<0||y>=SIZE||map[x][y]!=white) break;else sum++; }if(sum==5) return 1;}}return 0;
}int blackwin() //判断黑棋是否赢
{for(int i=0;i<SIZE;i++)for(int j=0;j<SIZE;j++)if(map[i][j]==black){for(int dx=-1;dx<=1;dx++)for(int dy=-1;dy<=1;dy++)if(dx!=0||dy!=0){ sum=1;for(int m=1;m<=9;m++){int x=i+dx*m;int y=j+dy*m;if(x<0||x>=SIZE||y<0||y>=SIZE||map[x][y]!=black) break;else sum++; }if(sum==5) return 1;}}return 0;
}LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {switch(Message) {case WM_DESTROY: {PostQuitMessage(0);break;}case WM_LBUTTONDOWN:{GetCursorPos(&pt);ScreenToClient(hwnd,&pt);hdc=GetDC(hwnd);if(i==0){SelectObject(hdc,chessblack);i=1;map[pt.y/15][pt.x/15]=black;}else {SelectObject(hdc,chesswhite);i=0;map[pt.y/15][pt.x/15]=white;} if(pt.y/15<=SIZE&&pt.x/15<=SIZE) Ellipse(hdc,pt.x/15*15,pt.y/15*15,pt.x/15*15+15,pt.y/15*15+15);if(blackwin()) {MessageBox(hwnd,"黑棋赢","游戏结束",MB_OKCANCEL);printbackground();memset(map,0,sizeof(map));i=0;}if(whitewin()) {MessageBox(hwnd,"白棋赢","游戏结束",MB_OKCANCEL);printbackground();memset(map,0,sizeof(map));i=0;}//searchblack(0,0,0);//searchwhite(0,0,0);//第pt.y/15行,pt.x/15列有棋子 break;}default:return DefWindowProc(hwnd, Message, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {WNDCLASSEX wc;MSG msg; memset(&wc,0,sizeof(wc));wc.cbSize = sizeof(WNDCLASSEX);wc.lpfnWndProc = WndProc; wc.hInstance = hInstance;wc.hCursor = LoadCursor(NULL, IDC_ARROW);wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wc.lpszClassName = "WindowClass";wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) {MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);return 0;}hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, /* x */CW_USEDEFAULT, /* y */390, /* width */390, /* height */NULL,NULL,hInstance,NULL);if(hwnd == NULL) {MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);return 0;}printbackground();while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); }return msg.wParam;
}