c++課程設(shè)計--五子棋游戲_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 說 明 書</p><p><b>  五子棋游戲</b></p><p>  The Game of Gobang</p><p>  學(xué)院名稱: 機械工程學(xué)院 </p><p>  專業(yè)班級: 測控 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)運行環(huán)境5</p><p>  1.2.1運行環(huán)境5</p><p>  1.3功能需求

4、描述6</p><p>  1.3.1功能需求6</p><p>  第二章 總體設(shè)計6</p><p>  2.1開發(fā)與設(shè)計的總體思想6</p><p>  2.1.1總體設(shè)計思路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è)計9</p><p>  3.1系統(tǒng)流程圖9</p><p>  3.2 軟件功能模塊10</p><p>  3.3 系統(tǒng)功能模塊11</p><p>  第四章 詳細設(shè)計11</p><

6、p>  4.1.界面的設(shè)計11</p><p>  4.1.1總體界面的設(shè)計11</p><p>  4.1.2界面棋子的設(shè)計11</p><p>  4.2.顯示界面的準備13</p><p>  4.2.1在窗體類中添加存放黑白棋兩維數(shù)組和背景棋盤、黑棋、白棋位圖對象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é)論和心得體會25</p><p><b>  致 謝26</b></p><p><b>  參考文獻:27</b></p><p&

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

11、握解決實際應(yīng)用問題時所應(yīng)具有的查閱資料、綜合運用所學(xué)知識的能力,為課程設(shè)計及今后從事專業(yè)工作打下基礎(chǔ)。</p><p>  課程設(shè)計的內(nèi)容及要求</p><p>  利用所學(xué)的面向?qū)ο蠹癈++編程知識和技巧,通過布置具有一定難度的程序設(shè)計題目,并且要求學(xué)生獨立完成所布置題目,在分析設(shè)計過程中,要求學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會分析簡單的實際問題,并能利用所學(xué)的知識建立系統(tǒng)的邏輯結(jié)構(gòu),學(xué)會簡單

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

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

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

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

16、棋游戲</p><p><b>  上機時間及地點</b></p><p>  地點:計算中心NA1 NA2</p><p><b>  上機時間:</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>  答辯時間 </b></p><p><b>  20周 星期六</b></p><p><b>  五子棋游戲</b></p><p>  摘要 此課程設(shè)計的目的是為了達到熟練掌握C++語言的基本知識和C++調(diào)試技能;基本掌握面向?qū)ο蟪绦蛟O(shè)計的基本思路和方法

19、;能夠利用所學(xué)的基本知識和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計問題;培養(yǎng)綜合利用C++語言進行程序設(shè)計的能力,主要是培養(yǎng)利用系統(tǒng)提供的標準圖形函數(shù)進行創(chuàng)新設(shè)計。該游戲軟件在Windows系統(tǒng)為玩家提供傳統(tǒng)五子棋游戲的基本功能,在這簡單的五子棋中,玩家通過鼠標進行兩個人的游戲。游戲的主戰(zhàn)場為15行15列的棋盤,初始狀態(tài)棋盤上無落子,進入游戲后,默認黑棋先下,也可由玩家選擇先下的棋子,然后輪流落子,一旦有一方的棋子在某一方向上構(gòu)成連續(xù)的五個棋子

20、,則該方勝利,游戲結(jié)束并重新開始,如果有輸贏,則輸出誰勝,否則,輸出平局的信息框。游戲還有悔棋和重新開始的的功能。另外,在游戲中還有背景音樂,運行時自動播放,也可通過工具欄按鈕關(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)濟時代的發(fā)展,人們的精神壓力越來越大,精神上得不到應(yīng)有的放松,精神生活得不到極大的滿足,隨著計算機技術(shù)的飛速發(fā)展,計算機已逐漸成為人們辦公不可或缺的工具,因此及時的開發(fā)一些應(yīng)用于計算機上的小型游戲軟件,以供人們在辦公的閑暇時間得到充分的休閑娛樂。而棋類因為其兼具動腦并且娛樂的雙重功效,并且十分符合現(xiàn)代式生活,因此已經(jīng)得到越來越多人的歡迎,為此我們開發(fā)一個簡單的五子棋游戲,開發(fā)此五子棋游戲軟件的目的,主

25、要是供辦公人員與同事一起休閑娛樂,增進友誼、減輕疲勞,以提高工作效率,創(chuàng)造更多的社會財富,造福人類。</p><p>  查閱有關(guān)程序設(shè)計的案例資料,進一步理解程序設(shè)計模塊化的思想,并利用此思想,根據(jù)對程序設(shè)計課程的學(xué)習(xí),編寫一個簡單的游戲軟件系統(tǒng)。通過本設(shè)計可以加深理解利用程序設(shè)計思想開發(fā)一個系統(tǒng)的整個流程,提高分析問題、解決問題和實際動手的能力。在下面的各章中我們將以開發(fā)一個五子棋游戲為例,談?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)下運行的娛樂游戲平臺。該程序面向廣大棋類游戲的愛好者,能夠提供方便,實現(xiàn)基本智能控制的游戲環(huán)境。棋盤由若干網(wǎng)格構(gòu)成,初始狀態(tài)棋盤上無落子,玩家可以通過鼠標在棋盤的相應(yīng)位置下子,一方為白色,另一方為黑色,先下的為黑子。游戲過程中,一旦有一方的棋子在某一方向上先構(gòu)成連續(xù)的五個棋子,不論橫、豎或斜,就會在屏幕上顯示是誰贏了比賽。</p><p><b>  1.2系統(tǒng)運行環(huán)境</b>

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

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

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

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

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

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

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

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

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

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

42、<p>  程序界面程序在啟動運行時,系統(tǒng)會調(diào)用在資源視圖中導(dǎo)入的圍棋背景圖片,使程序界面更加友好,在使用上給用戶一種直觀方便的感覺。</p><p>  4.1.2界面棋子的設(shè)計</p><p>  在資源視圖中導(dǎo)入圍棋的黑棋圖片、白旗圖片,使下子時調(diào)用此圖片,使游戲更加直觀有趣。同時在窗口視圖中添加顯示透明色圖片函數(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.顯示界面的準備</p><p>  4.2.1在窗體類中添加存放黑白棋兩維數(shù)組和背景棋盤、黑棋、白棋位圖對象</p><p>  int wb[15][15];</p><p>  CBitmap

54、Board,Black,White;//背景棋盤、黑棋、白棋位圖對象</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) //如果鼠標狀態(tài)為0,黑棋先下</p><p><b>  {</b></p><p&

62、gt;  int x=(point.x-5)/35,y=(point.y-7)/35;//計算坐標</p><p>  if(x<15&&y<15)//點擊鼠標的位置在棋盤內(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++; //鼠標狀態(tài)變?yōu)?</p><p><b>  }</b></p><p><b>  }</b></p><p>  else //如果鼠標狀態(tài)為1,則下白棋</p><p><b>  {</

69、b></p><p>  int x=(point.x-5)/35,y=(point.y-7)/35;//計算坐標</p><p>  if(x<15&&y<15)//點擊鼠標的位置在棋盤內(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--; //鼠標狀態(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>  此功能用來判斷當某一方下完子后在八個方向上是否有連成五個子的可能性,若連成五子則執(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個是否都相等 </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個是否都相等 </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個 </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個 </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個是否都相等 </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個是否都相等 </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個 </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個 </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)//當棋盤全部子都不是0時才能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)一種人性化,在菜單欄里添加悔棋按鈕,當某一方玩家覺得此步走錯了,按下悔棋按鈕,調(diào)用悔棋函數(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、按鈕,當按下重新開始按鈕時,調(diào)用重新開始函數(shù),對棋盤進行清盤處理,然后游戲重新開始。</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>  理論上,這個游戲并無須保存,因為它確實太小了。</p><p>  事實上,這個游戲有保存的功能,由于我們學(xué)習(xí)的需要。</p><p>  這個游戲的保存,與其說是學(xué)習(xí)文件的保存,不如說是我們學(xué)習(xí)字符串的操作。</p><p>  另外

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

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>  //如果公共類對話框為確定</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ù)組的值寫進文件</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、當前下棋顏色</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>  讀文件就是把我們以前保存的文件打開,讀取當前打開文件的內(nèi)容,并給數(shù)組賦值使和文件內(nèi)容相同,然后可以繼續(xù)進行游戲。</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)能夠較好地滿足游戲愛好者的需要,能夠比較順利的進行游戲,能夠顯示誰贏誰輸,還是平局,能夠自動播放背景音樂并且可以手動關(guān)閉,能夠完整保存和打開游戲文件。該游戲利用鼠標進行下棋,在菜

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

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

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

126、指導(dǎo)老師,他循循善誘的教導(dǎo)和不拘一格的思路給予了我很多的啟發(fā)和幫助。</p><p>  感謝班上同學(xué)對我的幫助和指點。沒有他們的幫助,對于我一個對編程知識不是很精通的人來說,要想在短短的的時間里完成一個系統(tǒng)的軟件設(shè)計是一件很困難的事情。在一些小問題上,只要能夠解答,同學(xué)都會盡力幫助我,讓我不至于在設(shè)計時一直止步不前。感謝同學(xué)的耐心幫助和指點。</p><p>  在此表示最誠摯的感謝!&

溫馨提示

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

評論

0/150

提交評論