![VC課程設(shè)計(jì)報(bào)告-五子棋游戲_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd71.gif)
![VC課程設(shè)計(jì)報(bào)告-五子棋游戲_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd72.gif)
![VC課程設(shè)計(jì)報(bào)告-五子棋游戲_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd73.gif)
![VC課程設(shè)計(jì)報(bào)告-五子棋游戲_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd74.gif)
![VC課程設(shè)計(jì)報(bào)告-五子棋游戲_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd7/e96eb86b-08fd-4b1a-b520-41fb2e2c1fd75.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、班級(jí) 計(jì)054 學(xué)號(hào) 0506119 姓名 江金金 課程設(shè)計(jì)報(bào)告文檔題目: 五子棋游戲 一引言題目1編寫(xiě)目的:通過(guò)編寫(xiě)此報(bào)告以書(shū)面的形式向老師以及閱讀本報(bào)告的人員介紹本程序的設(shè)計(jì)過(guò)程以及使用方法和在程序設(shè)計(jì)過(guò)程中出現(xiàn)的問(wèn)題等.2定義:類(lèi)(Class):實(shí)際上是對(duì)某種類(lèi)型的對(duì)象定義變量和方法的原型。它表示對(duì)現(xiàn)實(shí)生活中一類(lèi)具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A(chǔ)。 MFC: Microsoft Foundation Class 微軟基礎(chǔ)類(lèi)庫(kù)。MFC是一個(gè)編程框架,MFC (Microsoft Foundation Class Library微軟基礎(chǔ)類(lèi)
2、)中的各種類(lèi)結(jié)合起來(lái)構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來(lái)建立Windows下的應(yīng)用程序,總體上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶(hù)接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。派生類(lèi)和基類(lèi):通過(guò)繼承機(jī)制,可以利用已有的數(shù)據(jù)類(lèi)型來(lái)定義的數(shù)據(jù)類(lèi)型。所定義的新的數(shù)據(jù)類(lèi)型不僅擁有新定義的成員,而且還同時(shí)擁有舊的成員。我們稱(chēng)已存在的用來(lái)派生新類(lèi)的類(lèi)為基類(lèi),又稱(chēng)為父類(lèi)。由已存在的類(lèi)派生出的新類(lèi)稱(chēng)為派生類(lèi),又稱(chēng)為子類(lèi)。 CwuziqiView:CView類(lèi)的派生類(lèi),CView類(lèi)是基類(lèi),完成程序文檔/視圖結(jié)構(gòu)的組建。OOP:面向?qū)ο缶?/p>
3、程(Object Oriented Programming面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP 達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息,處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。二任務(wù)的描述1目標(biāo): 1、人機(jī)對(duì)弈:完成人和計(jì)算機(jī)的對(duì)弈,用兩種顏色表示對(duì)弈雙方的棋子,計(jì)算機(jī)走棋要用到一定的算法,即不能很快就輸給人2、雙人對(duì)弈:即由兩個(gè)人之間對(duì)弈,輪流走棋,不能一方連走兩步。3、重放功能:一次對(duì)弈游戲結(jié)束后,能夠重放該次游戲的過(guò)程。4、要求界面友好、功能完善。2功
4、能描述: 1、人機(jī)對(duì)弈:完成人和計(jì)算機(jī)的對(duì)弈,用兩種顏色表示對(duì)弈雙方的棋子,計(jì)算機(jī)走棋用到一定的算法.2、雙人對(duì)弈:即由兩個(gè)人之間對(duì)弈,輪流走棋,不能一方連走兩步。3、判斷輸贏:當(dāng)一方有五個(gè)或以上相鄰的棋子連成一條線時(shí),計(jì)算機(jī)能判定輸贏,并能結(jié)束本次游戲,由游戲者選擇進(jìn)入下輪游戲或是重放游戲.4、重放功能:一次對(duì)弈游戲結(jié)束后,能夠重放該次游戲的過(guò)程。5、音樂(lè)播放:在游戲過(guò)程中游戲者可以自由選擇是否播放背景音樂(lè).6、游戲暫停和繼續(xù):游戲過(guò)程中可以暫停游戲,此時(shí)鼠標(biāo)不能進(jìn)行下子,直到再次點(diǎn)擊該選項(xiàng),重新進(jìn)入游戲模式.7、游戲的存儲(chǔ)和打開(kāi):游戲中斷時(shí)可以對(duì)本次游戲以.wzq(五子棋的縮寫(xiě)詞)為后綴進(jìn)
5、行保存和打開(kāi).以便下次繼續(xù)進(jìn)行游戲.以上功能均可以通過(guò)菜單欄選擇相應(yīng)的選項(xiàng),也可通過(guò)工具欄進(jìn)行選擇。3性能描述 (1)數(shù)據(jù)精確度:整型(int) -3276832767 (2)時(shí)間特性: 游戲重放過(guò)程中用到Sleep();函數(shù)使重放時(shí)棋子每隔設(shè)定的時(shí)間進(jìn)行重放。4運(yùn)行環(huán)境: 硬件:裝有windows操作系統(tǒng)的計(jì)算機(jī)軟件:Visual C+6.05條件與限制:各種版本的Windows操作系統(tǒng)并且裝有Visual C+6.0均可以運(yùn)行該游戲三任務(wù)設(shè)計(jì)游戲開(kāi)始:選擇游戲模式1總體設(shè)計(jì): 人人對(duì)弈人機(jī)對(duì)弈黑棋下白棋下電腦下白棋下否是否結(jié)束每步棋都判斷重新開(kāi)始游戲 否 是是否重放 游戲結(jié)束游戲重放是否
6、2類(lèi)的劃分:程序中主要用到了三個(gè)類(lèi),即:CChess(棋子類(lèi)),CQiPan(棋盤(pán)類(lèi)),CwuziqiView(視圖類(lèi))。 (1)類(lèi)1: CChess(棋子類(lèi)):主要完成畫(huà)黑白棋子的功能。 數(shù)據(jù)成員:int x; int y; /黑白棋子在棋盤(pán)中的點(diǎn)坐標(biāo) bool colorwhite; /為true時(shí),畫(huà)白棋,反之畫(huà)黑棋 CBitmap m_bmwhite; /用來(lái)存放白色棋子的位圖 CBitmap m_bmblack;/用來(lái)存放黑色棋子的位置函數(shù)成員:void drawblack(CDC *pDC,int x,int y); /在指定位置畫(huà)黑色的棋void drawwhite(CDC *p
7、DC,int x,int y); /在指定位置畫(huà)白色的棋程序流程圖:游戲開(kāi)始假真調(diào)用drawwhite();調(diào)用drawblack();Colorwhite為真 游戲結(jié)束(2)類(lèi)2:CQiPan(棋盤(pán)類(lèi)):主要完成畫(huà)規(guī)定大小的棋盤(pán) 數(shù)據(jù)成員: int linenum; /棋盤(pán)橫豎線的條數(shù) int space; /棋盤(pán)兩條線間的空格長(zhǎng)度 函數(shù)成員: void drawqipan(CDC *pDC); /由線數(shù)和間隙畫(huà)出棋盤(pán)程序流程圖:游戲開(kāi)始:CwuziqiView:Ondraw調(diào)用 drawqipan();窗體重畫(huà),再次調(diào)用drawqipan();游戲結(jié)束(3)類(lèi)3: CWuziqiView(
8、視圖類(lèi))游戲開(kāi)始,調(diào)用 Start();程序流程圖:pvp為真Music為真真否人與人對(duì)弈人與機(jī)對(duì)弈stopmusic();playmusic();Colorwhite為真Colorwhite為真否真 否調(diào)用drawblack();調(diào)用drawwhite();調(diào)用cputdown();wzqxy=0為真over為真否真是找最佳位置,調(diào)用bestb()和bestw()游戲結(jié)束again為真是否為最佳佳位置否調(diào)用Again()重放游戲過(guò)程是調(diào)用 putdown();否CWuziqiView(視圖類(lèi)):游戲的整個(gè)流程均在這個(gè)類(lèi)中實(shí)現(xiàn) 數(shù)據(jù)成員: CQiPan qipan; /用它的對(duì)象調(diào)用函數(shù)畫(huà)棋盤(pán)
9、 CChess chess; /用它的對(duì)象調(diào)用函數(shù)畫(huà)棋子 HCURSOR hcursorwhite; /存放白色鼠標(biāo)的位圖 HCURSOR hcursorblack; /存放黑色鼠標(biāo)的位圖 CPoint vspoint; /存放電腦下棋時(shí)的棋子位置 bool gameover; /記錄游戲結(jié)束的標(biāo)志 bool stop; /記錄暫停游戲的標(biāo)志 bool again; /記錄重放游戲的標(biāo)志 bool music; /記錄是否播放音樂(lè) bool pvp; /記錄與人或人與機(jī)對(duì)弈的標(biāo)志 int wzq1919; /記錄棋盤(pán)上某點(diǎn)上的狀態(tài) int data300; /記錄下棋的順序和狀態(tài) int da
10、taagain300; /記錄下棋的順序和狀態(tài) 成員函數(shù): int over(CPoint point); /檢查是否結(jié)束 void Again(); / 顯示游戲過(guò)程 void cputdown(); /電腦下棋 void putdown(int x,int y); /人對(duì)弈時(shí),電腦放下棋子 int bestb(); /在黑棋中間尋找最佳下棋點(diǎn) int bestw(); /在白棋中間尋找最佳下棋點(diǎn) int wb1(int i,int j,int x);/在橫方向上尋找附近同色的子 int wb2(int i,int j,int x); /在豎方向上尋找附近同色的子 int wb3(int i
11、,int j,int x); /在左斜方向上尋找附近同色的子 int wb4(int i,int j,int x); /在右斜方向上尋找附近同色 int maxnum(int a,int b,int c,int d); /在四個(gè)數(shù)中找最大void Start(); /游戲開(kāi)始函數(shù)void playmusic(); /播放音樂(lè)函數(shù)void stopmusic(); /停止播放音樂(lè)函數(shù)3類(lèi)的接口設(shè)計(jì): (1)類(lèi)1:void drawblack(CDC *pDC,int x,int y); /在CWuziqiView類(lèi)中傳入設(shè)備上下文和棋子的坐標(biāo),進(jìn)而可以在指定位置畫(huà)黑色的棋子void drawwh
12、ite(CDC *pDC,int x,int y); /在CWuziqiView類(lèi)中傳入設(shè)備上下文和棋子的坐標(biāo),進(jìn)而可以在指定位置畫(huà)白色的棋子(2)類(lèi)2:void drawqipan(CDC *pDC); /通過(guò)棋盤(pán)類(lèi)在其構(gòu)造函數(shù)中設(shè)置好大小的linenum線數(shù)和間隙space畫(huà)出相應(yīng)大小的棋盤(pán)。(3)類(lèi)3:int over(CPoint point); /傳入一個(gè)點(diǎn),通過(guò)這個(gè)函數(shù)檢查游戲是否結(jié)束 void Again(); / 顯示游戲過(guò)程 void cputdown(); /電腦下棋 void putdown(int x,int y); /人對(duì)弈時(shí),電腦放下棋子 int bestb();
13、/在黑棋中間尋找最佳下棋點(diǎn) int bestw(); /在白棋中間尋找最佳下棋點(diǎn) int wb1(int i,int j,int x); /在橫方向上尋找附近同色的子,返回個(gè)數(shù) int wb2(int i,int j,int x); /在豎方向上尋找附近同色的子,返回個(gè)數(shù) int wb3(int i,int j,int x); /在左斜方向上尋找附近同色的子,返回個(gè)數(shù) int wb4(int i,int j,int x); /在右斜方向上尋找附近同色的子,返回個(gè)數(shù) int maxnum(int a,int b,int c,int d); /在四個(gè)數(shù)中找最大數(shù),并返回void Start();
14、/游戲開(kāi)始函數(shù)void playmusic(); /播放音樂(lè)函數(shù)void stopmusic(); /停止播放音樂(lè)函數(shù)4類(lèi)之間的關(guān)系:ChessBoard(棋盤(pán)類(lèi))-linenum:int-space:int+ drawqipan() :voidCGoBangView(視圖類(lèi))-Qipan: CQiPan; -chess: CChess-vspoint: CPoint-gameover: bool-bool stop: bool-again: bool-music: bool-pvp: bool -wzq1919:int-data300:int-dataagain300:int+over():
15、int+Again():void +cputdown():void+putdown():void+bestb():int+bestw():int +maxnum():int+Start():void+playmusic():void+stopmusic():void棋盤(pán)類(lèi)是視圖類(lèi)的一個(gè)數(shù)據(jù)成員.棋子類(lèi)是視圖類(lèi)的一個(gè)數(shù)據(jù)成員.Chess(棋子類(lèi))-x:int-y:int -colorwhite:bool-m_bmwhite: CBitmap-m_bmblack: CBitmap+drawblack():void+drawwhite():voidCChess類(lèi)的對(duì)象和CQiPan類(lèi)的對(duì)象是CGoB
16、angView類(lèi)的兩個(gè)數(shù)據(jù)成員,所以類(lèi)CGoBangView包含類(lèi)CChess和類(lèi)CQiPan。 四編寫(xiě)代碼與測(cè)試1問(wèn)題1 (1)問(wèn)題描述:在做鼠標(biāo)圖形更換函數(shù)時(shí)即: BOOL CWuziqiView:OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message),其中涉及到改變狀態(tài)欄的語(yǔ)句,讓狀態(tài)欄顯示當(dāng)前該下棋的是黑或白棋。結(jié)果出現(xiàn)如下錯(cuò)誤:error C2065: 'CMainFrame' : undeclared identifierE:VC+課程設(shè)計(jì)wuziqiwuziqiView.cpp(426) : error C2065
17、: 'pFrm' : undeclared identifierE:VC+課程設(shè)計(jì)wuziqiwuziqiView.cpp(426) : error C2059: syntax error : ')'E:VC+課程設(shè)計(jì)wuziqiwuziqiView.cpp(427) : error C2227: left of '->m_wndStatusBar' must point to class/struct/union執(zhí)行 cl.exe 時(shí)出錯(cuò). (2)解決辦法: 在CWuziqiView.cpp文件中加入一條語(yǔ)句:“#include &quo
18、t;MainFrm.h"”2問(wèn)題2 (1)問(wèn)題描述:在CWuziqiView.h中定義CChess chess作為數(shù)據(jù)成員時(shí)出現(xiàn)如下錯(cuò)誤:e:vc+課程設(shè)計(jì)wuziqiwuziqiview.h(68) : error C2501: 'CChess' : missing storage-class or type specifierse:vc+課程設(shè)計(jì)wuziqiwuziqiview.h(68) : error C2501: 'chess' : missing storage-class or type specifiersGenerating Code
19、.執(zhí)行 cl.exe 時(shí)出錯(cuò). (2)解決辦法:在CWuziqiView.h文件中加入一條語(yǔ)句:“#include "Chess.h"”五程序運(yùn)行 1程序運(yùn)行的過(guò)程:生成窗口:在使用AppWizard創(chuàng)建好應(yīng)用程序后,生成窗口的過(guò)程都是系統(tǒng)自動(dòng)完成的。整個(gè)過(guò)程為:1、定義和注冊(cè)窗口類(lèi);2、初始化窗口實(shí)例,包括創(chuàng)建窗口,顯示窗口和更新窗口。維護(hù)消息循環(huán):上一過(guò)程結(jié)束后,應(yīng)用程序的主窗口就顯示在屏幕上,剩下的就是處理消息,Windows系統(tǒng)監(jiān)控所有的輸入設(shè)備,將外部發(fā)生的事件轉(zhuǎn)化為對(duì)應(yīng)的消息,并將消息放入消息隊(duì)列中。最后,從消息隊(duì)列中取出消息,發(fā)送到相應(yīng)的消息處理函數(shù)進(jìn)行處理。
20、消息處理函數(shù): 本程序中主要處理的消息是當(dāng)用戶(hù)按下鼠標(biāo)左鍵(WM_ LBUTTONDOWN)。根據(jù)鼠標(biāo)的位置,完成畫(huà)棋子,判斷勝負(fù)等工作。2類(lèi)的構(gòu)造順序:類(lèi)CGoBangView->類(lèi)CChess->類(lèi)CQiPan3錯(cuò)誤描述及其解決辦法(1)問(wèn)題1:?jiǎn)栴}描述:在設(shè)計(jì)完計(jì)算機(jī)下棋算法后,運(yùn)行游戲發(fā)現(xiàn)計(jì)算機(jī)不是按我心中設(shè)計(jì)的算法來(lái)走棋的,它只顧走自己的,不管別人怎么走。 解決辦法:通過(guò)逐行逐句地查找函數(shù)語(yǔ)句,發(fā)現(xiàn)程序中某些函數(shù)的參數(shù)沒(méi)有傳遞正確,(函數(shù)int CWuziqiView:wb1(int i,int j,int x)中最后一個(gè)參數(shù)應(yīng)該傳遞兩次,一次是1,一次是-1也就是尋找黑
21、白兩種顏色的棋子最佳落棋點(diǎn),結(jié)果兩次均傳的-1,所以出現(xiàn)電腦只顧自己下棋的錯(cuò)誤)(2)問(wèn)題2 問(wèn)題描述:在游戲重放時(shí),一次游戲結(jié)束后只能重放一次,不能多次重放。 解決辦法:由于本程序中的重放功能是用全局?jǐn)?shù)組進(jìn)行實(shí)現(xiàn)的,數(shù)組在一次進(jìn)行完之后就進(jìn)行清空,只能重放一次,后將這個(gè)數(shù)組賦值給另一數(shù)組,下次游戲時(shí)覆蓋本次的數(shù)據(jù),實(shí)現(xiàn)多次重放。六、感想認(rèn)識(shí) 通過(guò)本課程設(shè)計(jì),使我對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念、原理和技術(shù),會(huì)使用Visual C+開(kāi)發(fā)工具進(jìn)行簡(jiǎn)單面向?qū)ο蟪绦虻拈_(kāi)發(fā),對(duì)MFC的的相關(guān)概念及編程方法等有了全面的了解,從中認(rèn)識(shí)到MFC的強(qiáng)大功能以及其復(fù)雜性,同時(shí)對(duì)C+中類(lèi)的封裝,有了更加深刻的理解。在
22、實(shí)驗(yàn)過(guò)程中,前一階段我只是考慮到程序中相關(guān)算法的實(shí)現(xiàn)而沒(méi)有去考慮用面向?qū)ο蟮挠^點(diǎn)去不分析和解決問(wèn)題,只是用面向?qū)ο蟮墓ぞ呷?xiě)非面向?qū)ο蟮某绦?,在弄清楚程序相關(guān)算法后寫(xiě)出了沒(méi)有封裝C+程序,后經(jīng)發(fā)現(xiàn),只得重新再來(lái),重新用面向?qū)ο蟮乃枷肴タ紤]問(wèn)題,并最終解決問(wèn)題,實(shí)現(xiàn)程序的封裝和實(shí)驗(yàn)要求。 雖然在程序設(shè)計(jì)過(guò)程中走了不少?gòu)澛?,但最終都能自己發(fā)現(xiàn)問(wèn)題,自己解決問(wèn)題,感覺(jué)收獲很大。并認(rèn)識(shí)到大膽去探索的重要性。七參考文獻(xiàn)黃維通.VC+面向?qū)ο笈c可視化程序設(shè)計(jì).清華大學(xué)出版社,2000伍俊良.Visual C+課程設(shè)計(jì)與系統(tǒng)開(kāi)發(fā)案例.清華大學(xué)出版社,2002陳賢等.VC應(yīng)用編程實(shí)例進(jìn)階.中國(guó)鐵道出
23、版社,2003王育堅(jiān) Visual C+面向?qū)ο缶幊探坛?清華大學(xué)出版社 2003胡哲源 掌握Visual C+MFC程序設(shè)計(jì)與剖析 清華大學(xué)出版社 2001周長(zhǎng)發(fā) 精通Visual C+圖像編程 電子工業(yè)出版社 2000八程序代碼Chess.cppCChess:CChess()m_bmwhite.LoadBitmap(IDB_white); m_bmblack.LoadBitmap(IDB_black);void CChess:drawwhite(CDC *pDC,int x,int y) CDC Dc; /CDC *pDC=GetDC(); CBitmap m; m.LoadBitmap(
24、IDB_white); if(Dc.CreateCompatibleDC(pDC)=FALSE) AfxMessageBox("Can't create DC"); Dc.SelectObject(m); pDC->BitBlt(x*30+32,y*30+32,160,160,&Dc,0,0,SRCCOPY);void CChess:drawblack(CDC *pDC,int x,int y) CDC Dc; /CDC *pDC=GetDC(); CBitmap m; m.LoadBitmap(IDB_black); if(Dc.CreateComp
25、atibleDC(pDC)=FALSE) AfxMessageBox("Can't create DC"); Dc.SelectObject(m); pDC->BitBlt(x*30+32,y*30+32,160,160,&Dc,0,0,SRCCOPY);QiPan.cppvoid CQiPan:drawqipan(CDC *pDC) CBrush mybrush1; mybrush1.CreateSolidBrush(RGB(192,192,192); CRect myrect1(0,0,1200,800); pDC->FillRect(myr
26、ect1,&mybrush1); /畫(huà)棋盤(pán)框線 CPen mypen; CPen*myoldPen; mypen.CreatePen(PS_SOLID,1,RGB(0,0,0); myoldPen=pDC->SelectObject(&mypen); for(int i=0;i<19;i+) pDC->MoveTo(40,40+i*30); pDC->LineTo(580,40+i*30); pDC->MoveTo(40+i*30,40); pDC->LineTo(40+i*30,580); wuziqiView.cppCWuziqiView
27、:CWuziqiView()/ TODO: add construction code here /Load鼠標(biāo)圖像和棋子位圖 / num=0; for(int k=0;k<300;k+) datak=0; hcursorblack=AfxGetApp()->LoadCursor(IDC_black); hcursorwhite=AfxGetApp()->LoadCursor(IDC_white); /清理棋盤(pán) /數(shù)組值為0表示沒(méi)有棋子 for(int i=0;i<19;i+) for(int j=0;j<19;j+) wzqij=0; for(int x=0;x
28、<300;x+) dataagainx=-2; /白棋先下 chess.colorwhite=true;stop=false;pvp=true;CWuziqiView:CWuziqiView()BOOL CWuziqiView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CWuziqiView drawingvoid CWuziqi
29、View:Again() CDC Dc;CDC *pDC=GetDC();qipan.drawqipan(pDC);for(int i=0;i<300;i+=3) if(dataagaini+2=1) chess.drawwhite(pDC,dataagaini,dataagaini+1);Sleep(600); else if(dataagaini+2=-1) chess.drawblack(pDC,dataagaini,dataagaini+1);Sleep(600); Sleep(300);num=0;Start();MessageBox("重放完畢!");vo
30、id CWuziqiView:Start()for(int i=0;i<19;i+)for(int j=0;j<19;j+)wzqij=0;for(int k=0;k<300;k+) datak=0; for(int x=0;x<2;x+)Bx=-2;Wx=-2;num=0;chess.colorwhite=true;stop=false;gameover=false;again=true;music=true;Invalidate();int CWuziqiView:over(CPoint point) /獲取鼠標(biāo)指向數(shù)組位置,即中心位置 int xx,yy,x,y;
31、 x=(point.x-25)/30; y=(point.y-25)/30; if(x<4) xx=0; else xx=x-4; if(y<4) yy=0; else yy=y-4; int i,j,a; /橫向 for(i=xx;i<15;i+) a=0; for(j=i;j<i+5;j+) a+=wzqjy; if(a=5) again=true; chess.colorwhite=true; gameover=true; MessageBox("白棋勝利!"); for(int y=0;y<300;y+) dataagainy=data
32、y; return 1; if(a=-5) again=true; chess.colorwhite=true; gameover=true; MessageBox("黑棋勝利!");for(int y=0;y<300;y+) dataagainy=datay;return -1; /豎向 for(i=yy;i<15;i+) a=0; for(j=i;j<i+5;j+) a+=wzqxj; if(a=5) again=true; chess.colorwhite=true; gameover=true; MessageBox("白棋勝利!&quo
33、t;); for(int y=0;y<300;y+) dataagainy=datay; return 1; if(a=-5) again=true; chess.colorwhite=true; gameover=true; MessageBox("黑棋勝利!"); for(int y=0;y<300;y+) dataagainy=datay; return -1; /主對(duì)角線 int c; a=0; for(i=0;i<5;i+) if(wzqx-iy-i=wzqxy&&(x-i)>=0&&(y-i)>=0)
34、 a=a+wzqx-iy-i; if(a=5) chess.colorwhite=true; again=true; gameover=true; AfxMessageBox("白棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return 1; break; if(a=-5) again=true; chess.colorwhite=true; gameover=true; AfxMessageBox("黑棋勝!");for(int y=0;y<300;y+) dataagainy=datay;
35、return -1; break; else c=a; /到了邊界 else break; for(i=1;i<5;i+) if(wzqx+iy+i=wzqxy&&(x+i)<19&&(y+i)<19) c=c+wzqx+iy+i; if(c=5) again=true; chess.colorwhite=true; gameover=true; AfxMessageBox("白棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return 1; break; if(c=-5
36、) again=true; chess.colorwhite=true; gameover=true; AfxMessageBox("黑棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return -1; break; /到了邊界 else break; /副對(duì)角線 int b; a=0; for(i=0;i<5;i+) if(wzqx-iy+i=wzqxy&&(x-i)>=0&&(y+i)<19) a=a+wzqx-iy+i; if(a=5) again=true; ch
37、ess.colorwhite=true; gameover=true; AfxMessageBox("白棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return 1; break; if(a=-5) again=true;chess.colorwhite=true;gameover=true; AfxMessageBox("黑棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return -1; break; else b=a; /到了邊界 else
38、 break; for(i=1;i<5;i+) if(wzqx+iy-i=wzqxy&&(x+i)<19&&0<(y-i) b=b+wzqx+iy-i; if(b=5) again=true; chess.colorwhite=true; gameover=true; AfxMessageBox("白棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return 1; break; if(b=-5) again=true; chess.colorwhite=true; gam
39、eover=true; AfxMessageBox("黑棋勝!"); for(int y=0;y<300;y+) dataagainy=datay; return -1; break; /到了邊界 else break; if(gameover=false) return 0; void CWuziqiView:OnDraw(CDC* pDC)CWuziqiDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here /畫(huà)棋盤(pán) qipan.drawqipa
40、n(pDC); /重畫(huà)時(shí)顯示存在的棋子 CDC Dc; if(Dc.CreateCompatibleDC(pDC)=FALSE) AfxMessageBox("Can't create DC"); for(int n=0;n<19;n+) for(int m=0;m<19;m+) if(wzqnm=1) chess.drawwhite(pDC,n,m); else if(wzqnm=-1) chess.drawblack(pDC,n,m);/ CWuziqiView printingBOOL CWuziqiView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CWuziqiView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CWuziqiView:OnEndPrinting(CDC* /*pDC*/, CPrint
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鴨毛被行業(yè)深度研究分析報(bào)告
- 星奇(上海)半導(dǎo)體有限公司介紹企業(yè)發(fā)展分析報(bào)告
- 2025年中國(guó)運(yùn)動(dòng)休閑服飾行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)及投資戰(zhàn)略咨詢(xún)報(bào)告
- 個(gè)人供應(yīng)材料合同范本
- 2025-2030年商業(yè)智能貨柜管理系統(tǒng)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 裝修工程-可行性研究報(bào)告(完整)
- 2025-2030年復(fù)古風(fēng)格牌背設(shè)計(jì)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢(xún)報(bào)告
- 中國(guó)先導(dǎo)可調(diào)式減壓閥項(xiàng)目投資可行性研究報(bào)告
- 2025-2030年數(shù)據(jù)歸檔與檢索工具企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 傭人中介合同范本
- 商業(yè)銀行的風(fēng)險(xiǎn)審計(jì)與內(nèi)部控制
- 2024項(xiàng)目管理人員安全培訓(xùn)考試題及參考答案AB卷
- 2025年與商場(chǎng)合作協(xié)議樣本(5篇)
- 2024年12月青少年機(jī)器人技術(shù)等級(jí)考試?yán)碚摼C合試卷(真題及答案)
- 網(wǎng)絡(luò)與社交媒體管理制度
- 2025年春新外研版(三起)英語(yǔ)三年級(jí)下冊(cè)課件 Unit1第1課時(shí)Startup
- 2025年安徽碳鑫科技有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年寒假實(shí)踐特色作業(yè)設(shè)計(jì)模板
- 2024年福建漳州人才發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- JTGT F20-2015 公路路面基層施工技術(shù)細(xì)則
- 道路環(huán)衛(wèi)清掃保潔項(xiàng)目應(yīng)急處置預(yù)案
評(píng)論
0/150
提交評(píng)論