freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

五子棋游戲程序設(shè)計與開發(fā)-文庫吧

2024-11-16 01:33 本頁面


【正文】 屬性包括:當(dāng)前棋子坐標(biāo)的坐標(biāo)位置,用來判斷棋子是否落下的落點標(biāo)識,黑白顏色標(biāo)志以及用來設(shè)置落點標(biāo)志,黑白顏色標(biāo)志,取得落點標(biāo)志,黑白顏色標(biāo)識四個方法。有了棋子類型的結(jié)構(gòu),我們就可以構(gòu)建一個 19*19 規(guī)格的棋盤,這個棋盤我們可以通過一個類來封裝。 在棋盤類中,我們首先建立一個 19 行 19 列的二維數(shù)組,用來構(gòu)建相同規(guī)格的棋盤。 這個二維數(shù)組當(dāng)然是上面已經(jīng)說明的棋子類型,以后在棋盤上下過的棋子都會標(biāo)記在這個二維數(shù)組中。在棋盤類中我們同時還定義了 List 鏈表,勝負判斷方法,棋盤初始化方法等內(nèi)容。棋子和棋盤的確立,使得我們解決上面的疑問變得很容易。我們只要在 WM_LBUTTONDOWN 消息中取得當(dāng)前鼠標(biāo)光標(biāo)橫縱坐標(biāo)值( x,y),將其代入相應(yīng)公式就可簡單換算相應(yīng)棋盤十字交叉點所屬區(qū)域,并將此點的落子標(biāo)志進行有子設(shè)置,通過刷新函數(shù),調(diào)用 WM_POINT 消息便可在相應(yīng)十字坐標(biāo)點畫出該棋子。如圖 所示: 圖 棋盤類示意圖 程序初始化設(shè)計 程序初始化就是將棋盤上所有十字交叉點的落子標(biāo)志 Tag,顏色標(biāo)識 color,位置信息 Seat 進行初始化。也就是將棋盤類中 二維數(shù)組 chessboard[i][j]中的各個屬性值進行初始設(shè)置。如圖 所示: 圖 棋盤初始化示意圖 判斷勝負算法 五子棋中勝負的判斷規(guī)則很簡單,因為五子棋又叫“五連珠”,顧名思義就是五個相同顏色的棋子哪一方玩家先連成一串,則為勝利?!拔暹B珠”的方向可以是水平方向、垂直方向、正對角線方面與負對角線方向共四個方向。在程序中我們可以通過每下一步棋,對棋盤進行一次遍歷,以便檢測在這四個方向上有沒有顏色標(biāo)識相同的五個棋子連在一起,如果有,則返回相應(yīng)結(jié)果。至此,勝負判斷已完畢。如圖 所示: 圖 勝負判斷示意圖 能夠取得游戲勝利的四個方向,如圖 所示: 圖 勝負判斷方向示意圖 悔棋功能設(shè)計 悔棋功能的實現(xiàn)分為二部分,首先是如何悔棋之后,使前一步棋子消失;然后是如何實現(xiàn)悔棋之后進行該棋子初始化。 第一個問題設(shè)計思想是通過 STL 中的 List 鏈表,將每一步棋子信息順序存入 List 鏈表中,在繪制窗口時,從 List 中提取該棋子信息并繪制,如果進行悔棋操作,則刪除上一步棋子信息,然后再次按照 List 中的棋子信息進行繪制,就能實現(xiàn)悔棋棋子消失的效果。具體流程圖,如圖 所示: 圖 悔棋功能流 程圖 第二個問題,如何實現(xiàn)悔棋之后的初始化。我的設(shè)計思想是,悔哪步棋子,就初始化哪一步棋子的信息,那么我們必須將每一步棋子的信息記錄下來,在悔棋時,提取出來然后進行悔棋,我在窗口創(chuàng)建前,定義了一個 xArray[16*16][2]的二維數(shù)組,用來在棋子進入 List 鏈表中存儲棋子二維坐標(biāo)位置。以便實現(xiàn)棋子位置信息和顏色信息的初始化操作。具體流程圖,如圖 所示: 圖 悔棋功能流程圖續(xù) 中定義鏈表容器: ?.. list chesspoint。 //利用 LIST 存取 棋子信息,實現(xiàn)悔棋功能 ?... 中實現(xiàn)邏輯功能: 在 WM_LBUTTONDOWN 單擊鼠標(biāo)左鍵下棋的消息中: InitChessB_back [i][j] 。 //push_back 將棋子信息存入 List 鏈表中的最后一個 if px 255 //將二維數(shù)組坐標(biāo)值 i 和 j 存入 xArray 數(shù)組中, xArray[px][0] i。 //將棋子二維坐標(biāo) i 值存入二維數(shù)組第一列 xArray[px][1] j。 //將棋子二維坐標(biāo) j 值存入二維數(shù)組第二列 px++。 //存完之后 px 后移 else px 0。 //棋子最后為 16*16 個,超過后將 px 置為 0 在 WM_PAINT 繪制窗口消息中,將 List 鏈表中的棋子信息通過 iter 迭代子一一找出并繪制在棋盤上,相關(guān)代碼如下: for i 0。i 17。i++ for j 0。j 17。j++ for iter InitChessBn 。 iter! InitChessB 。 iter++ if iter GetTag 1 amp。amp。 iter GetColos 1 //繪制黑色棋子 BitBlt bufferDC,iter , iter ,20,19,hdcMem,cxSource20,19, SRCCOPY 。 else if iter GetTag 1 amp。amp。 iter GetColos 2 //繪制白色棋子 BitBlt bufferDC, iter , iter , 20, 19, hdcMem,cxSource20, 0, SRCCOPY 。 HWND hWnd。 //定義一個全局窗口句柄 HACCEL hAccel。 //定義快捷鍵表句柄為型態(tài) HANDLE HMENU hMenu。 //定義一個菜單句柄 static int over 0。 //模式切換 0 為空閑, 1 為人機, 2 為雙人 static HINSTANCE hInstance。 //當(dāng)前實例句柄 HDC hdc。 //定義窗口設(shè)備句柄 void ChessBoard::Init for int i 0。 i 17。 ++i for int j 0。 j 17。 ++j chessboard[i][j]. 22* j+1 +15。 chessboard[i][j]. 22* i+1 +91。 chessboard[i][j].tag 0。 chessboard[i][j].colos 0。 ( 2) int judge HINSTANCE amp。hInstance,HWND amp。hwnd 。 //判斷勝負函數(shù) 說明: judge 方法,傳入當(dāng)前實例句柄與窗體句柄,每下一步棋子都會調(diào)用 judge 方法進行勝負判斷。返回一個整型數(shù), 1 為黑方勝利, 2 為白方勝利。 消息機制和主界面實現(xiàn) 消息機制說明 消息機制是 windows 程序中核心內(nèi)容, windows 各種窗口程序正是通過各種消息事件來傳遞信息,在五子棋中主要包含了鼠標(biāo)單擊 事件,按鈕點擊事件,菜單選擇事件以及各種窗體消息 WindowsMessage 消息: WM_COMMAND、 WM_CREATE、WM_LBUTTONDOWN、 WM_POINT 系統(tǒng)消息,通過這些消息 windows 系統(tǒng)給窗口發(fā)送這些消息,以便執(zhí)行相應(yīng)的操作。比如,鼠標(biāo)左鍵單擊消息 WM_LBUTTONDOWN 系統(tǒng)在探測到這一事件后,執(zhí)行其中的定位棋子屏幕坐標(biāo)和判斷黑白棋子的操作后屏幕刷新 InvalidateRect 執(zhí)行窗口繪制 WM_POINT 消息,將棋子畫到窗口上,可以說消息機制驅(qū)動了操作者與系統(tǒng)的互動,同時 又提供了系統(tǒng)本身機制的運行。 主界面設(shè)計 ( 1)棋盤界面的設(shè)計 五子棋小游戲中棋盤界面采用的是一張 BMP格式的資源圖片,如圖 23所示,它包括了棋盤界面與棋子樣式,這張圖片在窗口創(chuàng)建時 WM_CREATE 整體加載到程序中,相關(guān)代碼: hBitmap LoadBitmap hInstance, LPCTSTR IDB_BITMAP1 。 在窗口繪制消息 WM_PAINT 時,通過 Windows API 函數(shù) BitBlt 方法截取出所需要的部分繪制到窗口中。相關(guān)代碼如下: BitBlt bufferDC, 0, 75, cxSource20, cySource, hdcMem, 0, 0, SRCCOPY 。 其中, cxSource 與 cySource 是整張圖片在加載時用 GetObject 方法取得的長度與寬度的尺寸信息。 五子棋游戲程序的棋盤界面素材如下圖 所示: 圖 棋盤素材效果圖 ( 2)游戲菜單的設(shè)計 五子棋游戲中的菜單設(shè)計采用傳統(tǒng) Windows 窗體下拉菜單風(fēng)格,如下圖 所示。 菜單包括一級菜單:開始游戲、游戲設(shè)置、游戲幫助;二級菜單:雙人游戲、重新開始、退出游戲、我要悔棋、重新計 分、音效開關(guān)、作者簡介、游戲幫助、三級菜單:打開音效和關(guān)閉音效。 程序游戲菜單設(shè)計如下圖 所示: 圖 菜單效果圖 ( 3)記分牌與狀態(tài)欄設(shè)計 為了增加游戲的可玩性與實用性在主界面中加入了狀態(tài)欄與積分牌區(qū)域,狀態(tài)欄主要是顯示當(dāng)前游戲狀態(tài)包括目前游戲所進行的局數(shù)和提示由哪一方進行下棋操作,以及顯示每一局游戲的結(jié)果;記分牌則記錄了雙方玩家目前的勝負情況。這一部分的增加提高了游戲可玩性與美觀程度。邏輯上是通過建立 2 個表示黑方勝利局數(shù)和白方勝利局數(shù)的變量 blackWin和 whiteWin分別在一方獲勝之后進行 自加累計,然后通過 itoa 將整形裝換為字符串,用 TextOut 顯示在窗口上,總局數(shù)顯示則是通過將 winBlack 和 winWrite 加起來得到總局數(shù),界面效果如下圖 所示: 圖 狀態(tài)欄和記分牌效果圖 5 測試與運行分析 程序測試 與開發(fā)過程類似,測試過程也必須分步驟進行,每個步驟在邏輯上是前一個步驟地繼續(xù)。大型軟件系統(tǒng)通常由若干個子系統(tǒng)組成,每個子系統(tǒng)又由許多模塊組成。因此,大型軟件系統(tǒng)的測試的基本層次主要有: ( 1)單元測試 單元測試的用例從單元詳細設(shè)計中導(dǎo)出。在單元測試中可以采用功能性 測試和結(jié)構(gòu)性測試兩種。 ( 2)集成測試 在這個測試步驟中所發(fā)現(xiàn)的往往是概要設(shè)計的錯誤。 ( 3)系統(tǒng)測試 在這個測試步驟中所發(fā)現(xiàn)的往往是需求規(guī)格說明的錯誤。一般來說,系統(tǒng)測試是功能性測試,不是結(jié)構(gòu)性測試。 測試結(jié)果 按照以上步驟,程序測試結(jié)果如下: ( 1)雙人游戲 測試內(nèi)容:判斷是否能開始雙人游戲 操作:玩家單擊菜單“開始游戲―雙人游戲” 結(jié)果:開始雙人游戲 結(jié)論:測試成功 ( 2)重新開始 測試內(nèi)容:判斷是否能重新開始新游戲 操作:玩家單擊菜單“開始游戲―重新開始” 結(jié)果:重新開始游戲 結(jié)論: 測試成功 ( 3)悔棋功能 測試內(nèi)容:判斷是否在游戲中悔棋 操作:玩家單擊菜單“游戲設(shè)置―我要悔棋” 結(jié)果:悔棋 結(jié)論:測試成功 ( 4)重新計分 測試內(nèi)容:判斷在開始數(shù)輪游戲后,是否能刷新結(jié)果,重新計分 操作:玩家單擊菜單“開始游戲―重新計分” 結(jié)果:游戲分數(shù)、局數(shù)清零 結(jié)論:測試成功 運行分析 經(jīng)測試本程序能夠在 window95/2021/XP/7 操作系統(tǒng)中穩(wěn)定運行,但在游戲可玩性方面還有不足和改進,比如本程序僅支持雙人游戲模式,為了增加可玩性,后期可增加人機對弈模式,即 AI 模式。實現(xiàn)人與電腦對弈。 在網(wǎng)絡(luò)功能上可通過增加局域網(wǎng)內(nèi)聯(lián)網(wǎng) C/S 模式。 結(jié) 論 通過畢業(yè)設(shè)計對大學(xué)四年所學(xué)知識體系,進行了一次很好的歸納總結(jié)。一個項目從整體構(gòu)思,到詳細設(shè)計。都是在不斷完善和改進的過程中進行的。這種“由簡到繁,逐步推進”的方法不僅是編寫一個程序或者一個段代碼,更是做任何事情的一般道理。從如何用鼠標(biāo)將圓圈圖案畫到屏幕上,到如何判斷勝負,從如何傳遞一個指針,到如何向窗口發(fā)送一個消息,解決了各種各樣的問題,使我對Windows 程序設(shè)計有了更加深刻理解和認識。 我體會最為深刻的一點是系統(tǒng)架構(gòu)和設(shè)計模式的重要性。即使是對于 一個并不大的程序,代碼的組織都是非常重要的,因為這關(guān)系到日后的維護以及擴展。這個游戲之中,有關(guān)網(wǎng)絡(luò) Socket 編程或者博弈樹算法的知識都可以直接從無所不包的 Inter 上獲取,甚至可以直接獲得一個完整的五子棋人機對弈算法的源代碼級模塊。但是對于系統(tǒng)的架構(gòu),卻完全是自己的事情,幾千上萬行的代碼需要通過合適的方法組織起來,使程序員編寫代碼更加有條理,更加符合軟件工程的標(biāo)準(zhǔn),這才是最重要的。 參考文獻 [1] 微軟公司 . MSDN Library Visual Studio [M].美國: Mirosoft Company, 1998. [2] Charles 程序設(shè)計 [M].北京:北京大學(xué)出版社, 2021. [3] Bruce in C++[M].北京:機械工業(yè)出版社, . [4] Nicolai al C++標(biāo)準(zhǔn)程序庫 [M].湖北:華中科技大學(xué)出版社, . [5] 侯俊杰 . 深入淺出 MFC 第 2 版 [M].湖北:華中科技大學(xué)出版社, 1999. [6] 侯捷致 謝 感謝我的父母,沒有您們的包容和支持,就不會有我的今天。 感謝我的導(dǎo) 師李忍東老師,您認真的指導(dǎo)使得我能完成畢業(yè)設(shè)計。 感謝王京老師,您無私的幫助使得我能順利的完成論文的撰寫。 感謝我的 C++老師楊和平老師,在您的教授下讓我掌握了 C++語言以及常用的數(shù)據(jù)結(jié)構(gòu),將我領(lǐng)進代碼世界。 感謝北京神州航天軟件技術(shù)有限公司,為我無償提供了開發(fā)環(huán)境。 感謝 231 宿舍的所有兄弟,尤其是曹銘和王亮,謝謝你們在我
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1