《VC++MFC单机和网络版五子棋》由会员分享,可在线阅读,更多相关《VC++MFC单机和网络版五子棋(33页珍藏版)》请在金锄头文库上搜索。
1、五子棋五子棋是一种很受人们喜爱的游戏,它的规则简单,但玩法变化多端,富有趣味性, 适合人们消遣。这里我们就来设计一个五子棋游戏。(一) (一) 人对人游戏Q黒棋下数子1.1.游戏实现人对人游戏,其实只是对游戏规则的实现,我们只是利用五子棋游戏的规则来编程, 至于真正的游戏实现一一计算机的“智能”算法,我们将在后面讲述。五子棋的规则很简单:1, 判断是否能放下棋子(是否已经有了棋子);2, 判断是哪种颜色下棋;3, 判断是否已经结束(是谁赢?)这些规则,我们将用相应的函数来实现。其它,我们还将介绍其它一些功能的实现。如鼠标的更换,工具栏和状态栏的编辑, 类与类之间的相互调用。新建工程3_1,选择
2、单文档,在 Step 4 of 6中先中 Windows Sockets复选框。如下图:图 3-1-12. 2.资源编辑由于我们这个程序出现的关于资源编辑的内容太多,我们具体介绍如下: 见下图3-1-2,我们需要添加的有:Jffj 0出,缶 电旷 彳 ”卩43|4 0 jR |umnTO&e-na-Jzlr _j 31 resources 1;+ ._ AcccItMlnr白圆BitmapjS IDBJLACK IDE _WHITfF LoadCursor(IDC_CURSOR1); hcursorwhite=AfxGetApp()-LoadCursor(IDC_CURSOR2); m_bmw
3、hite.LoadBitmap(IDB_WHITE); m_bmblack.LoadBitmap(IDB_BLACK);/清理棋盘/数组值为 0 表示没有棋子for(int i=0;i19;i+)for(int j=0;jFillRect(myrect1,&mybrush1);/画棋盘框线CPen mypen; CPen*myoldPen; mypen.CreatePen(PS_SOLID,1,RGB(0,0,0); myoldPen=pDC-SelectObject(&mypen);for(int i=0;iMoveTo(40,40+i*20); pDC-LineTo(400,40+i*20
4、);pDC-MoveTo(40+i*20,40); pDC-LineTo(40+i*20,400);/重画时显示存在的棋子CDC Dc;if(Dc.CreateCompatibleDC(pDC)=FALSE)AfxMessageBox(Cant create DC);for(int n=0;n19;n+)for(int m=0;mBitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);else if(wzqnm=-1)/显示黑棋Dc.SelectObject(m_bmblack);pDC-BitBlt(n*20+32,m*20+32,160,160,&D
5、c,0,0,SRCCOPY);设置鼠标:棋盘画好了, 接下来就是下棋了。 但鼠标并没有像我们上面说的那样变成白棋, 函数如下:BOOL CMy3_1View:OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)/ TODO: Add your message handler code here and/or call default if(nHitTest=HTCLIENT)/白棋下,显示白棋鼠标if(colorwhite)/调用主框架里面的状态栏CMainFrame*pFrm=(CMainFrame*)AfxGetApp()-m_pMain
6、Wnd; CStatusBar*pStatus=&pFrm-m_wndStatusBar;if(pStatus)pStatus-GetStatusBarCtrl().SetIcon(0,AfxGetApp()-LoadIcon(IDI_WHITE); pStatus-SetPaneText(O,白棋下);SetCursor(hcursorwhite);/显示黑棋鼠标elseSetCursor(hcursorblack);CMainFrame*pFrm=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStatusBar*pStatus=&pFrm-m_wndStatus
7、Bar;if(pStatus)/显示图像pStatus-GetStatusBarCtrl().SetIcon(0,AfxGetApp()-LoadIcon(IDI_BLACK);/显示文字pStatus-SetPaneText(O,黑棋下);return 1;return CView:OnSetCursor(pWnd, nHitTest, message);现在运行程序,怎样,鼠标变成白棋了, 而且下面的状态栏也能够显示鼠标状态了, 真是一举两得。可是,又该怎样把棋子放在棋盘上呢?下棋操作:这就涉及到 OnLButtonDown(UINT nFlags, CPoint point) 和 OnLButtonUp(UINT nFlags, CPoint point) 两个函数了。要用哪一个或用两个?用 Down 函数时是在鼠标按下 时放下棋子,可是,要是我们按下后意识到按错了怎么办;那就改用Up 函数,表示当鼠标键松开时放下棋子。 OK !添加函数如下:void CMy3_1View:OnLBut