C++課程設(shè)計(jì)-五子棋游戲

上傳人:hao****021 文檔編號(hào):122295647 上傳時(shí)間:2022-07-20 格式:DOCX 頁(yè)數(shù):28 大?。?46.73KB
收藏 版權(quán)申訴 舉報(bào) 下載
C++課程設(shè)計(jì)-五子棋游戲_第1頁(yè)
第1頁(yè) / 共28頁(yè)
C++課程設(shè)計(jì)-五子棋游戲_第2頁(yè)
第2頁(yè) / 共28頁(yè)
C++課程設(shè)計(jì)-五子棋游戲_第3頁(yè)
第3頁(yè) / 共28頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《C++課程設(shè)計(jì)-五子棋游戲》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《C++課程設(shè)計(jì)-五子棋游戲(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 課 程 設(shè) 計(jì) 說(shuō) 明 書(shū) 五子棋游戲 The Game of Gobang 學(xué)院名稱(chēng): 機(jī)械工程學(xué)院 專(zhuān)業(yè)班級(jí): 測(cè)控 10xx 學(xué)生姓名: 江x 指導(dǎo)教師姓名: 張xx 指導(dǎo)教師職稱(chēng): 副教授 2012年6月 目錄 第一章 需求分析 5 1.1系統(tǒng)概述 5 概述: 5 1.2系統(tǒng)運(yùn)行環(huán)境 5 運(yùn)行環(huán)境 5 1.3功能需求描述 6 功能需求 6 第二章 總體設(shè)計(jì) 6 2.1

2、開(kāi)發(fā)與設(shè)計(jì)的總體思想 6 總體設(shè)計(jì)思路 6 屏幕的組成 7 形狀的組成 8 形狀的統(tǒng)一 8 第三章 概要設(shè)計(jì) 9 3.1系統(tǒng)流程圖 9 3.2 軟件功能模塊 10 3.3 系統(tǒng)功能模塊 11 第四章 詳細(xì)設(shè)計(jì) 11 4.1.界面的設(shè)計(jì) 11 總體界面的設(shè)計(jì) 11 界面棋子的設(shè)計(jì) 11 4.2.顯示界面的準(zhǔn)備 13 在窗體類(lèi)中添加存放黑白棋兩維數(shù)組和背景棋盤(pán)、黑棋、白棋位圖對(duì)象 13 4.2.2 在窗體構(gòu)造函數(shù)中初始化wb,裝入棋盤(pán)、黑棋、白棋位圖 13 4.3. 顯示棋盤(pán)和棋子代碼 13 4.4. 輪流下子代碼 14 4.5. 判斷輸贏(yíng) 17 判斷是否白

3、棋勝代碼 17 判斷是否黑棋勝代碼 18 判斷是否平局代碼 19 4.6. 悔棋 19 4.7. 重新開(kāi)始 20 4.8. 背景音樂(lè) 21 4.9. 保存讀取游戲文件 21 保存文件: 22 讀取文件: 23 第五章 測(cè)試分析 24 結(jié)論和心得體會(huì) 25 致 謝 26 參考文獻(xiàn): 27 課程設(shè)計(jì)任務(wù)書(shū) 一、 課程設(shè)計(jì)目的 課程設(shè)計(jì)是工科各專(zhuān)業(yè)的主要實(shí)踐性教學(xué)環(huán)節(jié)之一,是圍繞一門(mén)主要基礎(chǔ)課或?qū)I(yè)課,運(yùn)用所學(xué)課程的知識(shí),結(jié)合實(shí)際應(yīng)用設(shè)計(jì)而進(jìn)行的一次綜合分析設(shè)計(jì)能力的訓(xùn)練。 課程設(shè)計(jì)旨在培養(yǎng)學(xué)生在本課程范圍內(nèi),初步掌握解決實(shí)際應(yīng)用問(wèn)題時(shí)所應(yīng)具有的查閱資料、綜合運(yùn)用

4、所學(xué)知識(shí)的能力,為課程設(shè)計(jì)及今后從事專(zhuān)業(yè)工作打下基礎(chǔ)。 二、 課程設(shè)計(jì)的內(nèi)容及要求 利用所學(xué)的面向?qū)ο蠹癈++編程知識(shí)和技巧,通過(guò)布置具有一定難度的程序設(shè)計(jì)題目,并且要求學(xué)生獨(dú)立完成所布置題目,在分析設(shè)計(jì)過(guò)程中,要求學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會(huì)分析簡(jiǎn)單的實(shí)際問(wèn)題,并能利用所學(xué)的知識(shí)建立系統(tǒng)的邏輯結(jié)構(gòu),學(xué)會(huì)簡(jiǎn)單的調(diào)試技巧和方法。根據(jù)系統(tǒng)的功能要求,要求學(xué)生逐步完成應(yīng)用程序的設(shè)計(jì),具體要求為: 1、按規(guī)定的時(shí)間及要求上機(jī)。 2、設(shè)計(jì)方案正確,正確劃分所選課題的系統(tǒng)功能模塊。 3、系統(tǒng)設(shè)計(jì)要盡量實(shí)用,數(shù)據(jù)與功能分析詳細(xì)。 4、要求C++編碼簡(jiǎn)潔、穩(wěn)定、高效。 5、獨(dú)立查閱資料,認(rèn)真書(shū)寫(xiě)

5、課程設(shè)計(jì)說(shuō)明書(shū)。 三、 進(jìn)度安排 此次課程設(shè)計(jì)時(shí)間為兩周,分五個(gè)階段完成: 1、分析設(shè)計(jì)階段:學(xué)生自主學(xué)習(xí)和鉆研問(wèn)題,明確設(shè)計(jì)要求,找出實(shí)現(xiàn)方法,按照需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)這幾個(gè)步驟進(jìn)行。這一階段前第1-3天完成。 2、編程調(diào)試階段:根據(jù)設(shè)計(jì)分析方案編寫(xiě)C++代碼,然后調(diào)試該代碼,實(shí)現(xiàn)課題要求的功能。這一階段在第4-7天完成。 3、總結(jié)報(bào)告階段:總結(jié)設(shè)計(jì)工作,寫(xiě)出課程設(shè)計(jì)說(shuō)明書(shū),要求學(xué)生寫(xiě)出需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程測(cè)試的步驟和內(nèi)容。這一階段在第8-9天完成。 4、考核階段。這一階段在第10天完成。 四、 課程設(shè)計(jì)說(shuō)明書(shū)要求 課程設(shè)計(jì)說(shuō)明書(shū)包括課程設(shè)計(jì)的目的、意義

6、和任務(wù),軟件開(kāi)發(fā)工具介紹、任務(wù)分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程、調(diào)試的步驟和內(nèi)容、課程設(shè)計(jì)總結(jié)、參考資料等,不符合以上要求者,則本次設(shè)計(jì)以不及格記。具體格式參看《江蘇大學(xué)課程設(shè)計(jì)說(shuō)明書(shū)寫(xiě)作規(guī)范》 五、 課程設(shè)計(jì)題目:設(shè)計(jì)一個(gè)五子棋游戲 六、 上機(jī)時(shí)間及地點(diǎn) 地點(diǎn):計(jì)算中心NA1 NA2 上機(jī)時(shí)間: 19周 星期四 1 2 3 4 節(jié) 星期五 1 2 3 4 5 6 7 8 節(jié) 20周 星期一 5 6 7 8 節(jié) 星期二 1 2 3 4 5 6 7 8 節(jié) 星期三 1 2 3 4 節(jié)

7、 星期四 1 2 3 4 5 6 7 8 節(jié) 星期五 1 2 3 4節(jié) 七、 答辯時(shí)間 20周 星期六 五子棋游戲 摘要 此課程設(shè)計(jì)的目的是為了達(dá)到熟練掌握C++語(yǔ)言的基本知識(shí)和C++調(diào)試技能;基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法;能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)問(wèn)題;培養(yǎng)綜合利用C++語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力,主要是培養(yǎng)利用系統(tǒng)提供的標(biāo)準(zhǔn)圖形函數(shù)進(jìn)行創(chuàng)新設(shè)計(jì)。該游戲軟件在Windows系統(tǒng)為玩家提供傳統(tǒng)五子棋游戲的基本功能,在這簡(jiǎn)單的五子棋中,玩家通過(guò)鼠標(biāo)進(jìn)行兩個(gè)人的游戲。游戲的主戰(zhàn)場(chǎng)為15行15列的棋盤(pán),初始狀態(tài)棋盤(pán)上無(wú)落子,進(jìn)入游戲后,默認(rèn)

8、黑棋先下,也可由玩家選擇先下的棋子,然后輪流落子,一旦有一方的棋子在某一方向上構(gòu)成連續(xù)的五個(gè)棋子,則該方勝利,游戲結(jié)束并重新開(kāi)始,如果有輸贏(yíng),則輸出誰(shuí)勝,否則,輸出平局的信息框。游戲還有悔棋和重新開(kāi)始的的功能。另外,在游戲中還有背景音樂(lè),運(yùn)行時(shí)自動(dòng)播放,也可通過(guò)工具欄按鈕關(guān)閉。還可以保存和讀取游戲文件功能。 關(guān)鍵詞: 五子棋; 視窗操作系統(tǒng); 悔棋; 雙人游戲。 The Game of Gobang Abstract This course is designed in order to master the basic knowledge of the c + + langua

9、ge testing skills; and c + + Basic grasp of object oriented programming basic train of thought and method; Can use of my knowledge of the basic knowledge and skills, solvesimple object-oriented program design problem; Using c + + language training comprehend sive program design ability, is mainly us

10、e the system to provide the training of standard graphics functions of innovation design. This game software on Windows system for players with traditional renju game, the basic function of in this simple renju players through the mouse, two personal game. The main battlefield games for line 15 to 1

11、5 listed in the board. The game is over, if a loser, the output who wins, otherwise, the output of the draw information box. Keywords: Gobang; Windows System; Takeback; the game of Two people playing 引言 隨著經(jīng)濟(jì)時(shí)代的發(fā)展,人們的精神壓力越來(lái)越大,精神上得不到應(yīng)有的放松,精神生活得不到極大的滿(mǎn)足,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,計(jì)算機(jī)已逐漸成為人們辦公不可或缺的工

12、具,因此及時(shí)的開(kāi)發(fā)一些應(yīng)用于計(jì)算機(jī)上的小型游戲軟件,以供人們?cè)谵k公的閑暇時(shí)間得到充分的休閑娛樂(lè)。而棋類(lèi)因?yàn)槠浼婢邉?dòng)腦并且?jiàn)蕵?lè)的雙重功效,并且十分符合現(xiàn)代式生活,因此已經(jīng)得到越來(lái)越多人的歡迎,為此我們開(kāi)發(fā)一個(gè)簡(jiǎn)單的五子棋游戲,開(kāi)發(fā)此五子棋游戲軟件的目的,主要是供辦公人員與同事一起休閑娛樂(lè),增進(jìn)友誼、減輕疲勞,以提高工作效率,創(chuàng)造更多的社會(huì)財(cái)富,造福人類(lèi)。 查閱有關(guān)程序設(shè)計(jì)的案例資料,進(jìn)一步理解程序設(shè)計(jì)模塊化的思想,并利用此思想,根據(jù)對(duì)程序設(shè)計(jì)課程的學(xué)習(xí),編寫(xiě)一個(gè)簡(jiǎn)單的游戲軟件系統(tǒng)。通過(guò)本設(shè)計(jì)可以加深理解利用程序設(shè)計(jì)思想開(kāi)發(fā)一個(gè)系統(tǒng)的整個(gè)流程,提高分析問(wèn)題、解決問(wèn)題和實(shí)際動(dòng)手的能力。在下面的各章

13、中我們將以開(kāi)發(fā)一個(gè)五子棋游戲?yàn)槔?談?wù)勂溟_(kāi)發(fā)過(guò)程和所涉及到的問(wèn)題及解決方法。 第一章 需求分析 1.1系統(tǒng)概述 概述: 本程序是一款棋類(lèi)益智游戲程序,名為五子棋游戲,是采用C語(yǔ)言編寫(xiě)的可在WINDOWS 系統(tǒng)下運(yùn)行的娛樂(lè)游戲平臺(tái)。該程序面向廣大棋類(lèi)游戲的愛(ài)好者,能夠提供方便,實(shí)現(xiàn)基本智能控制的游戲環(huán)境。棋盤(pán)由若干網(wǎng)格構(gòu)成,初始狀態(tài)棋盤(pán)上無(wú)落子,玩家可以通過(guò)鼠標(biāo)在棋盤(pán)的相應(yīng)位置下子,一方為白色,另一方為黑色,先下的為黑子。游戲過(guò)程中,一旦有一方的棋子在某一方向上先構(gòu)成連續(xù)的五個(gè)棋子,不論橫、豎或斜,就會(huì)在屏幕上顯示是誰(shuí)贏(yíng)了比賽。 1.2系統(tǒng)運(yùn)行環(huán)境 運(yùn)行環(huán)境 (1)硬件環(huán)境。本系統(tǒng)

14、適用于那種Inter386以上計(jì)算機(jī),內(nèi)存容量為128M,應(yīng)配備鍵盤(pán)、鼠標(biāo)、顯示器等外部設(shè)備。 (2)軟件環(huán)境。本系統(tǒng)的設(shè)計(jì)采用Visual C++6.0編寫(xiě)。在Windows XP SP2環(huán)境下測(cè)試通過(guò)。 (3) 只要計(jì)算機(jī)具有Visual C++6.0, 本游戲軟件在Windows平臺(tái)下都可以運(yùn)行。 1.3功能需求描述 功能需求 五子棋是一種大眾喜愛(ài)的游戲,其規(guī)則簡(jiǎn)單,變化多端,非常富有趣味性何消遣性,是一種兩人對(duì)弈的純策略型棋類(lèi)游戲,是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理

15、,有助于修身養(yǎng)性。近來(lái)隨著計(jì)算機(jī)的快速發(fā)展,各種棋類(lèi)游戲被紛紛請(qǐng)進(jìn)了電腦,使得那些喜愛(ài)下棋,又常??嘤跊](méi)有工具的棋迷們能隨時(shí)過(guò)足棋癮?!?  在這里我也設(shè)計(jì)了一個(gè)較簡(jiǎn)單的五子棋游戲,這個(gè)游戲,不僅可以滿(mǎn)足游戲愛(ài)好者對(duì)游戲的要求,同時(shí)我們?cè)黾恿嗣烙^(guān)因素,讓游戲有一個(gè)比較美觀(guān)的界面,滿(mǎn)足我們游戲愛(ài)好者的視覺(jué)要求,同時(shí)有悔棋和重新清盤(pán)開(kāi)始的功能,更加方便了玩家的操作和游戲的有趣性。同時(shí),這個(gè)游戲還增加了背景音樂(lè)的功能,讓玩家在玩游戲的同時(shí)還可以聆聽(tīng)音樂(lè),使身心放松,如果不需要,也可以通過(guò)菜單欄或工具欄中的按鈕將其關(guān)閉。另外,也可以保存和讀取游戲文件。 第二章 總體設(shè)計(jì) 2.1開(kāi)發(fā)與設(shè)計(jì)的總體思

16、想 總體設(shè)計(jì)思路 棋盤(pán)設(shè)計(jì)為15*15格,初始狀態(tài)棋盤(pán)的為空,玩家黑子先走,輪流落子,當(dāng)一方連成五子或下滿(mǎn)棋盤(pán)時(shí),游戲結(jié)束并重新開(kāi)始(連成五子的一方獲勝,下滿(mǎn)棋盤(pán)為和棋)。當(dāng)游戲一方勝利后顯示勝利信息。從程序表面看,這是一個(gè)二維平面圖,所以數(shù)據(jù)用二維數(shù)組來(lái)表示,數(shù)組兩個(gè)下標(biāo)可以表示棋盤(pán)上的位置,用坐標(biāo)表示位置,數(shù)組元素的值代表棋格上的狀態(tài),共有三種情況,分別是0代表空格,1代表黑棋,2代表白棋。這樣程序的主要工作是接收棋手鼠標(biāo)按鍵操作,棋手用鼠標(biāo)控制光標(biāo)移動(dòng),按鍵表示落子。一旦接收到按鍵,說(shuō)明棋手落子,先判斷是否是有效位置,也就是說(shuō)已經(jīng)有棋子的位置不能重疊落子。落子成功后,馬上判斷該棋盤(pán)上

17、是否有相同顏色的棋子連成五子,如果連成五子,則游戲結(jié)束,輸出相應(yīng)的信息。按確認(rèn)后,自動(dòng)調(diào)用清盤(pán)函數(shù),此時(shí)清盤(pán)重新開(kāi)始,由另一家先走。在游戲中,如果玩家悔棋,則按下悔棋按鈕,調(diào)用悔棋函數(shù),將剛下的棋去掉,重下一子。按下重新開(kāi)始菜單,可清盤(pán)使游戲重新開(kāi)始。 屏幕的組成 一個(gè)游戲一定要有一個(gè)界面供游戲者對(duì)游戲控制。 這個(gè)界面中要包含讓游戲者更加清楚游戲狀態(tài)的信息,比如,白方要下子時(shí),必須要先看一看所有黑子的排列情況,決定是防守還是進(jìn)攻,這關(guān)系著玩家要如何放置自己的棋子,讓整體有個(gè)更加的布局,有利于游戲的進(jìn)行。此游戲的屏幕由15行15列的網(wǎng)格和菜單欄、工具欄組成,背景是一張棋盤(pán)圖,棋盤(pán)圖和棋子圖

18、如下圖: 形狀的組成 每一種形狀都是由五個(gè)棋子組成,比如●●●●●或○○○○○ 由五個(gè)棋子排列而成。 形狀的統(tǒng)一 棋子的排列,如:●●●●●等共有8種形狀(黑白的形狀歸為不同的形狀)。 如圖形狀: 黑棋的四種情況: ●●●●● ●○○○○ ●○○○○ ○○○○● ○○○○○ ●○○○○ ○●○○○ ○○○●○ ○○○○○ ●○○○○ ○○●○○ ○○●○○ ○○○○○ ●○○○○ ○○○●○ ○●○○○ ○○○○○ ●○○○○ ○○○○

19、● ●○○○○ 白棋的四種情況: ○○○○○ ○●●●● ○●●●● ●●●●○ ●●●●● ○●●●● ●○●●● ●●●○● ●●●●● ○●●●● ●●○●● ●●○●● ●●●●● ○●●●● ●●●○● ●○●●● ●●●●● ○●●●● ●●●●○ ○●●●● 第三章 概要設(shè)計(jì) 3.1系統(tǒng)流程圖 系統(tǒng)流程圖是對(duì)系統(tǒng)的大致流程進(jìn)行描述,本游戲的系統(tǒng)流程圖如下: 游戲開(kāi)始 選擇先下棋子 (默認(rèn)黑棋先下) 黑白子交

20、替落子 判斷是否連成五子或棋盤(pán)滿(mǎn) Y 游戲結(jié)束 悔棋 N 重新開(kāi)始 3.2 軟件功能模塊 本游戲的軟件功能模塊如下: 五子棋 界面及顯示模塊 播放音樂(lè)模塊 輪流下子模塊 塊 勝負(fù)判斷模塊 悔棋模塊 重新開(kāi)始模塊 保存讀取游戲文件模塊 3.3 系統(tǒng)功能模塊 系統(tǒng)功能模塊是對(duì)系統(tǒng)的大致功能進(jìn)行描述,本游戲的系統(tǒng)功能模塊如下: 五子棋游戲功能 兩人基本游戲功能 悔棋功能 重新開(kāi)始功能 播放背景音樂(lè)功能 輸贏(yíng)輸出 保存讀取功能 第四章 詳細(xì)設(shè)計(jì) 根據(jù)上面所介紹的

21、本系統(tǒng)的各個(gè)模塊及其需要實(shí)現(xiàn)的功能,下面詳細(xì)設(shè)計(jì)如下: 4.1.界面的設(shè)計(jì) 總體界面的設(shè)計(jì) 程序界面程序在啟動(dòng)運(yùn)行時(shí),系統(tǒng)會(huì)調(diào)用在資源視圖中導(dǎo)入的圍棋背景圖片,使程序界面更加友好,在使用上給用戶(hù)一種直觀(guān)方便的感覺(jué)。 界面棋子的設(shè)計(jì) 在資源視圖中導(dǎo)入圍棋的黑棋圖片、白旗圖片,使下子時(shí)調(diào)用此圖片,使游戲更加直觀(guān)有趣。同時(shí)在窗口視圖中添加顯示透明色圖片函數(shù),是棋子圖片更加逼真有趣。 顯示透明色圖片函數(shù)如下所示: //顯示透明色函數(shù) void PutBitmap(CDC *pDC,int x,int y,CBitmap *pBitmap,COLORREF color) { COL

22、ORREF oldColor; CBitmap bmAndBack,bmAndObject,bmAndMem,bmSave; CDC memDC,backDC,objectDC,saveDC,pieceDC; BITMAP bm; pBitmap->GetBitmap(&bm); int nWidth=bm.bmWidth,nHeight=bm.bmHeight; memDC.CreateCompatibleDC(pDC); backDC.CreateCompatibleDC(pDC)

23、; objectDC.CreateCompatibleDC(pDC); saveDC.CreateCompatibleDC(pDC); pieceDC.CreateCompatibleDC(pDC); bmAndBack.CreateBitmap(nWidth,nHeight,1,1, NULL); bmAndObject.CreateBitmap(nWidth,nHeight,1,1,NULL); bmAndMem.CreateCompatibleBitmap(pDC,nWidth,nHeight);

24、 bmSave.CreateCompatibleBitmap(pDC,nWidth,nHeight); backDC.SelectObject(&bmAndBack); objectDC.SelectObject(&bmAndObject); memDC.SelectObject(&bmAndMem); saveDC.SelectObject(&bmSave); pieceDC.SelectObject(pBitmap); saveDC.BitBlt(0,0,nWidth,nHeight,&pieceD

25、C,0,0,SRCCOPY); oldColor=pieceDC.SetBkColor(color); objectDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCCOPY); pieceDC.SetBkColor(oldColor); backDC.BitBlt(0,0,nWidth,nHeight,&objectDC,0,0,NOTSRCCOPY); memDC.BitBlt(0,0,nWidth,nHeight,pDC,x,y,SRCCOPY); memDC.BitBlt(0

26、,0,nWidth,nHeight,&objectDC,0,0,SRCAND); pieceDC.BitBlt(0,0,nWidth,nHeight,&backDC,0,0,SRCAND); memDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCPAINT); pDC->BitBlt(x,y,nWidth,nHeight,&memDC,0,0,SRCCOPY); pieceDC.BitBlt(0,0,nWidth,nHeight,&saveDC,0,0,SRCCOPY); } 4.2.顯示界面的準(zhǔn)備 在窗

27、體類(lèi)中添加存放黑白棋兩維數(shù)組和背景棋盤(pán)、黑棋、白棋位圖對(duì)象 int wb[15][15]; CBitmap Board,Black,White; //背景棋盤(pán)、黑棋、白棋位圖對(duì)象 4.2.2 在窗體構(gòu)造函數(shù)中初始化wb,裝入棋盤(pán)、黑棋、白棋位圖 for(int i=0;i<15;i++) for(int j=0;j<15;j++) wb[i][j]=0; //零表示空、1表示黑棋、2表示白棋 Board.LoadBitmap(IDB_BITMAP1); //裝入背景位圖 Black.LoadBitmap(IDB_BITMAP2); //裝入黑棋位圖

28、 White.LoadBitmap(IDB_BITMAP3); //裝入白棋位圖 4.3. 顯示棋盤(pán)和棋子代碼 在窗口OnDraw函數(shù)中添加顯示棋盤(pán)和棋子代碼 void CChessView::OnDraw(CDC* pDC) { CChessDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CDC mem; mem.CreateCompatibleDC(pDC); mem.SelectObject(&Board); pDC->BitBlt(0,0,535,536,&mem,0,0,SRCCOPY); //繪

29、制棋盤(pán) for(int i=0;i<15;i++) //繪制棋子 for(int j=0;j<15;j++) if(wb[i][j]==1) PutBitmap(pDC,5+i*35,7+j*35,&Black,RGB(255,255,255)); else if(wb[i][j]==2) PutBitmap(pDC,5+i*35,7+j*35,&White,RGB(255,255,255)); // TODO: add draw code for native data here } 4.4. 輪流下子代碼 void

30、CFivechessView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(RightORLet==0) //如果鼠標(biāo)狀態(tài)為0,黑棋先下 { int x=(point.x-5)/35,y=(point.y-7)/35; //計(jì)算坐標(biāo) if(x<15&&y<15) //點(diǎn)擊鼠標(biāo)的位置在棋盤(pán)內(nèi) if(wb[x][y]==0) //且該位置還沒(méi)有棋子 { for(int

31、 i=0;i<15;i++) for(int j=0;j<15;j++) if(jl[i][j]==count) a[i][j]=0; wb[x][y]=1; //設(shè)置成黑棋 a[x][y]=1; count++; jl[x][y]=count; CDC *pDC; pDC=this->GetDC(); PutBitmap(pDC,5+x*35,7+y*35,&Black,RGB(255,255,255));//顯示該棋子 PutBitmap(pDC,5+x*35,7

32、+y*35,&Red,RGB(255,255,255)); CView::OnLButtonDown(nFlags, point); if(heisheng(wb)==1) { this->MessageBox( "黑子勝","完成",MB_OK); OnStart(); } if(ping(wb)==1) { this->MessageBox("平局","完成",MB_OK); OnStart(); } RightORLet++; //鼠標(biāo)狀態(tài)變?yōu)? }

33、 } else //如果鼠標(biāo)狀態(tài)為1,則下白棋 { int x=(point.x-5)/35,y=(point.y-7)/35; //計(jì)算坐標(biāo) if(x<15&&y<15) //點(diǎn)擊鼠標(biāo)的位置在棋盤(pán)內(nèi) if(wb[x][y]==0) //且該位置還沒(méi)有棋子 { for(int i=0;i<15;i++) for(int j=0;j<15;j++) if(jl[i][j]==count) a[i][j]=0; wb[x][y]=2; //設(shè)置成白棋 a[x][y]=2;

34、 count++; jl[x][y]=count; CDC *pDC; pDC=this->GetDC(); PutBitmap(pDC,5+x*35,7+y*35,&White,RGB(255,255,255));//顯示該棋子 PutBitmap(pDC,5+x*35,7+y*35,&Green,RGB(255,255,255)); CView::OnLButtonDown(nFlags, point); if(baisheng(wb)==1) { this->MessageBox( "白子

35、勝","完成",MB_OK); OnStart(); } if(ping(wb)==1) { this->MessageBox("平局","完成",MB_OK); OnStart(); } RightORLet--; //鼠標(biāo)狀態(tài)變?yōu)? } } } 4.5. 判斷輸贏(yíng) 此功能用來(lái)判斷當(dāng)某一方下完子后在八個(gè)方向上是否有連成五個(gè)子的可能性,若連成五子則執(zhí)此棋子方獲勝;或者棋盤(pán)下滿(mǎn)為和局。 判斷是否白棋勝代碼 int CFivechessView::heisheng(int a[1

36、5][15]) { int i,j;//判斷橫著的5個(gè)是否都相等 for(i=0;i<15;i++) for(j=0;j<11;j++) {if(a[i][j]==1 && a[i][j+1]==1 && a[i][j+2]==1 && a[i][j+3]==1 && a[i][j+4]==1) return 1; } for(j=0;j<15;j++)//判斷豎著的5個(gè)是否都相等 for(i=0;i<11;i++) {if(a[i][j]==1&&a[i+1][j]==1&&a[i+2][j]==1&&a[i+3][

37、j]==1&&a[i+4][j]==1) return 1; } for(i=0;i<11;i++)//判斷左斜5個(gè) for(j=0;j<11;j++) {if(a[i][j]==1&&a[i+1][j+1]==1&&a[i+2][j+2]==1&&a[i+3][j+3]==1&&a[i+4][j+4]==1) return 1; } for(i=0;i<11;i++)//右斜5個(gè) for(j=14;j>=4;j--) {if(a[i][j]==1&&a[i+1][j-1]==1&&a[i+2][j-2]==1&&

38、a[i+3][j-3]==1&&a[i+4][j-4]==1) return 1; } return 0; } 判斷是否黑棋勝代碼 int CFivechessView::baisheng(int a[15][15]) { int i,j;//判斷橫著的5個(gè)是否都相等 for(i=0;i<15;i++) for(j=0;j<11;j++) if(a[i][j]==2&&a[i][j+1]==2&&a[i][j+2]==2&&a[i][j+3]==2&&a[i][j+4]==2) return 1; for(j

39、=0;j<15;j++)//判斷豎著的5個(gè)是否都相等 for(i=0;i<11;i++) if(a[i][j]==2&&a[i+1][j]==2&&a[i+2][j]==2&&a[i+3][j]==2&&a[i+4][j]==2) return 1; for(i=0;i<11;i++)//判斷左斜5個(gè) for(j=0;j<11;j++) if(a[i][j]==2&&a[i+1][j+1]==2&&a[i+2][j+2]==2&&a[i+3][j+3]==2&&a[i+4][j+4]==2) return 1; for(i=0;i

40、<11;i++)//右斜5個(gè) for(j=14;j>=4;j--) if(a[i][j]==2&&a[i+1][j-1]==2&&a[i+2][j-2]==2&&a[i+3][j-3]==2&&a[i+4][j-4]==2) return 1; return 0; } 判斷是否平局代碼 int CFivechessView::ping(int a[15][15]) { for(int i=0;i<15;i++) for(int j=0;j<15;j++) { if(a[i][j]==0)//當(dāng)棋盤(pán)全部子都不是0時(shí)才能re

41、turn 1,即棋盤(pán)已下滿(mǎn) return 0; } return 1; } 4.6. 悔棋 此功能是體現(xiàn)一種人性化,在菜單欄里添加悔棋按鈕,當(dāng)某一方玩家覺(jué)得此步走錯(cuò)了,按下悔棋按鈕,調(diào)用悔棋函數(shù),棋盤(pán)上就會(huì)自動(dòng)消除玩家剛下的一步棋,實(shí)行悔棋功能。 悔棋代碼如下: void CFivechessView::OnFileHuiqi() { //TODO: Add your command handler code here if(count!=0) { for(int i=0;i<15;i++) for(int j=0;j<15;

42、j++) if(jl[i][j]==count) { wb[i][j]=0; a[i][j]=0; } count--; switch(RightORLet) { case 1: RightORLet=0; break; case 0: RightORLet=1; break; } OnDraw(GetDC()); } else this->MessageBox("無(wú)法悔棋","完成",MB_OK); } 4.7. 重新開(kāi)始 在菜單欄里添加重新開(kāi)始

43、按鈕,當(dāng)按下重新開(kāi)始按鈕時(shí),調(diào)用重新開(kāi)始函數(shù),對(duì)棋盤(pán)進(jìn)行清盤(pán)處理,然后游戲重新開(kāi)始。 重新開(kāi)始代碼如下: void CFivechessView::OnFileRestart() //重新開(kāi)始(用按鈕) { for(int i=0;i<15;i++) for(int j=0;j<15;j++) { wb[i][j]=0; a[i][j]=0; } RightORLet=0; count=0; OnDraw(GetDC()); // TODO: Add your command handler code here } 4.8.

44、 背景音樂(lè) 首先將音樂(lè)轉(zhuǎn)為wav類(lèi)型,然后插入到資源,在fivechess.cpp中添加頭文件 #include #pragma comment( lib, "Winmm.lib" ) 在構(gòu)造函數(shù)中添加如下代碼: {PlaySound((LPCTSTR)IDR_WAVE1,AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);} 其中IDR_WAVE1為音樂(lè)文件的地址。 4.9. 保存讀取游戲文件 理論上,這個(gè)游戲并無(wú)須保存,因?yàn)樗_實(shí)太小了。 事實(shí)上,這個(gè)游戲有保存的功能,由于我們學(xué)習(xí)的需要。 這個(gè)游

45、戲的保存,與其說(shuō)是學(xué)習(xí)文件的保存,不如說(shuō)是我們學(xué)習(xí)字符串的操作。 另外,這個(gè)附加的內(nèi)容并不是為了當(dāng)前的學(xué)習(xí)而添加的,而是為了后面的學(xué)習(xí)和應(yīng)用而鋪墊的。 4.9.1保存文件: 保存文件函數(shù)是一個(gè)菜單選項(xiàng)。它的作用就是保存當(dāng)前游戲的狀態(tài)。首先,我們應(yīng)該為我們自己的文件定義一個(gè)后綴名:.wb;接著是打開(kāi)保存文件的公共對(duì)話(huà)框,如果確定,則表示保存,那么就先獲取文件名,然后按照一定的順序保存各個(gè)點(diǎn)的數(shù)組的值,最后保存當(dāng)前是哪種顏色下棋。 void CFivechessView::OnFileSave() { // TODO: Add your command handler code

46、 here //設(shè)置保存的文件,后綴名wb CFileDialog dlg(FALSE,"wb",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WB)|*.wb|All Files|*.*||",this); //如果公共類(lèi)對(duì)話(huà)框?yàn)榇_定 if(dlg.DoModal()==IDOK)//獲取文件名 dlg.GetFileName();//否則,退出 else return;//字符串變量 CString str; int i,j; CStdioFile file;//如果有問(wèn)題,退出

47、 if(file.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0) { AfxMessageBox("save error!"); return; } //循環(huán)把棋盤(pán)數(shù)組的值寫(xiě)進(jìn)文件 for(i=0;i<15;i++) for(j=0;j<15;j++) { if(wb[i][j]==1) file.WriteString("1\n"); if(wb[i][j]==0) file.WriteString("0

48、\n"); if(wb[i][j]==2) file.WriteString("2\n"); } if(RightORLet==1) //保存當(dāng)前下棋顏色 file.WriteString("2\n"); else file.WriteString("1\n"); file.Close(); //關(guān)閉文件 } 4.9.2讀取文件: 讀文件就是把我們以前保存的文件打開(kāi),讀取當(dāng)前打開(kāi)文件的內(nèi)容,并給數(shù)組賦值使和文件內(nèi)容相同,然后可以繼續(xù)進(jìn)行游戲。 void CFivechessView::OnFileOpen(

49、) { // TODO: Add your command handler code here CFileDialog dlg(TRUE,"wb",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WB)|*.wb|All Files|*.*||",this); if(dlg.DoModal()==IDOK) dlg.GetFileName(); else return; CString str; int i,j,m; CStdioFile file; if(file.Open(dlg.GetFileNa

50、me(),CFile::modeRead)==0) { AfxMessageBox("save error!"); return; } CArchive ar(&file,CArchive::load); for(i=0;i<15;i++) for(j=0;j<15;j++) { ar.ReadString(str); sscanf(str,"%d",&m); if(m==1) wb[i][j]=1; if(m==0) wb[i][j]=0; if(m==2) wb[i][j]=2;

51、 } ar.ReadString(str); sscanf(str,"%d",&m); if(m==1) RightORLet=0; else RightORLet=1; file.Close(); ar.Close(); Invalidate(false); } 第五章 測(cè)試分析 經(jīng)過(guò)無(wú)數(shù)次的測(cè)試,該系統(tǒng)能夠較好地滿(mǎn)足游戲愛(ài)好者的需要,能夠比較順利的進(jìn)行游戲,能夠顯示誰(shuí)贏(yíng)誰(shuí)輸,還是平局,能夠自動(dòng)播放背景音樂(lè)并且可以手動(dòng)關(guān)閉,能夠完整保存和打開(kāi)游戲文件。該游戲利用鼠標(biāo)進(jìn)行下棋,在菜單欄中選擇悔棋,和重新開(kāi)始的功能。當(dāng)勝負(fù)已分,游戲結(jié)束時(shí),會(huì)自動(dòng)

52、彈出一個(gè)顯示輸贏(yíng)的對(duì)話(huà)框。 結(jié)論和心得體會(huì) 編輯游戲這在一前我都以為是要遙不可及,但現(xiàn)在通過(guò)這次五子棋的設(shè)計(jì)我明白了,并不是如此,只要團(tuán)隊(duì)合作也可以搞定,我多學(xué)了許多的以前課上沒(méi)有的知識(shí),比如怎么用c++程序畫(huà)圖,寫(xiě)出文本,編輯游戲功能等。通過(guò)課程設(shè)計(jì),我們對(duì)《C++》這門(mén)課程有了更深一步的了解。它是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),在我們測(cè)控專(zhuān)業(yè)的學(xué)習(xí)中占據(jù)著十分重要的地位。同時(shí)也使我們知道,要學(xué)好這門(mén)課程,僅學(xué)習(xí)書(shū)本上的知識(shí)是不夠的,還要有較強(qiáng)的實(shí)踐能力。因?yàn)槲覀儗W(xué)習(xí)知識(shí)就是為了實(shí)踐。而只有多實(shí)踐,多編寫(xiě)程序,才能更好的理解與掌握書(shū)本上的東西。同時(shí)對(duì)于此游戲還可以進(jìn)一步研究開(kāi)發(fā),可以制

53、成有人機(jī)對(duì)戰(zhàn)和人人對(duì)戰(zhàn)兩種選擇的游戲,還可以制成網(wǎng)上游戲形式,可以和網(wǎng)友一起游戲等等。 致 謝 本說(shuō)明書(shū)和游戲軟件是在指導(dǎo)老師悉心指導(dǎo)下和同學(xué)的耐心幫助下完成的。這次課程設(shè)計(jì)能夠順利的完成,要感謝老師同學(xué)的幫助。 首先要感謝是指導(dǎo)老師,在技術(shù)上給了我很大的幫助和啟發(fā),當(dāng)我遇到困難的時(shí)候,不知如何去解決時(shí),就會(huì)尋求老師的指導(dǎo),指導(dǎo)老師會(huì)很有耐心的為我講解;感謝我的指導(dǎo)老師,他循循善誘的教導(dǎo)和不拘一格的思路給予了我很多的啟發(fā)和幫助。 感謝班上同學(xué)對(duì)我的幫助和指點(diǎn)。沒(méi)有他們的幫助,對(duì)于我一個(gè)對(duì)編程知識(shí)不是很精通的人來(lái)說(shuō),要想在短短的的時(shí)間里完成一個(gè)系統(tǒng)的軟件設(shè)計(jì)是一件很困難的事情。在一些小問(wèn)題上,只要能夠解答,同學(xué)都會(huì)盡力幫助我,讓我不至于在設(shè)計(jì)時(shí)一直止步不前。感謝同學(xué)的耐心幫助和指點(diǎn)。 在此表示最誠(chéng)摯的感謝! 參考文獻(xiàn): [1] 《Visual C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)》 第二版 溫秀梅,丁學(xué)鈞主編 清華大學(xué)出版社 2009 [2] 《C程序設(shè)計(jì)》 第三版 譚浩強(qiáng)著 清華大學(xué)出版社 2005

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!