2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  課 程 設(shè) 計(jì) 說(shuō) 明 書</p><p><b>  五子棋游戲</b></p><p>  The Game of Gobang</p><p>  學(xué)院名稱: 機(jī)械工程學(xué)院 </p><p>  專業(yè)班級(jí): 測(cè)控 10xx </p>

2、<p>  學(xué)生姓名: x </p><p>  指導(dǎo)教師姓名: xx </p><p>  指導(dǎo)教師職稱: 副教授 </p><p><b>  2012年6月</b></p><p><b>  目錄</

3、b></p><p>  第一章 需求分析5</p><p><b>  1.1系統(tǒng)概述5</b></p><p>  1.1.1概述:5</p><p>  1.2系統(tǒng)運(yùn)行環(huán)境5</p><p>  1.2.1運(yùn)行環(huán)境5</p><p>  1.3功能需求

4、描述6</p><p>  1.3.1功能需求6</p><p>  第二章 總體設(shè)計(jì)6</p><p>  2.1開發(fā)與設(shè)計(jì)的總體思想6</p><p>  2.1.1總體設(shè)計(jì)思路6</p><p>  2.1.2屏幕的組成7</p><p>  2.1.3形狀的組成8<

5、/p><p>  2.1.4形狀的統(tǒng)一8</p><p>  第三章 概要設(shè)計(jì)9</p><p>  3.1系統(tǒng)流程圖9</p><p>  3.2 軟件功能模塊10</p><p>  3.3 系統(tǒng)功能模塊11</p><p>  第四章 詳細(xì)設(shè)計(jì)11</p><

6、p>  4.1.界面的設(shè)計(jì)11</p><p>  4.1.1總體界面的設(shè)計(jì)11</p><p>  4.1.2界面棋子的設(shè)計(jì)11</p><p>  4.2.顯示界面的準(zhǔn)備13</p><p>  4.2.1在窗體類中添加存放黑白棋兩維數(shù)組和背景棋盤、黑棋、白棋位圖對(duì)象13</p><p>  4.2

7、.2 在窗體構(gòu)造函數(shù)中初始化wb,裝入棋盤、黑棋、白棋位圖13</p><p>  4.3. 顯示棋盤和棋子代碼13</p><p>  4.4. 輪流下子代碼14</p><p>  4.5. 判斷輸贏17</p><p>  4.5.1判斷是否白棋勝代碼17</p><p>  4.5.2判斷是否黑棋勝代

8、碼18</p><p>  4.5.3判斷是否平局代碼19</p><p>  4.6. 悔棋19</p><p>  4.7. 重新開始20</p><p>  4.8. 背景音樂(lè)21</p><p>  4.9. 保存讀取游戲文件21</p><p>  4.9.1保存文件:2

9、2</p><p>  4.9.2讀取文件:23</p><p>  第五章 測(cè)試分析24</p><p>  結(jié)論和心得體會(huì)25</p><p><b>  致 謝26</b></p><p><b>  參考文獻(xiàn):27</b></p><p&

10、gt;<b>  課程設(shè)計(jì)任務(wù)書</b></p><p><b>  課程設(shè)計(jì)目的</b></p><p>  課程設(shè)計(jì)是工科各專業(yè)的主要實(shí)踐性教學(xué)環(huán)節(jié)之一,是圍繞一門主要基礎(chǔ)課或?qū)I(yè)課,運(yùn)用所學(xué)課程的知識(shí),結(jié)合實(shí)際應(yīng)用設(shè)計(jì)而進(jìn)行的一次綜合分析設(shè)計(jì)能力的訓(xùn)練。</p><p>  課程設(shè)計(jì)旨在培養(yǎng)學(xué)生在本課程范圍內(nèi),初步掌

11、握解決實(shí)際應(yīng)用問(wèn)題時(shí)所應(yīng)具有的查閱資料、綜合運(yùn)用所學(xué)知識(shí)的能力,為課程設(shè)計(jì)及今后從事專業(yè)工作打下基礎(chǔ)。</p><p>  課程設(shè)計(jì)的內(nèi)容及要求</p><p>  利用所學(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)單

12、的調(diào)試技巧和方法。根據(jù)系統(tǒng)的功能要求,要求學(xué)生逐步完成應(yīng)用程序的設(shè)計(jì),具體要求為:</p><p>  1、按規(guī)定的時(shí)間及要求上機(jī)。</p><p>  2、設(shè)計(jì)方案正確,正確劃分所選課題的系統(tǒng)功能模塊。</p><p>  3、系統(tǒng)設(shè)計(jì)要盡量實(shí)用,數(shù)據(jù)與功能分析詳細(xì)。</p><p>  4、要求C++編碼簡(jiǎn)潔、穩(wěn)定、高效。</p&g

13、t;<p>  5、獨(dú)立查閱資料,認(rèn)真書寫課程設(shè)計(jì)說(shuō)明書。</p><p><b>  進(jìn)度安排</b></p><p>  此次課程設(shè)計(jì)時(shí)間為兩周,分五個(gè)階段完成:</p><p>  1、分析設(shè)計(jì)階段:學(xué)生自主學(xué)習(xí)和鉆研問(wèn)題,明確設(shè)計(jì)要求,找出實(shí)現(xiàn)方法,按照需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)這幾個(gè)步驟進(jìn)行。這一階段前第1-3天完成。

14、</p><p>  2、編程調(diào)試階段:根據(jù)設(shè)計(jì)分析方案編寫C++代碼,然后調(diào)試該代碼,實(shí)現(xiàn)課題要求的功能。這一階段在第4-7天完成。</p><p>  3、總結(jié)報(bào)告階段:總結(jié)設(shè)計(jì)工作,寫出課程設(shè)計(jì)說(shuō)明書,要求學(xué)生寫出需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程測(cè)試的步驟和內(nèi)容。這一階段在第8-9天完成。</p><p>  4、考核階段。這一階段在第10天完成。</

15、p><p><b>  課程設(shè)計(jì)說(shuō)明書要求</b></p><p>  課程設(shè)計(jì)說(shuō)明書包括課程設(shè)計(jì)的目的、意義和任務(wù),軟件開發(fā)工具介紹、任務(wù)分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程、調(diào)試的步驟和內(nèi)容、課程設(shè)計(jì)總結(jié)、參考資料等,不符合以上要求者,則本次設(shè)計(jì)以不及格記。具體格式參看《江蘇大學(xué)課程設(shè)計(jì)說(shuō)明書寫作規(guī)范》</p><p>  課程設(shè)計(jì)題目:設(shè)計(jì)一個(gè)五子

16、棋游戲</p><p><b>  上機(jī)時(shí)間及地點(diǎn)</b></p><p>  地點(diǎn):計(jì)算中心NA1 NA2</p><p><b>  上機(jī)時(shí)間:</b></p><p>  19周 星期四 1 2 3 4 節(jié)</p><p>  星期五 1 2 3 4 5 6

17、 7 8 節(jié)</p><p>  20周 星期一 5 6 7 8 節(jié)</p><p>  星期二 1 2 3 4 5 6 7 8 節(jié)</p><p>  星期三 1 2 3 4 節(jié)</p><p>  星期四 1 2 3 4 5 6 7 8 節(jié)</p><p>  星期五 1 2 3 4節(jié)</

18、p><p><b>  答辯時(shí)間 </b></p><p><b>  20周 星期六</b></p><p><b>  五子棋游戲</b></p><p>  摘要 此課程設(shè)計(jì)的目的是為了達(dá)到熟練掌握C++語(yǔ)言的基本知識(shí)和C++調(diào)試技能;基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法

19、;能夠利用所學(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列的棋盤,初始狀態(tài)棋盤上無(wú)落子,進(jìn)入游戲后,默認(rèn)黑棋先下,也可由玩家選擇先下的棋子,然后輪流落子,一旦有一方的棋子在某一方向上構(gòu)成連續(xù)的五個(gè)棋子

20、,則該方勝利,游戲結(jié)束并重新開始,如果有輸贏,則輸出誰(shuí)勝,否則,輸出平局的信息框。游戲還有悔棋和重新開始的的功能。另外,在游戲中還有背景音樂(lè),運(yùn)行時(shí)自動(dòng)播放,也可通過(guò)工具欄按鈕關(guān)閉。還可以保存和讀取游戲文件功能。</p><p>  關(guān)鍵詞: 五子棋; 視窗操作系統(tǒng); 悔棋; 雙人游戲。</p><p>  The Game of Gobang</p><p>

21、;  Abstract This course is designed in order to master the basic knowledge of the c + + language testing skills; and c + + Basic grasp of object oriented programming basic train of thought and method; Can use of my know

22、ledge of the basic knowledge and skills, solvesimple object-oriented program design problem; Using c + + language training comprehend sive program design ability, is mainly use the system to provide the training of stand

23、ard graphics functions of innovation design. This game software</p><p>  Keywords: Gobang; Windows System; Takeback; the game of Two people playing</p><p><b>  引言</b></p&g

24、t;<p>  隨著經(jīng)濟(jì)時(shí)代的發(fā)展,人們的精神壓力越來(lái)越大,精神上得不到應(yīng)有的放松,精神生活得不到極大的滿足,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,計(jì)算機(jī)已逐漸成為人們辦公不可或缺的工具,因此及時(shí)的開發(fā)一些應(yīng)用于計(jì)算機(jī)上的小型游戲軟件,以供人們?cè)谵k公的閑暇時(shí)間得到充分的休閑娛樂(lè)。而棋類因?yàn)槠浼婢邉?dòng)腦并且娛樂(lè)的雙重功效,并且十分符合現(xiàn)代式生活,因此已經(jīng)得到越來(lái)越多人的歡迎,為此我們開發(fā)一個(gè)簡(jiǎn)單的五子棋游戲,開發(fā)此五子棋游戲軟件的目的,主

25、要是供辦公人員與同事一起休閑娛樂(lè),增進(jìn)友誼、減輕疲勞,以提高工作效率,創(chuàng)造更多的社會(huì)財(cái)富,造福人類。</p><p>  查閱有關(guān)程序設(shè)計(jì)的案例資料,進(jìn)一步理解程序設(shè)計(jì)模塊化的思想,并利用此思想,根據(jù)對(duì)程序設(shè)計(jì)課程的學(xué)習(xí),編寫一個(gè)簡(jiǎn)單的游戲軟件系統(tǒng)。通過(guò)本設(shè)計(jì)可以加深理解利用程序設(shè)計(jì)思想開發(fā)一個(gè)系統(tǒng)的整個(gè)流程,提高分析問(wèn)題、解決問(wèn)題和實(shí)際動(dòng)手的能力。在下面的各章中我們將以開發(fā)一個(gè)五子棋游戲?yàn)槔?談?wù)勂溟_發(fā)過(guò)程和所

26、涉及到的問(wèn)題及解決方法。</p><p><b>  第一章 需求分析</b></p><p><b>  1.1系統(tǒng)概述</b></p><p><b>  1.1.1概述:</b></p><p>  本程序是一款棋類益智游戲程序,名為五子棋游戲,是采用C語(yǔ)言編寫的可在WI

27、NDOWS 系統(tǒng)下運(yùn)行的娛樂(lè)游戲平臺(tái)。該程序面向廣大棋類游戲的愛好者,能夠提供方便,實(shí)現(xiàn)基本智能控制的游戲環(huán)境。棋盤由若干網(wǎng)格構(gòu)成,初始狀態(tài)棋盤上無(wú)落子,玩家可以通過(guò)鼠標(biāo)在棋盤的相應(yīng)位置下子,一方為白色,另一方為黑色,先下的為黑子。游戲過(guò)程中,一旦有一方的棋子在某一方向上先構(gòu)成連續(xù)的五個(gè)棋子,不論橫、豎或斜,就會(huì)在屏幕上顯示是誰(shuí)贏了比賽。</p><p><b>  1.2系統(tǒng)運(yùn)行環(huán)境</b>

28、;</p><p><b>  1.2.1運(yùn)行環(huán)境</b></p><p>  (1)硬件環(huán)境。本系統(tǒng)適用于那種Inter386以上計(jì)算機(jī),內(nèi)存容量為128M,應(yīng)配備鍵盤、鼠標(biāo)、顯示器等外部設(shè)備。</p><p>  (2)軟件環(huán)境。本系統(tǒng)的設(shè)計(jì)采用Visual C++6.0編寫。在Windows XP SP2環(huán)境下測(cè)試通過(guò)。</p>

29、;<p>  (3) 只要計(jì)算機(jī)具有Visual C++6.0, 本游戲軟件在Windows平臺(tái)下都可以運(yùn)行。</p><p><b>  1.3功能需求描述</b></p><p><b>  1.3.1功能需求</b></p><p>  五子棋是一種大眾喜愛的游戲,其規(guī)則簡(jiǎn)單,變化多端,非常富有趣味性何

30、消遣性,是一種兩人對(duì)弈的純策略型棋類游戲,是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。近來(lái)隨著計(jì)算機(jī)的快速發(fā)展,各種棋類游戲被紛紛請(qǐng)進(jìn)了電腦,使得那些喜愛下棋,又常常苦于沒(méi)有工具的棋迷們能隨時(shí)過(guò)足棋癮?!?lt;/p><p>  在這里我也設(shè)計(jì)了一個(gè)較簡(jiǎn)單的五子棋游戲,這個(gè)游戲,不僅可以滿足游戲愛好

31、者對(duì)游戲的要求,同時(shí)我們?cè)黾恿嗣烙^因素,讓游戲有一個(gè)比較美觀的界面,滿足我們游戲愛好者的視覺要求,同時(shí)有悔棋和重新清盤開始的功能,更加方便了玩家的操作和游戲的有趣性。同時(shí),這個(gè)游戲還增加了背景音樂(lè)的功能,讓玩家在玩游戲的同時(shí)還可以聆聽音樂(lè),使身心放松,如果不需要,也可以通過(guò)菜單欄或工具欄中的按鈕將其關(guān)閉。另外,也可以保存和讀取游戲文件。</p><p><b>  第二章 總體設(shè)計(jì)</b>

32、</p><p>  2.1開發(fā)與設(shè)計(jì)的總體思想</p><p>  2.1.1總體設(shè)計(jì)思路</p><p>  棋盤設(shè)計(jì)為15*15格,初始狀態(tài)棋盤的為空,玩家黑子先走,輪流落子,當(dāng)一方連成五子或下滿棋盤時(shí),游戲結(jié)束并重新開始(連成五子的一方獲勝,下滿棋盤為和棋)。當(dāng)游戲一方勝利后顯示勝利信息。從程序表面看,這是一個(gè)二維平面圖,所以數(shù)據(jù)用二維數(shù)組來(lái)表示,數(shù)組兩個(gè)下

33、標(biāo)可以表示棋盤上的位置,用坐標(biāo)表示位置,數(shù)組元素的值代表棋格上的狀態(tài),共有三種情況,分別是0代表空格,1代表黑棋,2代表白棋。這樣程序的主要工作是接收棋手鼠標(biāo)按鍵操作,棋手用鼠標(biāo)控制光標(biāo)移動(dòng),按鍵表示落子。一旦接收到按鍵,說(shuō)明棋手落子,先判斷是否是有效位置,也就是說(shuō)已經(jīng)有棋子的位置不能重疊落子。落子成功后,馬上判斷該棋盤上是否有相同顏色的棋子連成五子,如果連成五子,則游戲結(jié)束,輸出相應(yīng)的信息。按確認(rèn)后,自動(dòng)調(diào)用清盤函數(shù),此時(shí)清盤重新開始

34、,由另一家先走。在游戲中,如果玩家悔棋,則按下悔棋按鈕,調(diào)用悔棋函數(shù),將剛下的棋去掉,重下一子。按下重新開始菜單,可清盤使游戲重新開始。</p><p>  2.1.2屏幕的組成</p><p>  一個(gè)游戲一定要有一個(gè)界面供游戲者對(duì)游戲控制。</p><p>  這個(gè)界面中要包含讓游戲者更加清楚游戲狀態(tài)的信息,比如,白方要下子時(shí),必須要先看一看所有黑子的排列情況,

35、決定是防守還是進(jìn)攻,這關(guān)系著玩家要如何放置自己的棋子,讓整體有個(gè)更加的布局,有利于游戲的進(jìn)行。此游戲的屏幕由15行15列的網(wǎng)格和菜單欄、工具欄組成,背景是一張棋盤圖,棋盤圖和棋子圖如下圖:</p><p>  2.1.3形狀的組成</p><p>  每一種形狀都是由五個(gè)棋子組成,比如●●●●●或○○○○○ 由五個(gè)棋子排列而成。</p><p>  2.1.4形狀的

36、統(tǒng)一</p><p>  棋子的排列,如:●●●●●等共有8種形狀(黑白的形狀歸為不同的形狀)。</p><p><b>  如圖形狀:</b></p><p><b>  黑棋的四種情況:</b></p><p>  ●●●●● ●○○○○ ●○○○○ ○○○○● <

37、/p><p>  ○○○○○ ●○○○○ ○●○○○ ○○○●○ </p><p>  ○○○○○ ●○○○○ ○○●○○ ○○●○○ </p><p>  ○○○○○ ●○○○○ ○○○●○ ○●○○○ </p><p>  ○○○○○ ●○○○○ ○○○○●

38、 ●○○○○ </p><p><b>  白棋的四種情況:</b></p><p>  ○○○○○ ○●●●● ○●●●● ●●●●○ </p><p>  ●●●●● ○●●●● ●○●●● ●●●○● </p><p>  ●●●●● ○●●●●

39、 ●●○●● ●●○●● </p><p>  ●●●●● ○●●●● ●●●○● ●○●●● </p><p>  ●●●●● ○●●●● ●●●●○ ○●●●● </p><p><b>  第三章 概要設(shè)計(jì)</b></p><p><b>

40、;  3.1系統(tǒng)流程圖</b></p><p>  系統(tǒng)流程圖是對(duì)系統(tǒng)的大致流程進(jìn)行描述,本游戲的系統(tǒng)流程圖如下:</p><p>  3.2 軟件功能模塊</p><p>  本游戲的軟件功能模塊如下:</p><p>  3.3 系統(tǒng)功能模塊</p><p>  系統(tǒng)功能模塊是對(duì)系統(tǒng)的大致功能進(jìn)行描述,

41、本游戲的系統(tǒng)功能模塊如下:</p><p><b>  第四章 詳細(xì)設(shè)計(jì)</b></p><p>  根據(jù)上面所介紹的本系統(tǒng)的各個(gè)模塊及其需要實(shí)現(xiàn)的功能,下面詳細(xì)設(shè)計(jì)如下:</p><p><b>  4.1.界面的設(shè)計(jì)</b></p><p>  4.1.1總體界面的設(shè)計(jì)</p>

42、<p>  程序界面程序在啟動(dòng)運(yùn)行時(shí),系統(tǒng)會(huì)調(diào)用在資源視圖中導(dǎo)入的圍棋背景圖片,使程序界面更加友好,在使用上給用戶一種直觀方便的感覺。</p><p>  4.1.2界面棋子的設(shè)計(jì)</p><p>  在資源視圖中導(dǎo)入圍棋的黑棋圖片、白旗圖片,使下子時(shí)調(diào)用此圖片,使游戲更加直觀有趣。同時(shí)在窗口視圖中添加顯示透明色圖片函數(shù),是棋子圖片更加逼真有趣。</p><p

43、>  顯示透明色圖片函數(shù)如下所示:</p><p><b>  //顯示透明色函數(shù)</b></p><p>  void PutBitmap(CDC *pDC,int x,int y,CBitmap *pBitmap,COLORREF color)</p><p>  { COLORREF oldColor;</p>&

44、lt;p>  CBitmap bmAndBack,bmAndObject,bmAndMem,bmSave;</p><p>  CDC memDC,backDC,objectDC,saveDC,pieceDC;</p><p>  BITMAP bm; </p><p>  pBitmap->GetBitmap(&bm); <

45、;/p><p>  int nWidth=bm.bmWidth,nHeight=bm.bmHeight;</p><p>  memDC.CreateCompatibleDC(pDC); </p><p>  backDC.CreateCompatibleDC(pDC); </p><p>  objectDC.CreateCompatibleD

46、C(pDC); </p><p>  saveDC.CreateCompatibleDC(pDC); </p><p>  pieceDC.CreateCompatibleDC(pDC); </p><p>  bmAndBack.CreateBitmap(nWidth,nHeight,1,1, NULL); </p><p>  bmAnd

47、Object.CreateBitmap(nWidth,nHeight,1,1,NULL); </p><p>  bmAndMem.CreateCompatibleBitmap(pDC,nWidth,nHeight); </p><p>  bmSave.CreateCompatibleBitmap(pDC,nWidth,nHeight); </p><p>  b

48、ackDC.SelectObject(&bmAndBack); </p><p>  objectDC.SelectObject(&bmAndObject); </p><p>  memDC.SelectObject(&bmAndMem); </p><p>  saveDC.SelectObject(&bmSave); </

49、p><p>  pieceDC.SelectObject(pBitmap); </p><p>  saveDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCCOPY); </p><p>  oldColor=pieceDC.SetBkColor(color); </p><p>  object

50、DC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCCOPY); </p><p>  pieceDC.SetBkColor(oldColor);</p><p>  backDC.BitBlt(0,0,nWidth,nHeight,&objectDC,0,0,NOTSRCCOPY); </p><p>  me

51、mDC.BitBlt(0,0,nWidth,nHeight,pDC,x,y,SRCCOPY);</p><p>  memDC.BitBlt(0,0,nWidth,nHeight,&objectDC,0,0,SRCAND);</p><p>  pieceDC.BitBlt(0,0,nWidth,nHeight,&backDC,0,0,SRCAND); </p>

52、<p>  memDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCPAINT);</p><p>  pDC->BitBlt(x,y,nWidth,nHeight,&memDC,0,0,SRCCOPY);</p><p>  pieceDC.BitBlt(0,0,nWidth,nHeight,&saveD

53、C,0,0,SRCCOPY);</p><p><b>  }</b></p><p>  4.2.顯示界面的準(zhǔn)備</p><p>  4.2.1在窗體類中添加存放黑白棋兩維數(shù)組和背景棋盤、黑棋、白棋位圖對(duì)象</p><p>  int wb[15][15];</p><p>  CBitmap

54、Board,Black,White;//背景棋盤、黑棋、白棋位圖對(duì)象</p><p>  4.2.2 在窗體構(gòu)造函數(shù)中初始化wb,裝入棋盤、黑棋、白棋位圖</p><p>  for(int i=0;i<15;i++)</p><p>  for(int j=0;j<15;j++)</p><p>  wb[i][j]=0;

55、//零表示空、1表示黑棋、2表示白棋</p><p>  Board.LoadBitmap(IDB_BITMAP1);//裝入背景位圖</p><p>  Black.LoadBitmap(IDB_BITMAP2);//裝入黑棋位圖</p><p>  White.LoadBitmap(IDB_BITMAP3);//裝入白棋位圖</p>&

56、lt;p>  4.3. 顯示棋盤和棋子代碼</p><p>  在窗口OnDraw函數(shù)中添加顯示棋盤和棋子代碼</p><p>  void CChessView::OnDraw(CDC* pDC)</p><p><b>  {</b></p><p>  CChessDoc* pDoc = GetDocumen

57、t();</p><p>  ASSERT_VALID(pDoc);</p><p><b>  CDC mem;</b></p><p>  mem.CreateCompatibleDC(pDC);</p><p>  mem.SelectObject(&Board);</p><p>

58、;  pDC->BitBlt(0,0,535,536,&mem,0,0,SRCCOPY);//繪制棋盤</p><p>  for(int i=0;i<15;i++)//繪制棋子</p><p>  for(int j=0;j<15;j++)</p><p>  if(wb[i][j]==1) </p><p&g

59、t;  PutBitmap(pDC,5+i*35,7+j*35,&Black,RGB(255,255,255));</p><p>  else if(wb[i][j]==2) </p><p>  PutBitmap(pDC,5+i*35,7+j*35,&White,RGB(255,255,255));</p><p>  // TODO: add

60、 draw code for native data here</p><p><b>  }</b></p><p>  4.4. 輪流下子代碼</p><p>  void CFivechessView::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b&

61、gt;  {</b></p><p>  // TODO: Add your message handler code here and/or call default</p><p>  if(RightORLet==0) //如果鼠標(biāo)狀態(tài)為0,黑棋先下</p><p><b>  {</b></p><p&

62、gt;  int x=(point.x-5)/35,y=(point.y-7)/35;//計(jì)算坐標(biāo)</p><p>  if(x<15&&y<15)//點(diǎn)擊鼠標(biāo)的位置在棋盤內(nèi)</p><p>  if(wb[x][y]==0) //且該位置還沒(méi)有棋子</p><p><b>  {</b></p>

63、<p>  for(int i=0;i<15;i++)</p><p>  for(int j=0;j<15;j++)</p><p>  if(jl[i][j]==count)</p><p>  a[i][j]=0;</p><p>  wb[x][y]=1; //設(shè)置成黑棋</p><p>

64、;  a[x][y]=1;</p><p><b>  count++;</b></p><p>  jl[x][y]=count; </p><p>  CDC *pDC;</p><p>  pDC=this->GetDC(); </p><p>  PutBitmap(pDC,5+x

65、*35,7+y*35,&Black,RGB(255,255,255));//顯示該棋子</p><p>  PutBitmap(pDC,5+x*35,7+y*35,&Red,RGB(255,255,255));</p><p>  CView::OnLButtonDown(nFlags, point);</p><p>  if(heisheng(w

66、b)==1)</p><p><b>  {</b></p><p>  this->MessageBox( "黑子勝","完成",MB_OK); </p><p>  OnStart();</p><p><b>  }</b></p>

67、<p>  if(ping(wb)==1)</p><p><b>  {</b></p><p>  this->MessageBox("平局","完成",MB_OK);</p><p>  OnStart();</p><p><b>  }</

68、b></p><p>  RightORLet++; //鼠標(biāo)狀態(tài)變?yōu)?</p><p><b>  }</b></p><p><b>  }</b></p><p>  else //如果鼠標(biāo)狀態(tài)為1,則下白棋</p><p><b>  {</

69、b></p><p>  int x=(point.x-5)/35,y=(point.y-7)/35;//計(jì)算坐標(biāo)</p><p>  if(x<15&&y<15)//點(diǎn)擊鼠標(biāo)的位置在棋盤內(nèi)</p><p>  if(wb[x][y]==0) //且該位置還沒(méi)有棋子</p><p><b> 

70、 {</b></p><p>  for(int i=0;i<15;i++)</p><p>  for(int j=0;j<15;j++)</p><p>  if(jl[i][j]==count)</p><p>  a[i][j]=0;</p><p>  wb[x][y]=2; //設(shè)

71、置成白棋</p><p>  a[x][y]=2;</p><p><b>  count++;</b></p><p>  jl[x][y]=count; </p><p>  CDC *pDC;</p><p>  pDC=this->GetDC(); </p><

72、p>  PutBitmap(pDC,5+x*35,7+y*35,&White,RGB(255,255,255));//顯示該棋子</p><p>  PutBitmap(pDC,5+x*35,7+y*35,&Green,RGB(255,255,255));</p><p>  CView::OnLButtonDown(nFlags, point);</p>

73、<p>  if(baisheng(wb)==1)</p><p><b>  {</b></p><p>  this->MessageBox( "白子勝","完成",MB_OK);</p><p>  OnStart();</p><p><b>

74、  }</b></p><p>  if(ping(wb)==1)</p><p><b>  {</b></p><p>  this->MessageBox("平局","完成",MB_OK);</p><p>  OnStart();</p>&

75、lt;p><b>  }</b></p><p>  RightORLet--; //鼠標(biāo)狀態(tài)變?yōu)?</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

76、t;p><b>  4.5. 判斷輸贏</b></p><p>  此功能用來(lái)判斷當(dāng)某一方下完子后在八個(gè)方向上是否有連成五個(gè)子的可能性,若連成五子則執(zhí)此棋子方獲勝;或者棋盤下滿為和局。</p><p>  4.5.1判斷是否白棋勝代碼</p><p>  int CFivechessView::heisheng(int a[15][15]

77、)</p><p><b>  { </b></p><p>  int i,j;//判斷橫著的5個(gè)是否都相等 </p><p>  for(i=0;i<15;i++) </p><p>  for(j=0;j<11;j++) </p><p>  {if(a[i][j]==1 &am

78、p;& a[i][j+1]==1 && a[i][j+2]==1 && a[i][j+3]==1 && a[i][j+4]==1) </p><p>  return 1; </p><p><b>  }</b></p><p>  for(j=0;j<15;j++)//判斷豎著的

79、5個(gè)是否都相等 </p><p>  for(i=0;i<11;i++) </p><p>  {if(a[i][j]==1&&a[i+1][j]==1&&a[i+2][j]==1&&a[i+3][j]==1&&a[i+4][j]==1) </p><p>  return 1; </p&g

80、t;<p><b>  }</b></p><p>  for(i=0;i<11;i++)//判斷左斜5個(gè) </p><p>  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

81、&&a[i+4][j+4]==1) </p><p>  return 1; </p><p><b>  }</b></p><p>  for(i=0;i<11;i++)//右斜5個(gè) </p><p>  for(j=14;j>=4;j--) {if(a[i][j]==1&&

82、amp;a[i+1][j-1]==1&&a[i+2][j-2]==1&&a[i+3][j-3]==1&&a[i+4][j-4]==1) </p><p><b>  return 1;</b></p><p><b>  } </b></p><p>  return 0;

83、</p><p><b>  }</b></p><p>  4.5.2判斷是否黑棋勝代碼</p><p>  int CFivechessView::baisheng(int a[15][15])</p><p><b>  { </b></p><p>  int i,j

84、;//判斷橫著的5個(gè)是否都相等 </p><p>  for(i=0;i<15;i++) </p><p>  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) </p>

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

86、][j]==2&&a[i+4][j]==2) </p><p>  return 1; </p><p>  for(i=0;i<11;i++)//判斷左斜5個(gè) </p><p>  for(j=0;j<11;j++) if(a[i][j]==2&&a[i+1][j+1]==2&&a[i+2][j+2]

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

88、2&&a[i+2][j-2]==2&&a[i+3][j-3]==2&&a[i+4][j-4]==2) </p><p>  return 1; </p><p>  return 0; </p><p><b>  }</b></p><p>  4.5.3判斷是否平局代碼

89、</p><p>  int CFivechessView::ping(int a[15][15]) </p><p><b>  { </b></p><p>  for(int i=0;i<15;i++) </p><p>  for(int j=0;j<15;j++) </p><p

90、><b>  { </b></p><p>  if(a[i][j]==0)//當(dāng)棋盤全部子都不是0時(shí)才能return 1,即棋盤已下滿 </p><p>  return 0; </p><p><b>  } </b></p><p>  return 1; </p><

91、;p><b>  }</b></p><p><b>  4.6. 悔棋</b></p><p>  此功能是體現(xiàn)一種人性化,在菜單欄里添加悔棋按鈕,當(dāng)某一方玩家覺得此步走錯(cuò)了,按下悔棋按鈕,調(diào)用悔棋函數(shù),棋盤上就會(huì)自動(dòng)消除玩家剛下的一步棋,實(shí)行悔棋功能。</p><p><b>  悔棋代碼如下:<

92、/b></p><p>  void CFivechessView::OnFileHuiqi() </p><p><b>  {</b></p><p>  //TODO: Add your command handler code here</p><p>  if(count!=0)</p>&

93、lt;p><b>  {</b></p><p>  for(int i=0;i<15;i++)</p><p>  for(int j=0;j<15;j++)</p><p>  if(jl[i][j]==count)</p><p><b>  {</b></p>

94、<p>  wb[i][j]=0;</p><p>  a[i][j]=0;</p><p><b>  }</b></p><p><b>  count--;</b></p><p>  switch(RightORLet)</p><p><b>

95、  {</b></p><p><b>  case 1:</b></p><p>  RightORLet=0;</p><p><b>  break;</b></p><p><b>  case 0:</b></p><p>  Ri

96、ghtORLet=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  OnDraw(GetDC());</p><p><b>  }</b></p><p><b>  else

97、</b></p><p>  this->MessageBox("無(wú)法悔棋","完成",MB_OK);</p><p><b>  }</b></p><p><b>  4.7. 重新開始</b></p><p>  在菜單欄里添加重新開始

98、按鈕,當(dāng)按下重新開始按鈕時(shí),調(diào)用重新開始函數(shù),對(duì)棋盤進(jìn)行清盤處理,然后游戲重新開始。</p><p><b>  重新開始代碼如下:</b></p><p>  void CFivechessView::OnFileRestart() //重新開始(用按鈕)</p><p><b>  {</b></p>

99、<p>  for(int i=0;i<15;i++)</p><p>  for(int j=0;j<15;j++)</p><p><b>  {</b></p><p>  wb[i][j]=0;</p><p>  a[i][j]=0;</p><p><b

100、>  }</b></p><p>  RightORLet=0;</p><p><b>  count=0;</b></p><p>  OnDraw(GetDC());</p><p>  // TODO: Add your command handler code here</p>

101、<p><b>  }</b></p><p><b>  4.8. 背景音樂(lè)</b></p><p>  首先將音樂(lè)轉(zhuǎn)為wav類型,然后插入到資源,在fivechess.cpp中添加頭文件</p><p>  #include <mmsystem.h></p><p>  #

102、pragma comment( lib, "Winmm.lib" )</p><p>  在構(gòu)造函數(shù)中添加如下代碼:</p><p>  {PlaySound((LPCTSTR)IDR_WAVE1,AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);}</p><p>  其中IDR_WAVE1為音

103、樂(lè)文件的地址。</p><p>  4.9. 保存讀取游戲文件</p><p>  理論上,這個(gè)游戲并無(wú)須保存,因?yàn)樗_實(shí)太小了。</p><p>  事實(shí)上,這個(gè)游戲有保存的功能,由于我們學(xué)習(xí)的需要。</p><p>  這個(gè)游戲的保存,與其說(shuō)是學(xué)習(xí)文件的保存,不如說(shuō)是我們學(xué)習(xí)字符串的操作。</p><p>  另外

104、,這個(gè)附加的內(nèi)容并不是為了當(dāng)前的學(xué)習(xí)而添加的,而是為了后面的學(xué)習(xí)和應(yīng)用而鋪墊的。</p><p>  4.9.1保存文件:</p><p>  保存文件函數(shù)是一個(gè)菜單選項(xiàng)。它的作用就是保存當(dāng)前游戲的狀態(tài)。首先,我們應(yīng)該為我們自己的文件定義一個(gè)后綴名:.wb;接著是打開保存文件的公共對(duì)話框,如果確定,則表示保存,那么就先獲取文件名,然后按照一定的順序保存各個(gè)點(diǎn)的數(shù)組的值,最后保存當(dāng)前是哪種顏

105、色下棋。</p><p>  void CFivechessView::OnFileSave() </p><p><b>  {</b></p><p>  // TODO: Add your command handler code here</p><p>  //設(shè)置保存的文件,后綴名wb</p>

106、<p>  CFileDialog dlg(FALSE,"wb",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WB)|*.wb|All Files|*.*||",this); </p><p>  //如果公共類對(duì)話框?yàn)榇_定</p><p>  if(dlg.DoModal()

107、==IDOK)//獲取文件名</p><p>  dlg.GetFileName();//否則,退出</p><p><b>  else</b></p><p>  return;//字符串變量</p><p>  CString str;</p><p><b>  int i,j;

108、</b></p><p>  CStdioFile file;//如果有問(wèn)題,退出</p><p>  if(file.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0)</p><p><b>  {</b></p>

109、;<p>  AfxMessageBox("save error!");</p><p><b>  return;</b></p><p>  }//循環(huán)把棋盤數(shù)組的值寫進(jìn)文件</p><p>  for(i=0;i<15;i++)</p><p>  for(j=0;

110、j<15;j++)</p><p><b>  {</b></p><p>  if(wb[i][j]==1)</p><p>  file.WriteString("1\n");</p><p>  if(wb[i][j]==0)</p><p>  file.Writ

111、eString("0\n");</p><p>  if(wb[i][j]==2)</p><p>  file.WriteString("2\n");</p><p><b>  }</b></p><p>  if(RightORLet==1)//保存

112、當(dāng)前下棋顏色</p><p>  file.WriteString("2\n");</p><p><b>  else</b></p><p>  file.WriteString("1\n");</p><p>  file.Close();//關(guān)閉文件</p&

113、gt;<p><b>  }</b></p><p>  4.9.2讀取文件:</p><p>  讀文件就是把我們以前保存的文件打開,讀取當(dāng)前打開文件的內(nèi)容,并給數(shù)組賦值使和文件內(nèi)容相同,然后可以繼續(xù)進(jìn)行游戲。</p><p>  void CFivechessView::OnFileOpen() </p><

114、;p><b>  {</b></p><p>  // TODO: Add your command handler code here</p><p>  CFileDialog dlg(TRUE,"wb",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WB)|*.wb|All Fil

115、es|*.*||",this);</p><p>  if(dlg.DoModal()==IDOK)</p><p>  dlg.GetFileName();</p><p><b>  else</b></p><p><b>  return;</b></p><p

116、>  CString str;</p><p>  int i,j,m;</p><p>  CStdioFile file;</p><p>  if(file.Open(dlg.GetFileName(),CFile::modeRead)==0)</p><p><b>  {</b></p>&

117、lt;p>  AfxMessageBox("save error!");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  CArchive ar(&file,CArchive::load);</p><p&

118、gt;  for(i=0;i<15;i++)</p><p>  for(j=0;j<15;j++)</p><p><b>  {</b></p><p>  ar.ReadString(str);</p><p>  sscanf(str,"%d",&m);</p>

119、<p><b>  if(m==1)</b></p><p>  wb[i][j]=1;</p><p><b>  if(m==0)</b></p><p>  wb[i][j]=0;</p><p><b>  if(m==2)</b></p>

120、<p>  wb[i][j]=2;</p><p><b>  }</b></p><p>  ar.ReadString(str);</p><p>  sscanf(str,"%d",&m);</p><p><b>  if(m==1)</b></p

121、><p>  RightORLet=0;</p><p><b>  else</b></p><p>  RightORLet=1;</p><p>  file.Close();</p><p>  ar.Close();</p><p>  Invalidate(fals

122、e);</p><p><b>  }</b></p><p><b>  第五章 測(cè)試分析</b></p><p>  經(jīng)過(guò)無(wú)數(shù)次的測(cè)試,該系統(tǒng)能夠較好地滿足游戲愛好者的需要,能夠比較順利的進(jìn)行游戲,能夠顯示誰(shuí)贏誰(shuí)輸,還是平局,能夠自動(dòng)播放背景音樂(lè)并且可以手動(dòng)關(guān)閉,能夠完整保存和打開游戲文件。該游戲利用鼠標(biāo)進(jìn)行下棋,在菜

123、單欄中選擇悔棋,和重新開始的功能。當(dāng)勝負(fù)已分,游戲結(jié)束時(shí),會(huì)自動(dòng)彈出一個(gè)顯示輸贏的對(duì)話框。</p><p><b>  結(jié)論和心得體會(huì)</b></p><p>  編輯游戲這在一前我都以為是要遙不可及,但現(xiàn)在通過(guò)這次五子棋的設(shè)計(jì)我明白了,并不是如此,只要團(tuán)隊(duì)合作也可以搞定,我多學(xué)了許多的以前課上沒(méi)有的知識(shí),比如怎么用c++程序畫圖,寫出文本,編輯游戲功能等。通過(guò)課程設(shè)

124、計(jì),我們對(duì)《C++》這門課程有了更深一步的了解。它是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),在我們測(cè)控專業(yè)的學(xué)習(xí)中占據(jù)著十分重要的地位。同時(shí)也使我們知道,要學(xué)好這門課程,僅學(xué)習(xí)書本上的知識(shí)是不夠的,還要有較強(qiáng)的實(shí)踐能力。因?yàn)槲覀儗W(xué)習(xí)知識(shí)就是為了實(shí)踐。而只有多實(shí)踐,多編寫程序,才能更好的理解與掌握書本上的東西。同時(shí)對(duì)于此游戲還可以進(jìn)一步研究開發(fā),可以制成有人機(jī)對(duì)戰(zhàn)和人人對(duì)戰(zhàn)兩種選擇的游戲,還可以制成網(wǎng)上游戲形式,可以和網(wǎng)友一起游戲等等。<

125、/p><p><b>  致 謝</b></p><p>  本說(shuō)明書和游戲軟件是在指導(dǎo)老師悉心指導(dǎo)下和同學(xué)的耐心幫助下完成的。這次課程設(shè)計(jì)能夠順利的完成,要感謝老師同學(xué)的幫助。</p><p>  首先要感謝是指導(dǎo)老師,在技術(shù)上給了我很大的幫助和啟發(fā),當(dāng)我遇到困難的時(shí)候,不知如何去解決時(shí),就會(huì)尋求老師的指導(dǎo),指導(dǎo)老師會(huì)很有耐心的為我講解;感謝我的

126、指導(dǎo)老師,他循循善誘的教導(dǎo)和不拘一格的思路給予了我很多的啟發(fā)和幫助。</p><p>  感謝班上同學(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)。</p><p>  在此表示最誠(chéng)摯的感謝!&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論