課程設(shè)計說明書_第1頁
課程設(shè)計說明書_第2頁
課程設(shè)計說明書_第3頁
課程設(shè)計說明書_第4頁
課程設(shè)計說明書_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計說明書設(shè)計題目:黑白棋游戲?qū)W院、系:專業(yè)班級:學(xué)生姓名: 指導(dǎo)教師: 成 績:2008 年 6月 28日一 需求分析 (1)a)設(shè)計任務(wù) ( 1)b)設(shè)計要求 ( 1)二 詳細(xì)設(shè)計 (1)a)使用數(shù)據(jù)及結(jié)構(gòu)定義 (1)b)程序中的主要函數(shù) (2)c)函數(shù)調(diào)用及流程圖 (5)三 調(diào)試分析 ( 8)a) 調(diào)試過程 (8)b) 設(shè)計與實現(xiàn)的回顧和分析 (8)c)設(shè)計的體會與感受 (8)四 用戶手冊 ( 9)a) 游戲說明 ( 9)b) 操作說明 ( 9)五 測試結(jié)果 ( 9)11)六 附錄1) 需求分析設(shè)計任務(wù): 制作一個五子棋游戲程序,能實現(xiàn)人與電腦一起下五子棋且能 夠公平地判斷最后的輸贏

2、。設(shè)計要求:棋盤的大小為15 x 15,輸入的方式為鍵盤輸入,輸出為黑屏輸出,輸入的范圍為1到9,A到F;輸出的形式為# (表示黑子棋)或0 (表 示白子棋) 。2) 詳細(xì)設(shè)計使用數(shù)據(jù)及結(jié)構(gòu)定義:1. 二維數(shù)組棋盤格子狀態(tài)“ m_gridState ” 存儲大?。簊izex size,既為15 x 15. 存儲元素:字符串類型 基本操作:取數(shù)組元素的值2. 二維數(shù)組棋盤格子分?jǐn)?shù)“ m_gridMark 存儲大?。?sizex size, size 默認(rèn)該為 15. 存儲元素; int 類型,記錄每個格子的分?jǐn)?shù) 基本操作:取數(shù)組元素的值3 程序中所用到的一些類的定義 :class chessbo

3、ardpublic:chessboard();chessboard();void outputStates() const;功能:根據(jù)棋盤狀態(tài)輸出棋盤 , 黑棋|白棋|空分別用 '#'|'O'|' '表示更新棋盤各個格子的分?jǐn)?shù)void updateMarks(states chessmanColor); 功能 :void renew();功能 :重新初始成員數(shù)據(jù)的值void setGridState(const point& pt, states gridState); black white blank功能 :設(shè)置棋盤上的一個格子的狀態(tài)

4、 ,分states getGridState( const point& pt); void getMaxGridMark( point& pt ) const; states m_gridStatesizesize;功能:得到棋盤上的一各格子的狀態(tài),分black white blank功能 :得到棋盤分?jǐn)?shù)最大的格子棋盤各個格子的狀態(tài)private:int m_gridMarksizesize; 棋盤各個格子的分?jǐn)?shù) */void initiGridMark();功能 :初始棋盤上各個格子的分?jǐn)?shù)更新棋盤單個格子的分void updateGridMark(const point&a

5、mp; pt, states chessmanColor);功能 :數(shù)class gobangPlayerpublic:gobangPlayer();gobangPlayer();void setMove(char x, char y);void getMove(char& x, char& y);void autoMove(); 功能 : 自動下棋bool checkMove(); 功能 : 檢查棋步的合法性 .void setChessmanColor(states color);功能 :設(shè)置棋子顏色bool isWin(); 功能 : 檢查是否勝利static chess

6、board m_chessboard;static unsigned int count;point m_Move; 存儲棋步 private:states m_chessmanColor; 棋子顏色;程序中的主要函數(shù) :void displayInformation(void);/函數(shù)名 :displayInformation/功能:打印信息/參數(shù) :void/返回值 :voidbool isPlayAgain(void);/函數(shù)名 :isPlayAgain/功能:詢問是否繼續(xù)游戲/參數(shù) :void/返回值 :bool 如果繼續(xù)游戲 , 返回 true, 否則返回 flasechar get

7、Choice(void);/函數(shù)名 :getChoice/功能:決定先手還是后手/參數(shù) :void/返回值 :char先下 , 返回 '1' 后下 , 返回 '2'void input(char* A, char* B, int max); / 函數(shù)名 : input/ 功能 :輸入字符串,換行,存儲在B中程序暫停 , 按回車?yán)^續(xù)執(zhí)行/ 參數(shù) : char* A,/char* B,/int max,/ 返回值 : voidvoid pause(void);/ 函數(shù)名 : pause/ 功能 :用來儲存輸入的字符串 將輸入的字符串去掉空格 輸入字符的最大長度/參數(shù)

8、 :void/ 返回值 :voidvoid newline(int n=1);/函數(shù)名 :newline/ 功能 : 輸出換行為換行的數(shù)目 , 默認(rèn)為 1/參數(shù) :int n,/返回值 :void unsigned int randSeed=time(0);unsigned int random()/ 函數(shù)名;random/ 功能:產(chǎn)生一個隨機的短整形數(shù)/ 參數(shù):void/ 返回值:void函數(shù)調(diào)用及流程圖/ chessboard.cppVvWVWVWWWVWWWWVWWVWWVWWVvJvJVV< 1 丿( gobangPby 匹 cppk八丿1rgobangPlaver.hVi<

9、;MvWvWAAA/VwAtaHMvWSAAAAA4Xv/vWWvVvAk丿chessboardI: *電Xr3) 調(diào)試分析調(diào)試過程:有關(guān)電腦的程序只考慮了當(dāng)前的形勢,不是成熟的策略,另外,每走一步棋,都要更新整個棋盤 的格子分?jǐn)?shù),也是不合理的,由于只有和那步棋處在同一條直線上的格子才有可能改變分?jǐn)?shù).要是根據(jù)這個條件來改寫并且改變程序的計分方式和掃描次數(shù),程序的效率會成倍數(shù)增加。此外程序中還有一些對策略的微小調(diào)整,例如邊界問題;程序中沒有悔棋等操作使得整個函數(shù)不 完整。設(shè)計與實現(xiàn)的回顧和分析:函數(shù)先更新整個棋盤的格子的分?jǐn)?shù),找到分?jǐn)?shù)最高的,來給電腦自動下棋,這是因為棋盤格子的 底分,在相同的情

10、況之下,越在棋盤的中間,底分越高,越處于有利的地位。如此反復(fù) 程序的效 率大大地降低了。函數(shù) updateGridMark ()只考慮了當(dāng)前的形勢,不是一個很好的策略,此外 每走一步棋,都要不斷地更新整個棋盤在這個過程中耗費了一些時間,這是不應(yīng)該的。設(shè)計的體會與感受:通過本次的黑白棋程序設(shè)計 ,我體會到設(shè)計出一個好的程序的艱辛,尤其是考慮程序的效率問題!但這次實驗不僅提高了我的動手能力,而且增強了我對程序設(shè)計的自信。本次設(shè)計用到了很多面向 對象以及C+的知識,對于學(xué)生進(jìn)一步熟練掌握面向?qū)ο蠹癈+的知識很有幫助同時也能提高學(xué)生的程序調(diào)試能力。本次黑白棋程序的設(shè)計有些很多地方不是很完善,例如不能沒

11、有"悔棋","認(rèn)輸","求和"等操作。由于我現(xiàn)在的程序設(shè)計能力有限,還無法實現(xiàn)這些操作,但我會繼續(xù)努力,來彌補自 己現(xiàn)在的不足。總之,這次課程設(shè)計讓我收益良多。用戶手冊五子棋個人賽說明 一游戲說明:如何進(jìn)入游戲 提示:游戲是在 win32控制臺窗口下進(jìn)行的 點擊執(zhí)行程序進(jìn)入游戲界面,出現(xiàn)有如下的提示:Black Chessn)!an<First, s11 tt* > 1Dhit e ChessEikan<£econdr si/inbo 1J 0* > 2Please choose <1 ar =

12、開始游戲:選擇1則執(zhí)黑子用戶先下,選擇 2則執(zhí)白子電腦先下。1,游戲者輸入棋子坐標(biāo)的時候如輸入“98”(坐標(biāo)數(shù)據(jù)之間可帶空格),輸入字母(大小寫均可)坐標(biāo)時情況類似。2, 游戲者輸入棋子坐標(biāo)超過棋盤范圍(1F)的時候,程序會輸出提示,提醒用戶輸入出確要重 新輸入。3, 游戲者落子之后,棋盤會自動更新4, 游戲結(jié)束提示是否繼續(xù)時,輸入大寫的Y或N (y或n),均退出游戲界面,按回車退出游戲。例如選擇1由用戶執(zhí)黑子先下,在用戶執(zhí)黑落子按回車表示游戲繼續(xù):1, 黑先,白后,之后相互順序落子.2, 最先在棋盤橫向,豎向,斜向形成連續(xù)的相同色五個棋子的一方為勝.3, 如棋盤下滿仍分不出勝負(fù),則判為平局。

13、4, 比賽中不能選擇"悔棋","認(rèn)輸","求和"等要求。二操作說明1,首先,進(jìn)入比賽界面,在界面中若選擇1則表示你執(zhí)黑子先下, 選擇2則電腦執(zhí)白子先下。2, 在你從鍵盤選擇落子位置后,按回車輸入坐標(biāo)的過程中電腦已經(jīng)下好棋如此繼續(xù)直到 分出最后的勝負(fù).3, 分出勝負(fù)后,輸入丫(或y)表示進(jìn)行下一場比賽,輸入N (或n)表示不在繼續(xù)游戲 了.4, 記住,比賽過程中不可以"求和","認(rèn)輸","悔棋"。5, 不玩游戲后可以直接關(guān)閉比賽界面.6, 點擊右上角的"x"

14、,退出登錄,關(guān)閉程序.測試結(jié)果選擇下棋順序Black Cliessnkan<Fiivst smbo 1J tt1 ? 1 Uhite Chessman < Sec and, syrnbol10J > 2 Piease choose <1 or 2>:選擇1表示游戲者執(zhí)黑子先下,選擇 2表示電腦執(zhí)白子后下。這里選擇 1由用戶先下(黑子) 按回車表示繼續(xù)。譬如選擇1會有如下顯示:游戲進(jìn)行中,請你選擇合適坐標(biāo)輸入:錯誤時,例如輸入 123有下圖:r lease_inpuc - ¥qui* input ave "123 LJpong in put *F

15、Igaue_ nniit:_n er nF n :正確時,例如輸入 98有下圖:然后屏幕會顯示你輸入的坐標(biāo),按回車?yán)^續(xù):電腦落子后,游戲者要繼續(xù)如上繼續(xù)輸入坐標(biāo),直到比賽結(jié)束。當(dāng)游戲者勝利的時候?qū)@示:CongratulateVou are so cleuei?_ ¥ou have uonBo yoift uant to plaj/ a$ain? Please choose<V/NJ:.當(dāng)電腦勝利的時候?qū)@示:* I'm sorry to sai/ that you are Idst. * Don't disappointed*IKXWXXXKXWXIOtXXWHIOtXXJIXXJtXXJtXXJtXKJOtXXXKXXXDo i;oul uant to pla again? Please chooseC¥

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論