版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 說 明 書</p><p><b> 五子棋游戲</b></p><p> The Game of Gobang</p><p> 學(xué)院名稱: 機(jī)械工程學(xué)院 </p><p> 專業(yè)班級(jí): 測控 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. 背景音樂21</p><p> 4.9. 保存讀取游戲文件21</p><p> 4.9.1保存文件:2
9、2</p><p> 4.9.2讀取文件:23</p><p> 第五章 測試分析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)用問題時(shí)所應(yīng)具有的查閱資料、綜合運(yùn)用所學(xué)知識(shí)的能力,為課程設(shè)計(jì)及今后從事專業(yè)工作打下基礎(chǔ)。</p><p> 課程設(shè)計(jì)的內(nèi)容及要求</p><p> 利用所學(xué)的面向?qū)ο蠹癈++編程知識(shí)和技巧,通過布置具有一定難度的程序設(shè)計(jì)題目,并且要求學(xué)生獨(dú)立完成所布置題目,在分析設(shè)計(jì)過程中,要求學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會(huì)分析簡單的實(shí)際問題,并能利用所學(xué)的知識(shí)建立系統(tǒng)的邏輯結(jié)構(gòu),學(xué)會(huì)簡單
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++編碼簡潔、穩(wěn)定、高效。</p&g
13、t;<p> 5、獨(dú)立查閱資料,認(rèn)真書寫課程設(shè)計(jì)說明書。</p><p><b> 進(jìn)度安排</b></p><p> 此次課程設(shè)計(jì)時(shí)間為兩周,分五個(gè)階段完成:</p><p> 1、分析設(shè)計(jì)階段:學(xué)生自主學(xué)習(xí)和鉆研問題,明確設(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ì)說明書,要求學(xué)生寫出需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程測試的步驟和內(nèi)容。這一階段在第8-9天完成。</p><p> 4、考核階段。這一階段在第10天完成。</
15、p><p><b> 課程設(shè)計(jì)說明書要求</b></p><p> 課程設(shè)計(jì)說明書包括課程設(shè)計(jì)的目的、意義和任務(wù),軟件開發(fā)工具介紹、任務(wù)分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程、調(diào)試的步驟和內(nèi)容、課程設(shè)計(jì)總結(jié)、參考資料等,不符合以上要求者,則本次設(shè)計(jì)以不及格記。具體格式參看《江蘇大學(xué)課程設(shè)計(jì)說明書寫作規(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++語言的基本知識(shí)和C++調(diào)試技能;基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法
19、;能夠利用所學(xué)的基本知識(shí)和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計(jì)問題;培養(yǎng)綜合利用C++語言進(jìn)行程序設(shè)計(jì)的能力,主要是培養(yǎng)利用系統(tǒng)提供的標(biāo)準(zhǔn)圖形函數(shù)進(jìn)行創(chuàng)新設(shè)計(jì)。該游戲軟件在Windows系統(tǒng)為玩家提供傳統(tǒng)五子棋游戲的基本功能,在這簡單的五子棋中,玩家通過鼠標(biāo)進(jìn)行兩個(gè)人的游戲。游戲的主戰(zhàn)場為15行15列的棋盤,初始狀態(tài)棋盤上無落子,進(jìn)入游戲后,默認(rèn)黑棋先下,也可由玩家選擇先下的棋子,然后輪流落子,一旦有一方的棋子在某一方向上構(gòu)成連續(xù)的五個(gè)棋子
20、,則該方勝利,游戲結(jié)束并重新開始,如果有輸贏,則輸出誰勝,否則,輸出平局的信息框。游戲還有悔棋和重新開始的的功能。另外,在游戲中還有背景音樂,運(yùn)行時(shí)自動(dòng)播放,也可通過工具欄按鈕關(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ā)展,人們的精神壓力越來越大,精神上得不到應(yīng)有的放松,精神生活得不到極大的滿足,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,計(jì)算機(jī)已逐漸成為人們辦公不可或缺的工具,因此及時(shí)的開發(fā)一些應(yīng)用于計(jì)算機(jī)上的小型游戲軟件,以供人們?cè)谵k公的閑暇時(shí)間得到充分的休閑娛樂。而棋類因?yàn)槠浼婢邉?dòng)腦并且娛樂的雙重功效,并且十分符合現(xiàn)代式生活,因此已經(jīng)得到越來越多人的歡迎,為此我們開發(fā)一個(gè)簡單的五子棋游戲,開發(fā)此五子棋游戲軟件的目的,主
25、要是供辦公人員與同事一起休閑娛樂,增進(jìn)友誼、減輕疲勞,以提高工作效率,創(chuàng)造更多的社會(huì)財(cái)富,造福人類。</p><p> 查閱有關(guān)程序設(shè)計(jì)的案例資料,進(jìn)一步理解程序設(shè)計(jì)模塊化的思想,并利用此思想,根據(jù)對(duì)程序設(shè)計(jì)課程的學(xué)習(xí),編寫一個(gè)簡單的游戲軟件系統(tǒng)。通過本設(shè)計(jì)可以加深理解利用程序設(shè)計(jì)思想開發(fā)一個(gè)系統(tǒng)的整個(gè)流程,提高分析問題、解決問題和實(shí)際動(dòng)手的能力。在下面的各章中我們將以開發(fā)一個(gè)五子棋游戲?yàn)槔?談?wù)勂溟_發(fā)過程和所
26、涉及到的問題及解決方法。</p><p><b> 第一章 需求分析</b></p><p><b> 1.1系統(tǒng)概述</b></p><p><b> 1.1.1概述:</b></p><p> 本程序是一款棋類益智游戲程序,名為五子棋游戲,是采用C語言編寫的可在WI
27、NDOWS 系統(tǒng)下運(yùn)行的娛樂游戲平臺(tái)。該程序面向廣大棋類游戲的愛好者,能夠提供方便,實(shí)現(xiàn)基本智能控制的游戲環(huán)境。棋盤由若干網(wǎng)格構(gòu)成,初始狀態(tài)棋盤上無落子,玩家可以通過鼠標(biāo)在棋盤的相應(yīng)位置下子,一方為白色,另一方為黑色,先下的為黑子。游戲過程中,一旦有一方的棋子在某一方向上先構(gòu)成連續(xù)的五個(gè)棋子,不論橫、豎或斜,就會(huì)在屏幕上顯示是誰贏了比賽。</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)境下測試通過。</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ī)則簡單,變化多端,非常富有趣味性何
30、消遣性,是一種兩人對(duì)弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。近來隨著計(jì)算機(jī)的快速發(fā)展,各種棋類游戲被紛紛請(qǐng)進(jìn)了電腦,使得那些喜愛下棋,又常常苦于沒有工具的棋迷們能隨時(shí)過足棋癮?!?lt;/p><p> 在這里我也設(shè)計(jì)了一個(gè)較簡單的五子棋游戲,這個(gè)游戲,不僅可以滿足游戲愛好
31、者對(duì)游戲的要求,同時(shí)我們?cè)黾恿嗣烙^因素,讓游戲有一個(gè)比較美觀的界面,滿足我們游戲愛好者的視覺要求,同時(shí)有悔棋和重新清盤開始的功能,更加方便了玩家的操作和游戲的有趣性。同時(shí),這個(gè)游戲還增加了背景音樂的功能,讓玩家在玩游戲的同時(shí)還可以聆聽音樂,使身心放松,如果不需要,也可以通過菜單欄或工具欄中的按鈕將其關(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ù)組來表示,數(shù)組兩個(gè)下
33、標(biāo)可以表示棋盤上的位置,用坐標(biāo)表示位置,數(shù)組元素的值代表棋格上的狀態(tài),共有三種情況,分別是0代表空格,1代表黑棋,2代表白棋。這樣程序的主要工作是接收棋手鼠標(biāo)按鍵操作,棋手用鼠標(biāo)控制光標(biāo)移動(dòng),按鍵表示落子。一旦接收到按鍵,說明棋手落子,先判斷是否是有效位置,也就是說已經(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) //且該位置還沒有棋子</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) //且該位置還沒有棋子</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> 此功能用來判斷當(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("無法悔棋","完成",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. 背景音樂</b></p><p> 首先將音樂轉(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、樂文件的地址。</p><p> 4.9. 保存讀取游戲文件</p><p> 理論上,這個(gè)游戲并無須保存,因?yàn)樗_實(shí)太小了。</p><p> 事實(shí)上,這個(gè)游戲有保存的功能,由于我們學(xué)習(xí)的需要。</p><p> 這個(gè)游戲的保存,與其說是學(xué)習(xí)文件的保存,不如說是我們學(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;//如果有問題,退出</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> 第五章 測試分析</b></p><p> 經(jīng)過無數(shù)次的測試,該系統(tǒng)能夠較好地滿足游戲愛好者的需要,能夠比較順利的進(jìn)行游戲,能夠顯示誰贏誰輸,還是平局,能夠自動(dòng)播放背景音樂并且可以手動(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)在通過這次五子棋的設(shè)計(jì)我明白了,并不是如此,只要團(tuán)隊(duì)合作也可以搞定,我多學(xué)了許多的以前課上沒有的知識(shí),比如怎么用c++程序畫圖,寫出文本,編輯游戲功能等。通過課程設(shè)
124、計(jì),我們對(duì)《C++》這門課程有了更深一步的了解。它是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),在我們測控專業(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> 本說明書和游戲軟件是在指導(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)。沒有他們的幫助,對(duì)于我一個(gè)對(duì)編程知識(shí)不是很精通的人來說,要想在短短的的時(shí)間里完成一個(gè)系統(tǒng)的軟件設(shè)計(jì)是一件很困難的事情。在一些小問題上,只要能夠解答,同學(xué)都會(huì)盡力幫助我,讓我不至于在設(shè)計(jì)時(shí)一直止步不前。感謝同學(xué)的耐心幫助和指點(diǎn)。</p><p> 在此表示最誠摯的感謝!&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋c++課程設(shè)計(jì)
- 五子棋c++課程設(shè)計(jì)
- c++課程設(shè)計(jì)——五子棋
- c++五子棋課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)--五子棋游戲設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋游戲
- 五子棋小游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)-五子棋游戲
- 五子棋游戲課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告五子棋游戲課程設(shè)計(jì)
- c語言五子棋課程設(shè)計(jì)
- 五子棋游戲課程設(shè)計(jì)word格式
- 課程設(shè)計(jì)---五子棋游戲的實(shí)現(xiàn)
- 五子棋課程設(shè)計(jì)
- 《c++語言程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告--五子棋
- flash課程設(shè)計(jì)---五子棋游戲制作
- 課程設(shè)計(jì)---五子棋游戲的實(shí)現(xiàn).docx
- java_五子棋小游戲課程設(shè)計(jì)
- java五子棋課程設(shè)計(jì)
- 五子棋-課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論