请教 关于五子棋遇到的问题 如何添加菜单

这是我的五子棋代码,现在不知道怎样把棋盘左上角的一颗红棋去掉,还有就是我想做一个菜单,请帮忙,我快要检查了. #include #include #include LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); BOOL InitWindowsClass(HINSTANCE hInstance); BOOL InitWindows(HINSTANCE hInstance,int nCmdShow); HWND hWndMain; int i,j,k,z; int x[11],y[11]; int c[225],d[225];//黑棋的圆心坐标 int e[225],f[225];//红棋的圆心坐标 POINT pt; int r; //棋子圆心半径 int a=-1; int m,n,u,v; int t=1; //判断标志该哪方下子 int g=1; // 棋盘的表示: int p[14][14]={{3,4,5,6,7,8,9,10,11,12,13,14,15,16},{17,18,19,20,21,22,23,24,25,26,27,28,29,30},{31,32,33,34,35,36,37,38,39,40,41,42,43,44},{45,46,47,48,49,50,51,52,53,54,55,56,57,58},{59,60,61,62,63,64,65,66,67,68,69,70,71,72},{73,74,75,76,77,78,79,80,81,82,83,84,85,86},{87,88,89,90,91,92,93,94,95,96,97,98,99,100},{101,102,103,104,105,106,107,108,109,110,111,112,113,114},{115,116,117,118,119,120,121,122,123,124,125,126,127,128},{129,130,131,132,133,134,135,136,137,138,139,140,141,142},{143,144,145,146,147,148,149,150,151,152,153,154,155,156},{157,158,159,160,161,162,163,164,165,166,167,168,169,170},{171,172,173,174,175,176,177,178,179,180,181,182,183,184},{185,186,187,188,189,190,191,192,193,194,195,196,197,198}}; int q[15]={200,240,280,320,360,400,440,480,520,560,600,640,680,720,760}; int s[15]={100,140,180,220,260,300,340,380,420,460,500,540,580,620,660}; //主函数 int WINAPI WinMain ( HINSTANCE hInstance, //当前实例的句柄 HINSTANCE hPrevInstance, //上一个实例的句柄,这个是为了和Win 3.1兼容,在Win32的程序中此参数无用 LPSTR lpCmdLine, //指向命令行字符串的指针 int nCmdShow //window显示状态 ) { MSG Message; if(!InitWindowsClass(hInstance)) return FALSE; if(!InitWindows(hInstance,nCmdShow)) return FALSE; while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } return Message.wParam; } LRESULT CALLBACK WndProc ( HWND hWnd, //标识窗口句柄 UINT iMessage, UINT wParam, LONG lParam ) { HDC hDC; //定义一个设备上下文的句柄,在API中用 HBRUSH hBrush; //定义指向画刷的句柄 HPEN hPen; //定义指向画笔的句柄 PAINTSTRUCT ps; //定义指向包含绘图信息的结构体变量 char lpsz[]="黑方先下子"; TEXTMETRIC tm; //获取被选入DC中的字体的各种数值参数 switch(iMessage) { case WM_PAINT: //处理绘图消息 hDC=BeginPaint(hWnd,&ps); SetMapMode(hDC,MM_ANISOTROPIC); //设置映像模式 SetTextColor(hDC,RGB(0,0,0)); //设置当前文本颜色为黑色 GetTextMetrics(hDC,&tm); TextOut(hDC,780,100,lpsz,strlen(lpsz)); hPen=(HPEN)GetStockObject(BLACK_PEN); //设置画笔。采用系统预定定义的黑色画笔 SelectObject(hDC,hPen); //棋盘画法: hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); //创建灰色画刷 SelectObject(hDC,hBrush); //选择画刷 Rectangle(hDC,200,100,760,660); //画一矩形 MoveToEx(hDC,200,140,NULL);//横1 指定一个新的当前画笔位置 LineTo(hDC,760,140); //用当前画笔画一条线,从当前位置连到一个指定的点 MoveToEx(hDC,200,180,NULL);//横2 LineTo(hDC,760,180); MoveToEx(hDC,200,220,NULL);//横3 LineTo(hDC,760,220); MoveToEx(hDC,200,260,NULL);//横4 LineTo(hDC,760,260); MoveToEx(hDC,200,300,NULL);//横5 LineTo(hDC,760,300); MoveToEx(hDC,200,340,NULL);//横6 LineTo(hDC,760,340); MoveToEx(hDC,200,380,NULL);//横7 LineTo(hDC,760,380); MoveToEx(hDC,200,420,NULL);//横8 LineTo(hDC,760,420); MoveToEx(hDC,200,460,NULL);//横9 LineTo(hDC,760,460); MoveToEx(hDC,200,500,NULL);//横10 LineTo(hDC,760,500); MoveToEx(hDC,200,540,NULL);//横11 LineTo(hDC,760,540); MoveToEx(hDC,200,580,NULL);//横12 LineTo(hDC,760,580); MoveToEx(hDC,200,620,NULL);//横13 LineTo(hDC,760,620); MoveToEx(hDC,240,100,NULL);//纵1 LineTo(hDC,240,660); MoveToEx(hDC,280,100,NULL);//纵2 LineTo(hDC,280,660); MoveToEx(hDC,320,100,NULL);//纵3 LineTo(hDC,320,660); MoveToEx(hDC,360,100,NULL);//纵4 LineTo(hDC,360,660); MoveToEx(hDC,400,100,NULL);//纵5 LineTo(hDC,400,660); MoveToEx(hDC,440,100,NULL);//纵6 LineTo(hDC,440,660); MoveToEx(hDC,480,100,NULL);//纵7 LineTo(hDC,480,660); MoveToEx(hDC,520,100,NULL);//纵8 LineTo(hDC,520,660); MoveToEx(hDC,560,100,NULL);//纵9 LineTo(hDC,560,660); MoveToEx(hDC,600,100,NULL);//纵10 LineTo(hDC,600,660); MoveToEx(hDC,640,100,NULL);//纵11 LineTo(hDC,640,660); MoveToEx(hDC,680,100,NULL);//纵12 LineTo(hDC,680,660); MoveToEx(hDC,720,100,NULL);//纵13 LineTo(hDC,720,660); //画黑子 for(z=0;z<=a;z++) { hPen=(HPEN)GetStockObject(BLACK_PEN); //黑色画笔 hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH); //黑色刷子 SelectObject(hDC,hBrush); SelectObject(hDC,hPen); Ellipse(hDC,(c[z]-r),(d[z]-r),(c[z]+r),(d[z]+r)); } //画红子 for(z=0;z<=a;z++) { hPen=CreatePen(PS_SOLID,1,RGB(255,0,0)); //指定画笔颜色为红色,画实线 hBrush=CreateSolidBrush(RGB(255,0,0)); //指定画刷颜色为红色 SelectObject(hDC,hBrush); SelectObject(hDC,hPen); Ellipse(hDC,(e[z]-r),(f[z]-r),(e[z]+r),(f[z]+r)); } //下棋后输赢的判断: for(m=0;m<=14;m++) for(n=0;n<=10;n++) { if(p[m][n]==1&&p[m][n+1]==1&&p[m][n+2]==1&&p[m][n+3]==1&&p[m][n+4]==1) { MessageBox(hWnd,"黑棋赢","结束",MB_OK); g=0; } //PostQuitMessage(0);//退出程序 else if(p[m][n]==2&&p[m][n+1]==2&&p[m][n+2]==2&&p[m][n+3]==2&&p[m][n+4]==2) { MessageBox(hWnd,"红棋赢","结束",MB_OK); g=0; } } for(m=0;m<=10;m++) for(n=0;n<=14;n++) { if(p[m][n]==1&&p[m+1][n]==1&&p[m+2][n]==1&&p[m+3][n]==1&&p[m+4][n]==1) { MessageBox(hWnd,"黑棋赢","结束",MB_OK); g=0; } else if(p[m][n]==2&&p[m+1][n]==2&&p[m+2][n]==2&&p[m+3][n]==2&&p[m+4][n]==2) { MessageBox(hWnd,"红棋赢","结束",MB_OK); g=0; } } for(m=0;m<=10;m++) for(n=0;n<=10;n++) { if(p[m][n]==1&&p[m+1][n+1]==1&&p[m+2][n+2]==1&&p[m+3][n+3]==1&&p[m+4][n+4]==1) { MessageBox(hWnd,"黑棋赢","结束",MB_OK); g=0; } else if(p[m][n]==2&&p[m+1][n+1]==2&&p[m+2][n+2]==2&&p[m+3][n+3]==2&&p[m+4][n+4]==2) { MessageBox(hWnd,"红棋赢","结束",MB_OK); g=0; } } for(m=0;m<=10;m++) for(n=4;n<=14;n++) { if(p[m][n]==1&&p[m+1][n-1]==1&&p[m+2][n-2]==1&&p[m+3][n-3]==1&&p[m+4][n-4]==1) { MessageBox(hWnd,"黑棋赢","结束",MB_OK); g=0; } else if(p[m][n]==2&&p[m+1][n-1]==2&&p[m+2][n-2]==2&&p[m+3][n-3]==2&&p[m+4][n-4]==2) { MessageBox(hWnd,"红棋赢","结束",MB_OK); g=0; } } EndPaint(hWnd,&ps); //绘图结束,必须与BeginPaint成对出现 return 0; //左键为黑棋: case WM_LBUTTONDOWN: //左键消息 if(g==1) { if(t==1) { GetCursorPos(&pt); //获取鼠标指针的当前位置 ScreenToClient(hWnd,&pt); //判断指定的坐标.返回非零表示成功,零表示失败 i=pt.x; j=pt.y; u=int(float(i-200)/40+0.5); v=int(float(j-100)/40+0.5); if(((i-200)%40<=10||(i-200)%40>=30)&&((j-100)%40<=10||(j-100)%40>=30)&&p[u][v]!=1&&p[u][v]!=2) { r=10; c[a]=q[u]; d[a]=s[v]; a++; p[u][v]=1; t=0; } } else MessageBox(hWnd,"红方下棋",NULL,MB_OK); InvalidateRect(hWnd,NULL,1); } break; //右键为红方下棋: case WM_RBUTTONDOWN: if(g==1) { if(t==0) { GetCursorPos(&pt); //获取鼠标指针的当前位置 ScreenToClient(hWnd,&pt); //判断指定的坐标.返回非零表示成功,零表示失败 i=pt.x; j=pt.y; u=int(float(i-200)/40+0.5); v=int(float(j-100)/40+0.5); if(((i-200)%40<=10||(i-200)%40>=30)&&((j-100)%40<=10||(j-100)%40>=30)&&p[u][v]!=1&&p[u][v]!=2) { r=10; e[a]=q[u]; f[a]=s[v]; a++; p[u][v]=2; t=1; } } else MessageBox(hWnd,"黑方下棋",NULL,MB_OK); InvalidateRect(hWnd,NULL,1); } break; case WM_DESTROY: //结束应用程序 PostQuitMessage(0); return 0; default: //其他消息处理程序 return(DefWindowProc(hWnd,iMessage,wParam,lParam)) ; } return 0; } BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) //初始化窗口 { HWND hWnd; hWnd=CreateWindow("WinFill", //生成窗口 "五子棋游戏", WS_OVERLAPPEDWINDOW, 0, 0, 1024, 768, NULL, hmenu, hInstance, NULL); if(!hWnd) return FALSE; hWndMain=hWnd; ShowWindow(hWnd,nCmdShow); //显示窗口 UpdateWindow(hWnd); return TRUE; } BOOL InitWindowsClass(HINSTANCE hInstance) //定义窗口类 { WNDCLASS WndClass; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hIcon=LoadIcon(NULL,"END"); WndClass.hInstance=hInstance; WndClass.lpfnWndProc=WndProc; WndClass.lpszClassName="WinFill"; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; return RegisterClass(&WndClass); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值