版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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 函數中調用該畫棋盤函 將 pDC 對象作為實參 傳遞給 Checkerboard()函數,代碼如下:void CFivechess_44View:OnDraw(CDC* pDC) pDoc = GetDoASSERT_VALID(pDoc);/ TODO: add draw c
3、ode for nativedata here/調用自定義的畫鍵盤函 數3.編譯運行得到如下效果:一個空棋盤2.2 放置棋子功能的開發(fā)按照規(guī)劃,棋子使用鼠標的左鍵和右鍵(分別用這兩鍵來表示下棋的雙方)來進行單機下棋,即是當用戶單擊左鍵時,下黑色棋子,用戶單擊右鍵時,下白色棋子。因此,必須為鼠標添加鼠標左鍵和鼠標右鍵單擊的鼠標消息處理 如下:1.右擊 CFiw 類,調用添加消息處理函數 Add dler2.添加消息處 數 和 處理函 Exisiting退出對話框。并添加消息處理函數代碼。如下圖所示 :添加鼠標左鍵和右鍵的消息處理函 (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) 構造函數將下棋的順序初始化為左 CFivechess_44View:CFivechess_44View()/ TODO: add constructioncode hereRightORLet=0;/初始化默認 下(3) 修改鼠標的左
7、鍵和右鍵的單擊消息處理函數,在畫棋子之前判斷輪到 哪方下棋,代碼如下:左鍵代碼: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)根據函數名在正確位置添
10、加或修改 數.添加實現放置棋子函數額判斷放置 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);修改鼠標左鍵和右鍵單擊的消息處理函數代碼如下,并注意為了消除該缺陷,“鼠標消息標志變量變化 約束條件全部實現了 。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個同色的棋子,則該顏色的這一方就獲勝。因此可以使用一個整形二維數組來記錄當前的棋局情況,二維數組的值定義如下 :0:表示該位子 1:表示該位置已經放了黑 ;2:表示該位置已經放了白 ;解決的問題 :問題 1:要在下每個棋子后,將數組變量對應位置的數組元素值 “12”,這個只需要在鼠標消息處理函數中 函數后改變數組元
14、素值 。問題 2:下每個棋子后,判斷在這個 連續(xù) 5 戲,輪到下一方 具體實施步 ;(1) 增加棋盤狀態(tài)記錄數組 頭文件中定義一個公有的整形數 int chessArr2020;并在視圖類的構造函數中將整形數組初始化為 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鼠標右鍵具有輸贏判斷的鼠標消息處理函數與 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DIY家居保養(yǎng)延長家具使用壽命的技巧
- 創(chuàng)新教育與培訓新趨勢下的設備需求
- 創(chuàng)新教育與團隊協作能力的培養(yǎng)
- 2024員工個人入股合作協議范本:股權激勵制度3篇
- 農業(yè)機械的動力系統(tǒng)設計進展
- 醫(yī)療健康領域的創(chuàng)新科技與專利布局
- 2025中國郵政集團公司三明市分公司招聘高頻重點提升(共500題)附帶答案詳解
- 2025中國電信湖北天門分公司招聘8人高頻重點提升(共500題)附帶答案詳解
- 2025中國煤炭地質總局應屆高校畢業(yè)生招聘653人高頻重點提升(共500題)附帶答案詳解
- 2025中國建筑股份限公司崗位招聘30人(信息中心)高頻重點提升(共500題)附帶答案詳解
- 二年級上冊《語文園地八》日積月累
- 《英語演講》課件-Task 2 Case Studies-1of English Speech and Debate
- 2024年度石料供應框架協議
- 2024年中國PVC鞋底料市場調查研究報告
- 臥式橢圓封頭儲罐液位體積對照表
- Unit 3 The Internet Reading for writing 課件高中英語人教版(2019)必修第二冊 -
- 商業(yè)街價格策略與收益預測
- 2024-2025學年湖北省武漢市九年級上學期元月調研模擬物理試題(含答案)
- 2024年度醫(yī)療器械臨床試驗合同
- 全國自考社會經濟調查方法與應用真題
- 中醫(yī)婦科疾病的治療(完美版)課件
評論
0/150
提交評論