版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、五子棋游戲 詳細設計1、利用 MFC 生成五子棋游戲應用程序框架具體 執(zhí)行 VC 程 擇Fil w命令,彈出 New框.單擊 標簽,轉到 Projects MFC name文本框中輸入Fivechess_44 。Lacat 文本框是指項目的本地路徑 。單擊按鈕,彈出 MFC 1 對話框。選中單選按 (3)單擊完成按鈕,則建立一個單文檔應用 。2 發(fā)2.1 棋盤設計1.在已創(chuàng)建的 中添加畫棋盤 先” 頭文件中定義一個用于顯示棋盤的自定義公有 void Checkerboard(CDC*pDC);然后在“Fivechess_44View.cpp”源文件中實 void CFivechess_44Vi
2、ew:Checkerboard(CDC*pDC)for(int i=0;iMoveTo(i*50,0);/畫筆移動到 點pDC-LineTo(i*50,1000); / 畫筆從點到(i*50,1000)點for(i=0;iMoveTo(0,i*50);pDC-LineTo(1000,i*50);2.在應用程序 的 On 函數(shù)中調用該畫棋盤函 將 pDC 對象作為實參 傳遞給 Checkerboard()函數(shù),代碼如下:void CFivechess_44View:OnDraw(CDC* pDC) pDoc = GetDoASSERT_VALID(pDoc);/ TODO: add draw c
3、ode for nativedata here/調用自定義的畫鍵盤函 數(shù)3.編譯運行得到如下效果:一個空棋盤2.2 放置棋子功能的開發(fā)按照規(guī)劃,棋子使用鼠標的左鍵和右鍵(分別用這兩鍵來表示下棋的雙方)來進行單機下棋,即是當用戶單擊左鍵時,下黑色棋子,用戶單擊右鍵時,下白色棋子。因此,必須為鼠標添加鼠標左鍵和鼠標右鍵單擊的鼠標消息處理 如下:1.右擊 CFiw 類,調用添加消息處理函數(shù) Add dler2.添加消息處 數(shù) 和 處理函 Exisiting退出對話框。并添加消息處理函數(shù)代碼。如下圖所示 :添加鼠標左鍵和右鍵的消息處理函 (1).左鍵消息void nFlags,CPointpoint)
4、/ TODO: Add your messa code here and/orcall default brush = new ;/定義黑色畫 刷CDC* pDC = this-GetDC();/獲取當前的圖形設備指 針/選中該黑色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); point(2).右鍵消息void CFivechess_44View:OnRB
5、uttonDown(UINT nFlags,CPointpoint)/ TODO: Add your handlercode here and/orcall default brush = new CBrush(RGB(255,255,255) ;/定義白色畫 刷CDC* pDC = this-GetDC();/獲取當前的圖形設備指 針/選中該白色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+2
6、0,tempPoint.y+20); point到此便將畫棋盤和棋子的代碼編好,編譯運行如下:左擊鼠標左鍵畫黑點,右擊鼠標右 點3.但程序至此尚有兩點未 其一,下棋子的約束條件,即雙方按順序一人下一次才可第二次落棋子。其二,同一方格不能重復下棋 解決第一個問題,添加以下代 (1) 在 中添加一個公有的整形變量int ; /定義保存左鍵或右鍵下棋的標記變 量(2) 構造函數(shù)將下棋的順序初始化為左 CFivechess_44View:CFivechess_44View()/ TODO: add constructioncode hereRightORLet=0;/初始化默認 下(3) 修改鼠標的左
7、鍵和右鍵的單擊消息處理函數(shù),在畫棋子之前判斷輪到 哪方下棋,代碼如下:左鍵代碼:void nFlags,CPointpoint)/ TODO: Add your messa handlercode here and/or call default ) brush = new ;/定義黑色畫 刷CDC* pDC = this-GetDC();pDC-SelectObject(brush);/獲取當前的圖形設備指 針/選中該黑色 for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-2
8、0,tempPoint.x+20,tempPoint.y+20);/鼠標狀態(tài)變 0 point右鍵代碼:void CFivechess_44View:OnRButtonDown(UINT nFlags,CPointpoint)/ TODO: Add your messa handlercode here and/or call default CBrus brush= new CBrush(RGB(255,255,255) ;/定義白色畫 刷CDC* pDC = this-GetDC();/獲取當前的圖形設備指 針/選中該白色 pDC-SelectObject(brush);for(int i
9、 = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);RightORLeft-;/鼠標狀態(tài)變 ,鼠標右鍵按下后,再次改變鼠 態(tài) point其二,解決第二個 (1)在 Fivechess_44View.h 頭文件中加入 3 行公有代碼,并且在該頭文件中包含r的頭文件,代碼如下:# vectorlass : CView; chess ;bool is Locat (CPointcp);void tcp);.;(2)根據(jù)函數(shù)名在正確位置添
10、加或修改 數(shù).添加實現(xiàn)放置棋子函數(shù)額判斷放置 bool CFivechess_44View:isLocation(CPointcp)bool isLoc = true ;for(int i= 0 ; i chess ; i+)if(cp.x = & cp.y = chessisLoc= false ;isLoc ;void tcp)chessVec.push_back(cp);修改鼠標左鍵和右鍵單擊的消息處理函數(shù)代碼如下,并注意為了消除該缺陷,“鼠標消息標志變量變化 約束條件全部實現(xiàn)了 。void nFlags,CPointpoint)/ TODO: Add your messa handle
11、rcode here and/or call defaultif(RightORLeft= 0 ) brush = new ;/定義黑色畫 刷CDC* pDC = this-GetDC();/獲取當前的圖形設備指 針/選中該黑色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);oint); ;/畫了該點后,將該點插入 中/鼠標消息標志變量變化 ) pointvo
12、id CFivechess_44View:OnRButtonDown(UINT nFlags,CPointpoint)/ TODO: Add your messa handl code here and/or call if(RightORLeft= 1 ) brush = new CBrush(RGB(255,255,255) ;/定義白色畫 刷CDC* pDC = this-GetDC();/選中該白色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-2
13、0,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);oint); ;/鼠標消息標志變量變化 ) point2.3 游戲獲勝決斷的開發(fā)1.該功能是棋牌游戲中較難的功能。所以編寫程序時要細心。游戲規(guī)則是這樣能夠的 :如果某一方(黑棋或白棋 有5個同色的棋子,則該顏色的這一方就獲勝。因此可以使用一個整形二維數(shù)組來記錄當前的棋局情況,二維數(shù)組的值定義如下 :0:表示該位子 1:表示該位置已經放了黑 ;2:表示該位置已經放了白 ;解決的問題 :問題 1:要在下每個棋子后,將數(shù)組變量對應位置的數(shù)組元素值 “12”,這個只需要在鼠標消息處理函數(shù)中 函數(shù)后改變數(shù)組元
14、素值 。問題 2:下每個棋子后,判斷在這個 連續(xù) 5 戲,輪到下一方 具體實施步 ;(1) 增加棋盤狀態(tài)記錄數(shù)組 頭文件中定義一個公有的整形數(shù) int chessArr2020;并在視圖類的構造函數(shù)中將整形數(shù)組初始化為 CFivechess_44View:CFivechess_44View()/ TODO: add constructioncode here/初始化棋盤,左鍵先下棋for(int i=0;i20;i+)for(int j=0;j 0 & i 0 & i 0 & j 0 & j 0 & j 0 & i 0 & j 0 & i 0 & j 0 & i 0 & j 0 & i Get
15、DC();/獲取當前的圖形設備指 針/選中該黑色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);oint);/畫了該點后,將該點插入 中chessArrtempPoint.x/50tempPoint.y/50= 1 ;if( isWin(point)(黑色棋子獲 ); ; point鼠標右鍵具有輸贏判斷的鼠標消息處理函數(shù)與 void nFlags,CPointpoint)/ TODO: Add your messa handlercode here and/or call defaultif(RightORLeft= 1 ) brush = new CBrush(RGB(255,255,255) ;CDC* pDC = this-GetDC();pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣東東莞中學洪梅學校招聘在編教師7名備考題庫帶答案詳解
- 2026江西吉安市吉水縣城控人力資源服務有限公司招聘勞務外包1人備考題庫(一)及1套完整答案詳解
- 2025鄂爾多斯達拉特旗第二批事業(yè)單位引進28名高層次、急需緊缺人才備考題庫及答案詳解(新)
- 2026北京海淀區(qū)中法實驗學校招聘備考題庫及一套參考答案詳解
- 2025上海外國語大學三亞附屬中學面向社會第二次招聘教師17人備考題庫及參考答案詳解一套
- 窯爐生產安全制度
- 醫(yī)院產品生產管理制度
- 汽修安全生產相關制度
- 服裝車間生產組織制度
- 福利院生產經營制度
- 2026年教育平臺資源輸出協(xié)議
- 【《四旋翼飛行器坐標系及相互轉換關系分析綜述》1000字】
- 廣東深圳市鹽田高級中學2024~2025學年高一上冊1月期末考試化學試題 附答案
- 人力資源部2025年度工作總結與2026年度戰(zhàn)略規(guī)劃
- 2025年安徽理工大學馬克思主義基本原理概論期末考試參考題庫
- 機械工程師職稱評定技術報告模板
- 檔案移交數(shù)字化建設規(guī)劃
- 孤獨癥個案護理
- 建筑施工風險辨識與防范措施
- 高職汽車維修專業(yè)培訓教材
- 2026年中級注冊安全工程師之安全生產法及相關法律知識考試題庫500道含答案ab卷
評論
0/150
提交評論