五子棋游戲項目開發(fā)報告_第1頁
五子棋游戲項目開發(fā)報告_第2頁
五子棋游戲項目開發(fā)報告_第3頁
五子棋游戲項目開發(fā)報告_第4頁
五子棋游戲項目開發(fā)報告_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、五子棋游戲項 目 名 稱 :五子棋游戲 項 目負(fù)責(zé)人 :張凱雅 報 告 主 編 :張凱雅 專 業(yè) :軟件工程 任 課 教 師 :趙宏老師 編 制 時 間 :2015 年 12 月 北京交通大學(xué)軟件學(xué)院2015 年 12 月制目錄1.引言.21.1編寫目的.21.2開發(fā)背景.22.需求分析.22.1系統(tǒng)總體目標(biāo).22.2功能需求.22.2.1功能劃分.22.2.2運(yùn)行環(huán)境需求.32.2.3性能需求.33.總體設(shè)計.33.1總體方案.33.1.1系統(tǒng)功能架構(gòu).33.1.2系統(tǒng)主要功能模塊.43.1.3系統(tǒng)流程圖.43.2程序主體結(jié)構(gòu).53.3文件及函數(shù)組成.53.4函數(shù)及接口設(shè)計.74.實現(xiàn)過程與

2、解決的主要問題.125.測試過程及結(jié)果.136.特色及有待改進(jìn)的方面.177.自我評價與體會.178.系統(tǒng)使用手冊.17附件.191.引言1.1編寫目的本文檔旨在對五子棋游戲開發(fā)過程形成記錄,并對預(yù)期工作目標(biāo)做合理安排。本文檔采用迭代的方式進(jìn)行編寫,階段性添加完善。1.2開發(fā)背景五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一,是一種兩人對弈的策略型游戲。現(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five in a Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。 辭海中有言:“五子棋中棋類游戲

3、,棋具與圍棋相同,兩人對局,輪流下子,先將五子連成一行者為勝?!蔽遄悠宀粌H能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。2. 需求分析2.1系統(tǒng)總體目標(biāo)1運(yùn)行游戲應(yīng)用程序后,在15*15的棋盤上,對弈兩方輪流下子,下在橫豎連線的交叉點(diǎn)上;2當(dāng)某方下子后,在一條線上(橫、豎、對角線)有連續(xù)5個己方棋子后,便

4、取得勝利。系統(tǒng)自動判斷勝負(fù),提示本局游戲結(jié)束;3下棋過程中雙方均可以選擇悔棋,在征得對方同意之后可以進(jìn)行悔棋;與此同時,雙方都可以選擇和棋,對方同意之后,視為和棋,當(dāng)局游戲結(jié)束;4.下棋過程中雙方均可以選擇認(rèn)輸,放棄本局游戲;5.開發(fā)保存棋局的功能,支持不同時段繼續(xù)游戲;6除此之外,后續(xù)設(shè)計中將添加一些附加功能,如人機(jī)對弈等。2.2功能需求2.2.1功能劃分1. 繪制棋盤、棋子2. 顯示落子位置3. 認(rèn)輸、悔棋、和棋4. 判斷勝負(fù)5. 保存棋局6. 排行榜7. 附加功能:人機(jī)對弈2.2.2運(yùn)行環(huán)境需求運(yùn)行本軟件的系統(tǒng)平臺:Windows 8;開發(fā)工具:Microsoft Visual stud

5、io 20132.2.3性能需求a.數(shù)據(jù)精確度1傳遞落子位置準(zhǔn)確;2下棋輸贏判定準(zhǔn)確。b.時間特性1輸贏判斷算法高效,占用內(nèi)存少,判斷用時少。c.適應(yīng)性在VS環(huán)境下均可運(yùn)行。3.總體設(shè)計3.1總體方案3.1.1系統(tǒng)功能架構(gòu)五子棋游戲開始游戲更新棋盤開局下子勝負(fù)判斷和棋悔棋加載棋局保存棋局放棄本局附加功能人機(jī)對弈排行榜顯示排名排名保存排名歡迎界面關(guān)于我們結(jié)束界面退出系統(tǒng)系統(tǒng)音樂播放3.1.2系統(tǒng)主要功能模塊根據(jù)上面的系統(tǒng)的設(shè)計要求,可以將此五子棋游戲分為以下幾個模塊:1.初始化模塊:建立棋盤數(shù)組并清零以備使用;在屏幕上畫出棋盤。2.主循環(huán)控制模塊:負(fù)責(zé)控制下棋順序,當(dāng)輪到某方下子時,負(fù)責(zé)將程序流

6、程轉(zhuǎn)到相應(yīng)的模塊中,主要擔(dān)當(dāng)一個調(diào)度者的角色。3.玩家落子模塊:即用戶輸入落子點(diǎn)的坐標(biāo)指定后,程序會將棋盤數(shù)組中坐標(biāo)處記錄棋子的顏色,黑色或白色,以表明是執(zhí)黑子方下的棋子還是執(zhí)白子方下的棋子。4.勝負(fù)判斷模塊:根據(jù)預(yù)先設(shè)定的規(guī)則,判斷游戲勝負(fù)。5.保存及加載棋局模塊:當(dāng)用戶不想再繼續(xù)游戲時,保存該棋局,并支持下次加載,以便繼續(xù)未完的棋局。6.排行榜模塊:根據(jù)玩家勝負(fù)進(jìn)行排名,并且保存排名。7.音樂播放模塊:播放音樂。8.附加功能模塊:實現(xiàn)簡單人機(jī)對弈。3.1.3系統(tǒng)流程圖3.2程序主體結(jié)構(gòu)界面層:menu.cpp邏輯處理層:game_service.cpprank_service.cppMan

7、_Machine.cpp數(shù)據(jù)存儲層:game_file.cpprank_file.cpp3.3文件及函數(shù)組成源文件函數(shù)名及其他成分功能main.cppmain程序入口函數(shù)menu.cppinitApplication輸出歡迎界面exitApplication輸出結(jié)束界面print_menu打印主菜單,獲得用戶輸入printChess繪制棋盤playGame開始游戲inputPoint獲得用戶下子點(diǎn)printWinner繪制獲勝信息printDraw繪制和棋信息GameRule輸出游戲規(guī)則printAboutUs輸出關(guān)于我們printAddRank保存排名printRanklist繪制排行榜pr

8、intLastGame加載棋局if_BackMove是否悔棋playMusic播放音樂game_service.cppinitStatus初始化游戲數(shù)據(jù)getStatus返回用戶當(dāng)前下子坐標(biāo)的狀態(tài)值setStatus設(shè)置坐標(biāo)點(diǎn)狀態(tài)judge判斷是否獲勝judgeHorizontal判斷橫向連續(xù)相同的棋子數(shù)judgeVertical判斷縱向連續(xù)相同的棋子數(shù)judgeHypophoria判斷斜向右下連續(xù)相同的棋子數(shù)judgeHyperphoria判斷斜向右上連續(xù)相同的棋子數(shù)judgeDraw判斷是否為和棋game_file.cppwriteGame把棋局信息保存到文件中readGame從文件中讀取

9、棋局信息rank_service.cppjudgeOrder判斷排名insertRank添加排名saveRanks保存排名數(shù)據(jù)getRankSize獲得排名榜玩家個數(shù)getRanks獲得排名玩家數(shù)據(jù)initRanks初始化排名數(shù)據(jù)rank_file.cppwriteRanklist把排名信息保存到文件中readRanklist從文件中讀取排名信息Man_Machine.cppMan_Machine人機(jī)對戰(zhàn)inputPoint_MM主循環(huán)inputPoint_Man獲得玩家落子點(diǎn)inputPoint_Machine獲得電腦落子點(diǎn)comPoint選擇電腦落子點(diǎn)頭文件包含內(nèi)容model.h數(shù)據(jù)類型說

10、明menu.h函數(shù)聲明global.h定義全局變量game_service.h函數(shù)聲明game_file.h函數(shù)聲明rank_service.h函數(shù)聲明rank_file.h函數(shù)聲明Man_Machine.h函數(shù)聲明3.4函數(shù)及接口設(shè)計1. 主函數(shù)函數(shù)原型:int main(void)函數(shù)功能:程序入口函數(shù)函數(shù)參數(shù):無返回值:int:說明程序退出狀態(tài)工作方式:根據(jù)命令,調(diào)用相應(yīng)函數(shù)。要求:管理菜單命令并完成初始化2.菜單選擇函數(shù) 函數(shù)原型:int menu_select(void) 函數(shù)功能:接收用戶選擇的命令代碼 函數(shù)參數(shù):無 返回值:無工作方式:返回命令代碼的整數(shù)值 要求:只允許選擇規(guī)定值

11、,如果輸入不合要求,則提醒用戶重新輸入。3. 界面輸出函數(shù)函數(shù)原型:void initApplication()函數(shù)功能:輸出歡迎界面函數(shù)參數(shù):無返回值:無 要求:游戲開始前,輸出歡迎信息函數(shù)原型:void exitApplication()函數(shù)功能:輸出結(jié)束界面函數(shù)參數(shù):無返回值:無 要求:退出系統(tǒng)前,輸出結(jié)束信息函數(shù)原型:void GameRule()函數(shù)功能:輸出游戲規(guī)則函數(shù)參數(shù):無返回值:無 工作方式:用戶于菜單模塊選擇游戲規(guī)則后,調(diào)用該函數(shù)函數(shù)原型:void printAboutUs()函數(shù)功能:輸出關(guān)于我們函數(shù)參數(shù):無返回值:無 工作方式:用戶于菜單模塊選擇關(guān)于我們后,調(diào)用該函數(shù)函

12、數(shù)原型:void initApplication()函數(shù)功能:輸出歡迎界面函數(shù)參數(shù):無返回值:無 要求:游戲開始前,輸出歡迎信息函數(shù)原型:void initApplication()函數(shù)功能:輸出歡迎界面函數(shù)參數(shù):無返回值:無 要求:游戲開始前,輸出歡迎信息函數(shù)原型:void printChess()函數(shù)功能:繪制棋盤函數(shù)參數(shù):無返回值:無 函數(shù)原型:void printWinner(const int nColor)函數(shù)功能:繪制獲勝信息函數(shù)參數(shù):const int nColor:獲勝方的棋子的值返回值:無 要求:有一方獲勝時,調(diào)用該函數(shù),輸出獲勝信息函數(shù)原型:void printDraw(

13、)函數(shù)功能:繪制和棋信息函數(shù)參數(shù):無返回值:無 要求:當(dāng)棋盤已滿,且雙方均未獲勝,調(diào)用該函數(shù),輸出和棋信息函數(shù)原型:void printRanklist()函數(shù)功能:繪制排行榜函數(shù)參數(shù):無返回值:無 4. 游戲開始函數(shù)函數(shù)原型:void playGame()函數(shù)功能:開始游戲函數(shù)參數(shù):無返回值:無工作方式:調(diào)用相應(yīng)函數(shù)initStatus(初始化游戲數(shù)據(jù))、printChess(繪制棋盤)inputPoint(獲得用戶下子位置)、setStatus(設(shè)置坐標(biāo)點(diǎn)狀態(tài))、printChess(更新棋盤)、judge(判斷勝負(fù))、printWinner(繪制獲勝信息)、printDraw(繪制和棋信

14、息)等要求:采用do-while循環(huán),實現(xiàn)交替循環(huán)下子功能;當(dāng)有一方獲勝時,輸出獲勝信息;當(dāng)棋盤已滿,且雙方均未獲勝,輸出和棋信息5. 獲得用戶下子點(diǎn)函數(shù)原型:void inputPoint(Point* pspPoint)函數(shù)功能:獲得用戶下子點(diǎn)函數(shù)參數(shù):Point* pspPoint返回值:無工作方式:將用戶輸入的字符串,轉(zhuǎn)換為相應(yīng)坐標(biāo),儲存于數(shù)組中要求:當(dāng)用戶輸入的坐標(biāo)不存在或已有棋子時,提醒用戶重新輸入6.初始化游戲數(shù)據(jù)函數(shù)原型:void initStatus() 函數(shù)功能:游戲開始前,初始化游戲數(shù)據(jù)函數(shù)參數(shù):無返回值:無要求:僅在開始游戲前調(diào)用該函數(shù)7.返回坐標(biāo)狀態(tài)值 函數(shù)原型:in

15、t getStatus(const Point spPoint)函數(shù)功能:返回用戶當(dāng)前下子坐標(biāo)的狀態(tài)值函數(shù)參數(shù):const Point sPoint 落子點(diǎn)返回值:int:用戶當(dāng)前下子坐標(biāo)的狀態(tài)值8. 設(shè)置坐標(biāo)點(diǎn)狀態(tài)函數(shù)原型:void setStatus(const Point sPoint)函數(shù)功能:設(shè)置坐標(biāo)點(diǎn)狀態(tài)函數(shù)參數(shù):const Point sPoint 落子點(diǎn)返回值:無9. 獲得用戶下子點(diǎn)函數(shù)原型:void inputPoint(Point* pspPoint)函數(shù)功能:獲得用戶下子點(diǎn)函數(shù)參數(shù):Point* pspPoint返回值:無工作方式:將用戶輸入的字符串,轉(zhuǎn)換為相應(yīng)坐標(biāo),儲存

16、于數(shù)組中要求:當(dāng)用戶輸入的坐標(biāo)不存在或已有棋子時,提醒用戶重新輸入10. 判斷棋局函數(shù)原型:int judge( Point spPoint)函數(shù)功能:判斷棋局狀態(tài)函數(shù)參數(shù):Point spPoint當(dāng)前落子點(diǎn)返回值:JUDGE_DRAW 和棋 JUDGE_WIN 一方獲勝 JUDGE_PLAY 繼續(xù)游戲工作方式:調(diào)用函數(shù)對應(yīng)函數(shù)完成相應(yīng)判斷:judgeHorizontal判斷橫向連續(xù)相同的棋子數(shù)judgeVertical判斷縱向連續(xù)相同的棋子數(shù)judgeHypophoria判斷斜向右下連續(xù)相同的棋子數(shù)judgeHyperphoria判斷斜向右上連續(xù)相同的棋子數(shù)judgeDraw判斷是否為和棋

17、要求:根據(jù)判斷結(jié)果,返回不同值函數(shù)原型:int judgeHorizontal(const Point sPoint)int judgeVertical(const Point sPoint)int judgeHypophoria(const Point sPoint)int judgeHyperphoria(const Point sPoint)函數(shù)功能:判斷橫向連續(xù)相同的棋子數(shù)判斷縱向連續(xù)相同的棋子數(shù)判斷斜向右下連續(xù)相同的棋子數(shù)判斷斜向右上連續(xù)相同的棋子數(shù)函數(shù)參數(shù):Point spPoint:當(dāng)前落子點(diǎn)及棋子的值返回值:int 連續(xù)棋子數(shù)函數(shù)原型:int judgeDraw()函數(shù)功能:判

18、斷是否為和棋函數(shù)參數(shù):無返回值:int: FALSE 棋局還有空位 TRUE 和棋11. 保存及加載棋局函數(shù)原型:void printLastGame()函數(shù)功能:加載棋局函數(shù)參數(shù):無返回值:無函數(shù)原型:void printLastGame()函數(shù)功能:加載棋局函數(shù)參數(shù):無返回值:無12. 排行榜函數(shù)原型:void printAddRank(const int nStep)函數(shù)功能:保存排名函數(shù)參數(shù):const int nStep:下子數(shù)返回值:無函數(shù)原型:int readRanklist(Rank* psrRanks, const int nsize)函數(shù)功能:從文件中讀取學(xué)生信息函數(shù)參數(shù):

19、Rank* 排名信息數(shù)組,int 個數(shù)返回值:int:函數(shù)原型:int writeRanklist(Rank* psrRanks, const int nsize)函數(shù)功能:將排名信息寫入到文件中去,函數(shù)參數(shù):Rank* 排名信息數(shù)組,int 個數(shù)返回值:TRUE 操作成功 FALSE 操作失敗13. 人機(jī)對戰(zhàn)函數(shù)原型:void Man_Machine()函數(shù)功能:人機(jī)對戰(zhàn)函數(shù)參數(shù):無返回值:無函數(shù)名稱:int inputPoint_MM(Point* pspPoint)函數(shù)功能:調(diào)用函數(shù),控制玩家或電腦下子函數(shù)參數(shù):Point* pspPoint 落子點(diǎn)返回值:int函數(shù)名稱:void in

20、putPoint_Man(Point* pspPoint)函數(shù)功能:獲得玩家落子點(diǎn)函數(shù)參數(shù):Point* pspPoint 落子點(diǎn)返回值:無函數(shù)名稱:void inputPoint_Machine(Point* pspPoint)函數(shù)功能:獲得電腦落子點(diǎn)函數(shù)參數(shù):Point* pspPoint 落子點(diǎn)返回值:無函數(shù)名稱:void comPoint(Point* pspPoint)函數(shù)功能:獲得電腦落子點(diǎn)函數(shù)參數(shù):Point* pspPoint 落子點(diǎn)返回值:無14. 音樂播放函數(shù)原型:viod playMusic()函數(shù)功能:播放音樂函數(shù)參數(shù):無返回值:無4. 實現(xiàn)過程與解決的主要問題本次程序

21、開發(fā)采用迭代的思想,在上一步的基礎(chǔ)上進(jìn)行開發(fā)。此次設(shè)計的目標(biāo)主要是通過自己學(xué)到的關(guān)于程序開發(fā)的理論和方法,以及相關(guān)的技術(shù),設(shè)計一個五子棋小游戲,實現(xiàn)人人對戰(zhàn)以及人機(jī)對戰(zhàn)模式!本次開發(fā)過程主要涉及的幾個問題:1.繪制棋盤、棋子2.顯示落子位置3.認(rèn)輸、悔棋、和棋4.判斷勝負(fù)5.保存棋局6.排行榜7.音樂播放8.附加功能:人機(jī)對弈等;由于對C語言的基本操作尚不熟悉,開發(fā)過程中也遇到了一些問題,例如,數(shù)組越界故障,函數(shù)參數(shù)間的傳遞錯誤等問題。在反復(fù)觀看教學(xué)視頻以及老師同學(xué)的幫助下成功解決。5. 測試過程及結(jié)果運(yùn)行程序后:輸入菜單序號1:輸入菜單序號2:情況1:情況2:輸入菜單序號3:輸入菜單序號4:

22、輸入菜單序號5:輸入菜單序號7:輸入菜單序號0:當(dāng)獲得勝利后:6.特色及有待改進(jìn)的方面此五子棋游戲具有以下特色:1. 保存及加載棋局;2. 基于文件的排名管理;3. 悔棋功能;4. 音樂播放;5. 簡單人機(jī)對戰(zhàn);有待改進(jìn)的方面:1. 用戶界面不美觀;2. 人機(jī)對戰(zhàn)算法過于簡單;3. 在設(shè)計的同時,還可以設(shè)置一些提示信息,提高可視化效果,讓玩家更好地玩游戲!7.自我體會與評價在系統(tǒng)分析階段,針對五子棋游戲,將整個游戲分成若干個部分,逐步解決過程中遇到的每一個問題,初步地實現(xiàn)了基本功能,并最終實現(xiàn)所想要的效果。此程序已基本實現(xiàn)了五子棋游戲的一些基本的控制操作,但由于時間和能力的限制,程序有許多不足

23、之處,很多功能還沒有完全實現(xiàn),或者還沒有完善。若要設(shè)計出更加具有可玩性和好玩性的五子棋游戲,就要靠以后更多和更深入的學(xué)習(xí)。 通過這次課程實踐,我進(jìn)一步加深對基礎(chǔ)理論的理解,擴(kuò)大專業(yè)知識面,對收集資料、查閱文獻(xiàn)、方案制定等實踐方面得到了很好的鍛練,促進(jìn)對所學(xué)知識應(yīng)用能力的提高。同時由于經(jīng)驗的匱乏,難免有許多考慮不周全的地方。8.系統(tǒng)使用手冊系統(tǒng)功能:本系統(tǒng)是一個既有雙人對戰(zhàn),又有人機(jī)對戰(zhàn)的簡單五子棋游戲。該系統(tǒng)所實現(xiàn)的功能主要有下子、悔棋、保存及加載棋局、用戶排行榜等。運(yùn)行程序后,會出現(xiàn)如下界面:輸入對應(yīng)序號選擇相應(yīng)模塊即可;輸入菜單序號1:開始雙人游戲,對弈雙方通過輸入對應(yīng)坐標(biāo)進(jìn)行下子,游戲過

24、程中允許悔棋一步,以及保存棋局;輸入菜單序號2:若之前已保存棋局,則加載之前保存的棋局,允許繼續(xù)游戲;否則,顯示加載棋局失敗;輸入菜單序號3:加載排行榜。輸出前十名玩家的信息;輸入菜單序號4:查看游戲規(guī)則;輸入菜單序號5:查看關(guān)于我們;輸入菜單序號6:進(jìn)行人機(jī)對戰(zhàn),游戲過程中允許悔棋一步;輸入菜單序號7:播放音樂;輸入菜單序號0:退出系統(tǒng)。附件:源代碼-#ifndef MODAL_H#define MODAL_H/數(shù)據(jù)類型說明/坐標(biāo)點(diǎn)的狀態(tài)類型enum PointStatusSTATUS_BLANK = -1, /空STATUS_BLACK = 0, /黑子STATUS_WHITE = 1 /

25、白子;/坐標(biāo)點(diǎn)數(shù)據(jù)typedef struct Pointint row; /行號int col; /列號int status; /當(dāng)前點(diǎn)的狀態(tài),取值對應(yīng)PointStatusPoint;/排名數(shù)據(jù)結(jié)構(gòu)typedef struct Rankchar name64; /玩家姓名int step; /步數(shù)Rank;#endif-/條件編譯#ifndef MENU_H#define MENU_H#include"modal.h"/函數(shù)聲明int print_menu(); /打印菜單void playGame(); /開始游戲void GameRule(); /游戲規(guī)則void

26、printAboutUs(); /關(guān)于我們void initApplication(); /初始化應(yīng)用程序void exitApplication(); /輸出游戲結(jié)束信息void printRanklist(); /輸出排行榜信息void printLastGame(); /加載棋局void printDraw(); /繪制和棋信息void printWinner(const int nColor); /繪制勝利信息void printChess(); /繪制棋盤void playMusic();int if_BackMove(Point sPoint); /是否悔棋#endif -#ifn

27、def GLOBAL_H#define GLOBAL_H#define CHESS_BLANK ""#define CHESS_BLACK ""#define CHESS_WHITE ""#define TRUE 1#define FALSE 0#define JUDGE_PLAY 0 /繼續(xù)游戲#define JUDGE_WIN 1 /一方獲勝#define JUDGE_DRAW 2 /和棋#define SAVE_GAME 0 /保存棋局#define BACK_MOVE 1 /悔棋#define GOON_GAME 2 /繼續(xù)游

28、戲#define OPEN_FAIL -1 /文件打開失敗#endif-#ifndef GAME_SERVICE_H#define GAME_SERVICE_H#include "modal.h"/函數(shù)聲明int getStatus(const Point spPoint); /返回用戶落子點(diǎn)的坐標(biāo)狀態(tài)void initStatus(); /初始化游戲數(shù)據(jù)void setStatus(const Point sPoint); /設(shè)置坐標(biāo)點(diǎn)狀態(tài)void setStatusBlank(const Point sPoint); /設(shè)置坐標(biāo)點(diǎn)狀態(tài)為空int judge(const

29、Point spPoint); /判斷是否獲勝#endif-#ifndef RANK_FILE_H#define RANK_FILE_H#include"modal.h"/函數(shù)聲明int writeRanklist(Rank*, const int); /寫入排名信息到文件int readRanklist(Rank*, const int); /從文件中讀取排名信息#endif-#ifndef RANK_SERVICE_H#define RANK_SERVICE_H#include"modal.h"/函數(shù)聲明int judgeOrder(const in

30、t ); /判斷排名void insertRank(const int, const Rank); /插入排名信息void saveRanks(); /保存排名數(shù)據(jù)int getRankSize(); /獲得排名玩家個數(shù)int getRanks(Rank* psrRanks, const int); /獲得排名玩家數(shù)據(jù)void initRanks(); /初始化排名數(shù)據(jù)#endif-#ifndef MAN_MACHINE#define MAN_MACHINEvoid Man_Machine();#endif-#include<stdio.h>#include"menu.h

31、"#include"Man_Machine.h"#include"rank_service.h"#include<stdlib.h>/*函數(shù)名稱:main函數(shù)功能:程序入口函數(shù)函數(shù)參數(shù):無返回值:int:說明程序退出狀態(tài)*/int main()int select = -1;initApplication(); /輸出歡迎界面initRanks(); /加載玩家排名dosystem("cls"); /清空界面initApplication(); /輸出歡迎界面select = print_menu(); /用戶輸

32、入的菜單項序號switch (select)case 1:playGame(); break; /開始游戲case 2:printLastGame(); break; /加載棋局case 3:printRanklist(); break; /繪制排行榜case 4:GameRule(); break; /游戲規(guī)則case 5:printAboutUs(); break; /關(guān)于我們case 6:Man_Machine(); break; /人機(jī)對戰(zhàn)case 7:playMusic(); break; /播放音樂case 0:printf("n您選擇了退出系統(tǒng),再見!n");

33、 break; /退出default:printf("您的輸入有誤,請重新輸入!n"); break; while (select != 0);exitApplication();/輸出游戲結(jié)束信息system("pause");return 0;-#define _CRT_SECURE_NO_DEPRECATE#include<stdio.h> /printf與scanf函數(shù)頭文件#include<ctype.h> /toupper()函數(shù)頭文件#include<stdlib.h> /atoi()函數(shù)頭文件#incl

34、ude<string.h> /字符串處理頭文件#include <windows.h>#include <mmsystem.h>#pragma comment(lib, "winmm.lib")#include"global.h" /全局變量定義文件#include"game_service.h" /游戲操作的頭文件#include"rank_service.h" /排行榜操作的頭文件#include"game_file.h" /保存及讀取棋局信息#inclu

35、de"menu.h"/函數(shù)聲明int inputPoint(Point* pspPoint); /獲得用戶下子點(diǎn)/*函數(shù)名稱:initApplication函數(shù)功能:初始化應(yīng)用程序,輸出歡迎界面,加載排名信息函數(shù)參數(shù):無返回值:無*/void initApplication()/輸入歡迎界面printf(" n");printf(" 歡迎進(jìn)入五子棋游戲 n");printf(" n");printf(" 制作人最機(jī)智女士KYnn");/*函數(shù)名稱:exitApplication函數(shù)功能:退出應(yīng)用

36、程序前,輸出游戲結(jié)束信息,保存排名數(shù)據(jù)函數(shù)參數(shù):無返回值:無*/void exitApplication()saveRanks(); /保存排名數(shù)據(jù)printf("n");/輸出游戲結(jié)束信息printf(" n");printf(" 游戲結(jié)束n");printf(" n");printf(" 制作人最機(jī)智女士KYnn");/*函數(shù)原型:int print_menu()函數(shù)功能:打印主菜單,獲得用戶輸入函數(shù)參數(shù):無返回值:select 用戶輸入的菜單項序號*/int print_menu()/菜單

37、項序號int select = -1;/打印主菜單printf("n");printf("1.開始游戲t2.加載棋局t3.排行榜t4.查看規(guī)則n");printf("5.關(guān)于我們t6.人機(jī)對戰(zhàn)t7.音樂播放t0.退出n");printf("-n");printf("請輸入菜單序號(07):");scanf("%d", &select);/獲得用戶的輸入fflush(stdin);/清除輸入流緩存return select;/返回用戶選擇的菜單項/*函數(shù)原型:void

38、printChess()函數(shù)功能:繪制棋盤函數(shù)參數(shù):無返回值:無*/void printChess()system("cls"); /清空界面initApplication(); /輸出歡迎界面printf("n");printf("如果想要保存棋局,請在輸入坐標(biāo)編號時輸入S!n");printf("n");int i = 0, j = 0; /循環(huán)變量char cA = 'A' /繪制橫向坐標(biāo)int nStatus = STATUS_BLANK; /用來保存坐標(biāo)點(diǎn)狀態(tài)值Point spPoint;

39、 /坐標(biāo)點(diǎn)printf("n-n");/橫向坐標(biāo)(AO)printf(" "); /四個英文空格for (i = 0; i < 15; i+)printf("%c ", cA + i);printf("n"); /換行/繪制棋盤for (i = 0; i < 15; i+)printf(" %02d ", i); /縱向坐標(biāo),前后一個空格/繪制棋盤坐標(biāo)狀態(tài)for (j = 0; j < 15; j+)/設(shè)置坐標(biāo)點(diǎn)spPoint.row = i;spPoint.col = j;n

40、Status = getStatus(spPoint);/獲得坐標(biāo)狀態(tài)if (nStatus = STATUS_BLANK)printf(CHESS_BLANK); /繪制一個空白交叉點(diǎn)else if (nStatus = STATUS_BLACK)printf(CHESS_BLACK); /繪制一個黑子else if (nStatus = STATUS_WHITE)printf(CHESS_WHITE); /繪制一個白子printf("n"); /換行/*函數(shù)名稱:playGame函數(shù)功能:開始棋盤函數(shù)參數(shù):無返回值:無*/void playGame()int nStep = 0; /下子的步數(shù)Point spPoint; /坐標(biāo)點(diǎn)/初始化游戲數(shù)據(jù)initStatus();/繪制棋盤printChess();/開始下棋dospPoint.status = nStep % 2; /獲得執(zhí)子方的棋子顏色 /獲得用戶輸入(下子點(diǎn)或者保存棋局的選擇),如果用戶選擇保存棋局,則跳出循環(huán)體if (inputPoint(&spPoint) = SAVE_GAME)break; setStatus(spPoint); /設(shè)

溫馨提示

  • 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

提交評論