




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MFC程序設計實驗報告五子棋實驗小組人員:XxxXxxXxx2012-12-2MFC程序五子棋實驗報告一.實驗內容:通過學習MFC應用程序開發,應用MFC控件等方面知識,編譯一個簡單的五子棋人人對戰游戲。二.實驗過程:實驗分工該實驗是由小組人員共同合作完成,算法設計有彭振負責,編碼以及函數實現由趙陽陽負責,調試運行和結果測試分別有楊光和龐騰立負責,實驗報告的書寫由沈軍強負責。算法設計原理五子棋的游戲規則對我們大家來說都很很清楚的。只要某一方的棋子在一條直線上,棋子數先達到五或以上,則該方為勝者。根據游戲規則,算法設計分以下幾個方面:棋盤設計:棋盤的設計主要是控件知識的應用。在棋盤的設計中所定義的控件主要有下面幾種:IDC_BUTTON_START(開始按鈕)IDC_BUTTON_END(結束按鈕)IDC_BUTTON_CHOICE(選擇按鈕)IDC_RADIO1(黑棋先按鈕)IDC_RADIO2(白棋先按鈕)IDC_STATIC_BITMAP11到IDC_STATIC_BITMAP1012(棋盤位圖120個)IDC_BUTTON11到IDC_BUTTON1012(棋盤按鈕120個)IDC_TEST_DIOLOG(對話框控件)IDC_STATIC(分組框兩個)棋盤設計是用一個對話框實現,再加上控件的使用,就形成一個簡單的棋盤。棋子設計棋子的設計是小組人員自己用作圖工具做出來的,黑白棋的實際如下圖所示,其中最后一個圖片是加載棋盤的位圖,棋盤就是有多個位圖合并出來的。三個位圖分別定義為:BITMAP1,BITMAP2,BITMAP3,如下圖開始函數開始函數就是為開始按鈕添加消息映射函數,開始函數需要實現的功能是,通過單擊按鈕,能夠把所有構成棋盤的位圖加載一遍,即相當于初始化棋盤,并且,如果棋盤上有棋子的位圖的話,把棋子的位圖清除,即相當于“清屏”其函數定義為:DeleteObject();開始函數的定義為:OnButtonStart()。結束函數結束函數是為結束按鈕添加的消息映射函數,其所要實現的功能是,單擊結束按鈕,彈出一個消息窗口,彈出消息,提示下一步要做什么。這里提示返回開始按鈕,結束函數定義為:OnButtonEnd()。下棋子函數下棋子函數實現的時候,要考慮到兩點,一點是單擊開始按鈕后,是否進行了選擇,二是選擇黑棋先還是白棋先。當點擊棋盤上按鈕時,如果沒有進行選擇,就彈出消息對話框,輸出“請選擇開局棋色”,如果進行了選擇,就執行所對應的函數,白棋先的對應函數是LoadBitmap(IDB_BITMAP2);黑棋先的對應函數是:LoadBitmap(IDB_BITMAP3);下棋子函數定義為OnButton11()~OnButton1012();選擇先下棋色函數該函數所要實現的功能是點擊選擇按鈕,來選擇開局先下棋子的棋色,其中,單擊選擇后,默認為白棋先下,如果想要改變的話,可以單擊選擇上面的復選框按鈕,進行改變,白棋先下所對應的消息映射函數是:CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);黑棋先下所對應的消息映射函數是:CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);選擇函數的定義為:OnButtonChoice();判斷輸贏函數五子棋勝利的條件是一方的五個棋子連成一條直線,包括縱,橫,左斜,右斜四種,可以用二維數組來保存每個位置棋子的值,分別用0,1,2來表示無棋,黑棋,白棋,每當下一個棋子后,用值保存其顏色,當白棋或者黑棋有一者符合上述四種情況之一時,就可以判斷出哪方勝利.判斷輸贏函數定義為:IsOver(intx,inty,intz)編碼以及函數實現voidCTestDlg::OnButton11(){if(ToStart==1&&Q[0][0]==0){//Tostart為1時,棋局開始 x=0;y=0;//表示棋子所在坐標 if(Qi==0){MessageBox("請選擇開局棋色");z=0; }//Qi表示棋子是黑色還是白色,若為0,則棋盤;1表示黑色棋子,2表示白色棋子 elseif(Qi==1){//Qi為1,表示此棋子上一個棋子為黑色,此次單擊放白棋 m_cBmp[0][0].DeleteObject();// m_cBmp[0][0].LoadBitmap(IDB_BITMAP2);m_ctrBmp11.SetBitmap(HBITMAP(m_cBmp[0][0])); Qi++;//表示下一棋子需要放黑棋子 z=1;//棋子顏色 } elseif(Qi==2){ m_cBmp[0][0].DeleteObject(); m_cBmp[0][0].LoadBitmap(IDB_BITMAP3);//m_ctrBmp11.SetBitmap(HBITMAP(m_cBmp[0][0])); Qi--; z=2; } Q[0][0]=z;// IsOver(x,y,z);}//判斷誰贏SetBmp();//再次加載所有位圖}voidCTestDlg::IsOver(intx,inty,intz)//勝負判斷函數{//SetBmp();boolflag1=false,flag2=false; intn,m,count=0; n=m=x;while(n>=0){//判斷縱軸是否五子相連 n--; if(Q[n][y]!=z)break; elsecount++; } while(m<=10) {m++; if(Q[m][y]!=z)break; elsecount++; } if(z==1&&count>=4)flag1=true; if(z==2&&count>=4)flag2=true; count=0; n=m=y;//判斷橫軸是否五子相連 while(n--&&n>-1){ if(Q[x][n]!=z)break; elsecount++; } while(m++&&m<=11) { if(Q[x][m]!=z)break; elsecount++; } if(z==1&&count>=4)flag1=true; if(z==2&&count>=4)flag2=true; intn1,m1; n1=n=x;m1=m=y;//判斷左斜是否五子相連 count=0; while(n1--&&n1>=0&&m1--&&m1>=0) if(Q[n1][m1]!=z)break; elsecount++; while(n++&&n<=11&&m++&&m<=11) if(Q[n][m]!=z)break; elsecount++;if(z==1&&count>=4)flag1=true; if(z==2&&count>=4)flag2=true; n1=n=x;m1=m=y; count=0;//右斜是否五子相連 while(n1++&&n1<=11&&m1--&&m1>=0) if(Q[n1][m1]!=z)break; elsecount++; while(n--&&n>=0&&m++&&m<=11) if(Q[n][m]!=z)break; elsecount++;if(z==1&&count>=4)flag1=true; if(z==2&&count>=4)flag2=true;if(flag1==true)MessageBox("黑棋獲勝");if(flag2==true)MessageBox("白棋獲勝"); }voidCTestDlg::OnButtonStart()//選擇開始函數{ //TODO:Addyourcontrolnotificationhandlercodehere if(ToStart==0){ for(i=0;i<10;i++) for(j=0;j<12;j++) {m_cBmp[i][j].LoadBitmap(IDB_BITMAP1);Q[i][j]=0;}//SetBmp();ToStart=1;Qi=0;//CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);m_flag_Color=true;}}voidCTestDlg::OnButtonEnd()//結束函數{ //TODO:Addyourcontrolnotificationhandlercodehere for(i=0;i<10;i++) for(j=0;j<12;j++) m_cBmp[i][j].DeleteObject(); OnButtonStart(); MessageBox("點擊“開始”,清屏并重新開始游戲");ToStart=0;Qi=0;m_flag_Color=true; }//結束函數voidCTestDlg::OnButtonChoice()//改變選擇的開局棋色{ //TODO:Addyourcontrolnotificationhandlercodehere if(m_flag_Color==true){CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2); m_flag_Color=false; Qi=2; UpdateData(false);} else{CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1); m_flag_Color=true; Qi=1; UpdateData(false);}}調試運行以及實驗結果分析下面是程序運行結果的主窗口,如圖,包括棋盤,選擇開始按鈕,結束按鈕,以及選擇開局棋色。點擊開始按鈕,所有位圖加載一遍,準備開始棋局。下圖是點擊開始按鈕之后,棋盤發生的變化,由于還沒有選擇開局顏色,會彈出手選擇開局棋色的的窗口,因此,在點擊開始按鈕之后,一定要選擇開局棋色。下圖是一個簡單的棋局結果截圖,如圖,當黑棋或白棋有五個子兩在一起時,會判斷出哪方獲勝,這也就實現了判斷哪方獲勝功能,至于縱軸方向以及左斜或者右斜獲勝如何實現,可以看具體的函數編碼。當分出勝負后,可以點擊結束按鈕,開始新的一局,在彈出的對話框中單擊確定,開始新的一局。四.實驗總結:這次MFC程序的的實驗操作,使我們更加熟練地掌握并運用本學期所學的windows程序設計的基礎內容,在實驗過程中,我們通過參考教材,應用課堂老師所講的知識和我們所學習的c++的知識相結合,并經過小組討論,實現了這個簡單的五子棋應用程序,對我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年雙鴨山貨運考試
- 2025年海口貨運從業資格證模擬試題及答案
- 2025年山東出租車駕駛員從業資格考試試題全部題庫
- 2025年咸寧駕駛教練員從業資格考試
- 商家培訓課件
- 鹵味培訓課件
- 食品消費培訓課件
- 可行性研究報告服務計劃
- 化肥漲價通知函
- 心肺復蘇班會題目及答案
- 數據標注教學課件
- 涉密項目保密管理制度
- 東莞市招聘事業編制教職員筆試真題2024
- 小學數學老師德育論文
- CJ/T 303-2008穩壓補償式無負壓供水設備
- JG/T 346-2011合成樹脂裝飾瓦
- 腎性高血壓健康教育
- T/CAEPI 70-2023水泥窯協同處置生活垃圾焚燒飛灰水洗除鹽工藝技術要求
- 2025至2030年中國電梯能量回饋單元數據監測研究報告
- 2024年全國工會財務知識大賽備賽試題庫500(含答案)
- 四川省成都市青羊區2024-2025學年數學五下期末統考試題含答案
評論
0/150
提交評論