![c語言程序設計猜數(shù)字游戲報告_第1頁](http://file4.renrendoc.com/view/42ba778340c0e9c8c5e7cfb12fd180f6/42ba778340c0e9c8c5e7cfb12fd180f61.gif)
![c語言程序設計猜數(shù)字游戲報告_第2頁](http://file4.renrendoc.com/view/42ba778340c0e9c8c5e7cfb12fd180f6/42ba778340c0e9c8c5e7cfb12fd180f62.gif)
![c語言程序設計猜數(shù)字游戲報告_第3頁](http://file4.renrendoc.com/view/42ba778340c0e9c8c5e7cfb12fd180f6/42ba778340c0e9c8c5e7cfb12fd180f63.gif)
![c語言程序設計猜數(shù)字游戲報告_第4頁](http://file4.renrendoc.com/view/42ba778340c0e9c8c5e7cfb12fd180f6/42ba778340c0e9c8c5e7cfb12fd180f64.gif)
![c語言程序設計猜數(shù)字游戲報告_第5頁](http://file4.renrendoc.com/view/42ba778340c0e9c8c5e7cfb12fd180f6/42ba778340c0e9c8c5e7cfb12fd180f65.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、高級語言程序設計課程設計 題 目: 猜數(shù)字游戲 班 級: 09軟件工程R3 學生姓名: 謝澤雄 學生學號: 200931000622 指導老師: 姚金濤 提交時間: 2010年5月29日 華南農(nóng)業(yè)大學 信息(軟件)學院高級語言程序設計 課程設計評分表題 目猜數(shù)字游戲?qū)I(yè)班級09軟件工程R3提交日期2010年05月29日小組成員學 號姓 名完成情況 成績(指導老師填寫)組 長無無組 員200931000622謝澤雄組 員小組評分表評分項目分數(shù)1實現(xiàn)情況(15):完成課程設計要求的情況2系統(tǒng)分析(10):對系統(tǒng)的理解及分析的深入程度。3系統(tǒng)設計(20):總體設計、具體設計、數(shù)據(jù)結(jié)構(gòu)設計等。4程序設
2、計(30):面向?qū)ο蟪绦蛟O計方法與編程工具掌握水平。5界面設計(15):界面美觀程度、操作方式友好程度等。6論文撰寫(10):論文撰寫的規(guī)范性、合理性等等。小組總成績:教師簽名日 期目錄一、猜數(shù)字游戲分析。4 1游戲概述。4 2系統(tǒng)運行環(huán)境。4 3功能需求描述。4二、總體設計。5 1開發(fā)和設計的總體思想。5 2程序模塊結(jié)構(gòu)圖。5 3模塊設計。54程序流程描述。65界面設計。76數(shù)據(jù)結(jié)構(gòu)設計。12三、詳細設計。13 1文件及函數(shù)組成。132函數(shù)設計。14四.程序代碼。171start.h。172start.c。193mianzone.c。254game zone.c。325refreshline
3、.c。376reset.c。407print.c。408count_num.c。489intset del.c。4910imageline.c。49五. 運行結(jié)果。50六、調(diào)試分析。511情況1。512情況2。513情況3。514情況4。52七、總結(jié)。52一、猜數(shù)字游戲分析在猜數(shù)字游戲分析環(huán)節(jié)中,會對該游戲開發(fā)的意圖、應用目標、作用范圍和有關該軟件開發(fā)的背景材料進行詳細的分析。猜數(shù)字游戲作為一個用來進行娛樂、消遣的應用軟件,在對其進行需求分析的過程中,需要充分考慮游戲的可用性和娛樂性,聯(lián)系實際生活,從而得到合理的需求分析的結(jié)論。游戲概述該軟件為用戶提供一個在Windows系統(tǒng)上運行的猜數(shù)字游戲
4、,其使用者只有玩家:玩家在運行該程序時,可以瀏覽游戲自最近一次重置數(shù)據(jù)記錄以來,所保存的游戲記錄:分為“排行榜記錄”和“成功情況”。玩家可清空排行榜數(shù)據(jù),以重新開始記錄游戲成績。參加游戲后,游戲?qū)⒆詣铀⑿掠螒蛴涗洠匦屡判信判邪?。玩家參加游戲前,可瀏覽幫組功能,了解游戲規(guī)則。系統(tǒng)運行環(huán)境硬件環(huán)境 處 理 器:Intel Pentium 166或更高 內(nèi) 存:32MB以上 硬盤空間:2G以上 顯 卡:SVGA顯示適配器軟件環(huán)境 操作系統(tǒng):Windows98/Me/2000/XP/vista/7功能需求描述猜數(shù)字游戲是用來進行娛樂、消遣活動的應用軟件??蛇M行游戲功能、瀏覽游戲記錄功能和查看游戲幫助
5、功能。 (1) 游戲功能需求如下:進行游戲:在游戲提示下輸入所要猜測的游戲數(shù)字,即可完成游戲。重新開始游戲:在游戲進行中,因不同原因玩家要求輸入特定字符串以重新游戲,或放棄游戲且返回主菜單。刷新排行榜:游戲結(jié)束后,若玩家成功猜的答案,玩家要求記錄自己的用戶名和記錄,參與新排行榜的排行。輸出答案:當玩家在規(guī)定次數(shù)中不能猜出答案,則玩家要求在游戲結(jié)束后得知正確答案。計算贏得游戲所用時間:玩家猜出數(shù)字后,要求顯示所用時間并記錄到排行榜中,以便與其他玩家進行比較和檢查自己的提升。(2) 瀏覽游戲記錄功能需求如下:查看排行榜:游戲結(jié)束后,玩家需要查看自己的成績排位,和了解其他玩家的游戲情況。在不同情況下
6、,玩家想依據(jù)成績循序、用戶名循序、所用時間多少進行輸出排行榜。count文件:玩家需要查看游戲次數(shù)與成功次數(shù)的記錄。清空排行榜:玩家在一定情況下,要求重新開始記錄游戲信息。清空count文件:玩家在一定情況下,要求重新開始記錄游戲信息。(3) 幫組功能需求如下:輸出游戲規(guī)則:玩家需要了解游戲規(guī)則。游戲說明:玩家要求更了解游戲的各種功能,以更方便操作程序。二、總體設計題目要求 (1)按照分析、設計、編碼、調(diào)試和測試過程完成應用程序; (2)學習并使用流程圖等工具,并在撰寫論文中使用; (3)程序的各項功能在程序運行時,以菜單方式選擇并執(zhí)行; (4)要求用戶輸入數(shù)據(jù)時,要給出清晰、明確的提示,包括
7、:輸入數(shù)據(jù)的內(nèi)容、格式及結(jié)束方式等 (5)所有的信息存儲在文件中,并實現(xiàn)文件讀寫操作。開發(fā)和設計的總體思想猜數(shù)字游戲是一個簡易的娛樂游戲,開發(fā)設計的重點在于排行榜的跟新。每次游戲結(jié)束后都要對排行榜進行跟新,不可漏掉任何一次跟新。解決這個問題的方法是將跟新的過程單獨寫成一個可以獨立完成得函數(shù),在每次游戲結(jié)束后都必須調(diào)用該函數(shù)。關于排行榜的輸出問題,游戲?qū)殉煽兣判性谇笆耐婕倚畔⑤敵?,當排行在十名后的玩家的成績與第十名的成績相同,則把與第十名的玩家的成績相同的用戶信息一同輸出。對于排行榜的容量問題,游戲采用自動增刪的方法進行處理。當排行榜存有的用戶信息多于十五名時,排行榜將自動刪除第十六條用戶
8、信息。對菜單的選擇判斷要用到程序設計思想中的選擇結(jié)構(gòu),對大量數(shù)據(jù)的處理要用到循環(huán)和文件處理等基本技術。系統(tǒng)采用結(jié)構(gòu)化的設計方法進行設計,采用C語言進行開發(fā)。程序模塊結(jié)構(gòu)圖依據(jù)需求分析結(jié)果,猜數(shù)字游戲的程序可分為3個模塊:游戲區(qū)、游戲記錄和幫助。程序模塊結(jié)構(gòu)圖如圖1所示。猜數(shù)字游戲游戲區(qū)游戲記錄幫助圖1 程序模塊功能圖模塊設計游戲區(qū)模塊 該模塊為進入游戲,玩家進入后可按照游戲提示完成游戲,和刷新游戲記錄、排行榜。游戲記錄模塊游戲記錄模塊的作用是為了保障系統(tǒng)的安全性和系統(tǒng)使用人員角色的區(qū)分。該模塊需要從輸入設備獲取用戶輸入的用戶名和密碼,判斷是否為合法身份,其次要判斷用戶權限,從而決定其能使用的系
9、統(tǒng)功能,其模塊功能圖如圖2所示。游戲記錄排行榜顯示count文件信息按排名瀏覽排行榜count文件按姓名瀏覽排行榜按用時瀏覽排行榜清空排行榜清空count文件圖2 游戲記錄模塊功能圖幫助模塊該模塊主要實現(xiàn)常規(guī)的管理功能,如投票人的初始化,即創(chuàng)建投票人文件、投票人信息的增加、刪除、修改和查詢等。該模塊主要用結(jié)構(gòu)體類型的數(shù)組和文件的讀寫來完成對大量數(shù)據(jù)的管理操作,其功能圖如圖3所示。幫助游戲規(guī)則游戲說明圖3幫助模塊功能圖程序流程描述程序的主體處理流程如圖8所示。進入程序開始結(jié)束進入游戲贏得游戲Y輸出排行榜刷新排行榜Y繼續(xù)游戲NNNY重新游戲返回菜單YYNN按排名瀏覽排行榜清空排行榜按姓名瀏覽排行榜
10、按用時瀏覽排行榜清空排行榜同時重置count文件排行榜count文件顯示count文件信息重置count文件同時清空排行榜清空count文件幫助游戲規(guī)則游戲說明返回主菜單游戲記錄退出程序圖4 程序流程圖界面設計應遵循簡潔美觀、方便使用的原則。主菜單界面設計充分考慮界面易于操作的系統(tǒng)需求,其他的的功能調(diào)用采用類似于菜單的功能選擇方式實現(xiàn)。用printf語句構(gòu)造簡單的文字界面,具體功能選擇界面設計效果如圖5所示。圖5 主菜單界面設計效果圖游戲區(qū)界面設計游戲區(qū)界面設計注重界面的簡潔性,要求玩家在游戲時可在游戲提示下完成游戲,重新游戲,放棄游戲回到主菜單,游戲后刷新排行榜,瀏覽排行榜或繼續(xù)游戲。具體設
11、計效果如組圖所示。圖圖圖6.3組圖6 游戲區(qū)界面設計效果圖數(shù)據(jù)記錄菜單界面與其他菜單界面設計充分考慮界面易于操作的系統(tǒng)需求,其他的的功能調(diào)用采用類似于菜單的功能選擇方式實現(xiàn)。用printf語句構(gòu)造簡單的文字界面,具體菜單選擇界面設計效果如圖7圖12所示。圖7 數(shù)據(jù)記錄菜單界面設計效果圖圖8 排行榜菜單界面設計效果圖圖9 重置排行榜菜單界面設計效果圖圖10 count文件菜單界面設計效果圖圖11 重置count文件菜單界面設計效果圖圖12 幫助菜單界面設計效果圖排行榜輸出界面、顯示count文件界面、游戲規(guī)矩和游戲說明的輸出界面設計這些界面設計主要考慮玩家在瀏覽信息的清晰和易讀性。以防數(shù)據(jù)輸出的
12、排版長度大于窗口的長度,在輸出所有數(shù)據(jù)后使光標回到窗口的最上端,利于玩家從數(shù)據(jù)的起始端開始瀏覽數(shù)據(jù)。排行榜的輸出中,將名次、用時、成績(次數(shù))和用玩家姓名列表顯示。具體排行榜輸出界面設計效果如圖13圖15所示。圖13 按排名順序輸出排行榜界面設計效果圖圖14 按姓名次序輸出排行榜界面設計效果圖圖15按所用時間排序輸出排行榜界面設計效果圖count文件的輸出界面設計效果如圖16所示。圖16 count文件的輸出界面設計效果圖游戲規(guī)則的輸出界面設計效果如圖17所示。圖17 游戲規(guī)則界面設計效果圖游戲說明的輸出界面設計效果如組圖18所示。圖18.1圖18.2圖18.3組圖18 游戲說明的輸出界面設計
13、效果圖退出游戲界面設計具體退出游戲界面設計效果如圖19所示。圖19 退出游戲界面設計效果圖數(shù)據(jù)結(jié)構(gòu)設計玩家用戶數(shù)據(jù)結(jié)構(gòu) 描述玩家用戶的用戶名、猜出數(shù)字所用次數(shù)和游戲所用時間,作為一整條記錄存放在文件中。typedef struct achar name22;/玩家用戶名int t;/猜數(shù)字所用次數(shù)int sj;/游戲所用時間struct a *next; player;“勝利”信息數(shù)據(jù)結(jié)構(gòu)記錄玩家贏得游戲次數(shù)與猜正確平均所需次數(shù),作為一整條記錄存放在文件中。struct winaveint wintime;/總共贏的次數(shù)float ave;/才正確平均所用次數(shù);三、詳細設計基于系統(tǒng)需求分析與系
14、統(tǒng)總體設計的結(jié)果,本系統(tǒng)采用Visaul C+ 6.0實現(xiàn)各模塊的功能,下面闡述系統(tǒng)的詳細設計和實現(xiàn)過程。1文件及函數(shù)組成源文件函數(shù)名或其他成分功能start.h結(jié)構(gòu)聲明結(jié)構(gòu)聲明庫函數(shù)及函數(shù)原型聲明start.cmain主函數(shù)mainmenu主菜單menu2游戲記錄菜單phbmenu瀏覽排行榜菜單qkmenu清空排行榜菜單countmenu瀏覽count文件菜單rscountmenu重置count文件菜單menu3幫助菜單move“到達”函數(shù)rulemenu游戲規(guī)則explainmenu游戲說明endmenu結(jié)束菜單mianzone.cmain1被主函數(shù)調(diào)用,用以開始進入游戲liulan進入瀏
15、覽排行榜功能paihangbang進入排行榜功能qk清空排行榜功能qingkong進入重置排行榜功能pn進入重置排行榜和count文件功能countwork進入count文件瀏覽功能printcount輸出count文件數(shù)據(jù)函數(shù)st進入重置count文件setcount進入清空count文件功能sc進入重置count文件和排行榜help進入幫助功能gamezone.ccheckcount檢查count的情況,且讀取count中數(shù)據(jù)closecount更新count中的數(shù)據(jù)creat生成游戲所需猜的數(shù)字checknum檢查輸入的數(shù)字是否符合規(guī)定Time_get計算完成游戲所用時間gamezone
16、進行游戲refreshline.crefresh更新排行榜note記錄或輸出記錄起始時間reset.cresetline清空或重置排行榜resetcount重置或清空count.txt文件print.cprintline按成績輸出排行榜printname按姓名輸出排行榜printtime按用時輸出排行榜count_num.ccountnum計算及輸出平均成功率intset del.cinset插入新紀錄鏈表del刪除鏈表中的第十六個記錄imageline.cpl; pl0;2函數(shù)設計頭部文件文件名稱:start.h功 能:聲明函數(shù)原型,宏定義包含頭文件及定義數(shù)據(jù)結(jié)構(gòu)。要 求:完成所需函數(shù)的原型
17、聲明。進入游戲函數(shù)函數(shù)原型:main()功 能:調(diào)用mian1函數(shù)參 數(shù):void返 回 值:void要 求:開始程序,使游戲順利開始。進入游戲函數(shù)函數(shù)原型:void main1()功 能:進入游戲主菜單參 數(shù):void返 回 值:void要 求:如果游戲者沒有進行等級設定,則默認初級進行游戲。菜單函數(shù)函數(shù)原型:void mainmenu()主菜單void menu2()游戲記錄菜單void phbmenu()瀏覽排行榜菜單void qkmenu()清空排行榜菜單void countmenu()瀏覽count文件菜單void rscountmenu()重置count文件菜單void menu3
18、()幫助菜單函數(shù)功 能:輸出菜單選項參 數(shù):void返 回 值:void要 求:明確顯示菜單選項,使玩家準確進入相應的游戲功能?!暗竭_”函數(shù)函數(shù)原型:void move(int i,int j)功 能:使光標回到窗口的特定位置。參 數(shù):int i和int j:特定位置的坐標返 回 值:void要 求:實現(xiàn)程序所需功能。游戲規(guī)則和游戲說明函數(shù)函數(shù)原型:void rulemenu()游戲規(guī)則函數(shù)void explainmenu()游戲說明函數(shù)功 能:輸出游戲規(guī)則和游戲說明參 數(shù):void返 回 值:void要 求:使玩家清楚游戲的玩法,是玩家可以了解本程序的功能。結(jié)束函數(shù)函數(shù)原型:void end
19、menu()功 能:輸出結(jié)束界面參 數(shù):void返 回 值:void要 求:感謝玩家使用本軟件。檢查count函數(shù)函數(shù)原型:void checkcount (char count )功 能:檢查count的情況,且讀取count中數(shù)據(jù)參 數(shù):char count:需要讀取的數(shù)組返 回 值:void要 求:檢查count的情況,若存在,則讀取其中的數(shù)據(jù);若不存在,則重置count文件。更新count函數(shù)函數(shù)原型:void closecount (char count )功 能:將count 數(shù)組中的數(shù)據(jù)存儲到參 數(shù):char count:需要存儲到文件的數(shù)組返 回 值:void要 求:更新cou
20、nt數(shù)據(jù)。生成隨機數(shù)函數(shù)函數(shù)原型:void creat (char key )功 能:生成游戲所需猜的數(shù)字參 數(shù):char key:存儲答案的數(shù)組返 回 值:void要 求:生成4個不重復的數(shù)字。檢查輸入函數(shù)函數(shù)原型:void checknum (char guess )功 能:檢查輸入的數(shù)字是否符合規(guī)定參 數(shù):char guess:需檢查的玩家猜測的數(shù)組返 回 值:void要 求:檢查輸入的數(shù)字是否符合規(guī)定,不合規(guī)定的要求玩家重新輸入;若和規(guī)則的,檢查與答案的不同,輸出提示。算時函數(shù)函數(shù)原型:int Time_get checknum(time_t first, time_t second)
21、功 能:計算完成游戲所用時間參 數(shù):time_t first, time_t second:游戲開始的時間與游戲結(jié)束的時間返 回 值:int a: second與first相差的秒數(shù)要 求:計算second與first相差的秒數(shù)并返回。游戲函數(shù)函數(shù)原型:void gamezone()功 能:進行游戲參 數(shù):void;返 回 值:void;要 求:順利進行游戲。更新排行榜函數(shù)函數(shù)原型:void refresh(char name ,int t, int sj)功 能:更新排行榜參 數(shù):char name ,int t, int sj :需要插入的玩家信息(玩家姓名,所用次數(shù),所用時間)返 回 值
22、:void;要 求:若排行榜不存在,則新建排行榜;若存在,則將新加入的信息插入到排行榜中。記錄函數(shù)函數(shù)原型:void note(int i)功 能:記錄或輸出記錄起始時間參 數(shù):int i:所需進行的功能返 回 值:void;要 求:i=1(2)時,輸出排行榜(count文件)記錄起始時間;i=3(4)時,記錄排行榜(count文件)重置時間。重置排行榜函數(shù)函數(shù)原型:FILE *resetline(FINE *fp)功 能:清空或重置排行榜參 數(shù):FILE *fp:重置文件的指針返 回 值:FILE *fp;用“r”打開的處理后的排行榜文件要 求:若排行榜不存在,新建排行榜;若存在,則清空排行
23、榜。重置count文件函數(shù)函數(shù)原型:void resetcount(void )功 能:重置或清空count.txt文件參 數(shù):void返 回 值:void 要 求:若count文件不存在,新建count文件;若存在,則清空count文件。按成績輸出排行榜函數(shù)函數(shù)原型:void printline(void )功 能:按成績先后輸出排行榜參 數(shù):void返 回 值:void 要 求:若排行榜不存在,新建排行榜;若存在,則按成績先后輸出排行榜。按姓名輸出排行榜函數(shù)函數(shù)原型:void printline(void )功 能:按姓名順序輸出排行榜參 數(shù):void返 回 值:void 要 求:若排行榜
24、不存在,新建排行榜;若存在,則按姓名順序輸出排行榜。按用時輸出排行榜函數(shù)函數(shù)原型:void printline(void )功 能:按用時多少輸出排行榜參 數(shù):void返 回 值:void 要 求:若排行榜不存在,新建排行榜;若存在,則按用時多少輸出排行榜。計算及輸出平均成功率函數(shù)函數(shù)原型:void countnum(void )功 能:計算及輸出平均成功率參 數(shù):void返 回 值:void 要 求:若count文件不存在,新建count;若存在,則計算及輸出平均成功率。插入鏈表函數(shù)函數(shù)原型:player *inset(player *head,player *stud)功 能:插入新紀錄鏈
25、表參 數(shù):player *head,player *stud:需要被插入的鏈表的頭指針和需要插入表返 回 值:player *head:處理后的鏈表的頭指針 要 求:將新紀錄插入到比起大或與之相等的記錄前。刪除記錄函數(shù)函數(shù)原型:player *inset(player * head,int n)功 能:刪除鏈表中的第十六個記錄參 數(shù):player *head,int n:需要被處理的鏈表的頭指針和鏈表跟新前的記錄個數(shù)返 回 值:player *head:處理后的鏈表的頭指針 要 求:若n=15,是第十六個表中的next的值賦為NULL。表鏈函數(shù)函數(shù)原型:pl();pl0()功 能:輸出特定的表
26、鏈參 數(shù):void返 回 值:void 要 求:完成輸出。四.程序代碼start.h#includestdio.h#include#include#includestring.h#includeconio.h#include /定義player數(shù)組typedef struct achar name22;/玩家用戶名int t;/猜數(shù)字所用次數(shù)int sj;/游戲所用時間struct a *next; player;/定義struct winave數(shù)組struct winaveint wintime;/總共贏的次數(shù)float ave;/才正確平均所用次數(shù);/函數(shù)聲明void refresh(ch
27、ar name,int t,int js);void note(int i);FILE *resetline(FILE *fp);/void resetcount(void);/初始化記錄文件的函數(shù)void printline();void printname();void printtime();void pl();void pl0();void gamezone();void checkcount(float count);player *inset(player *head,player *p2);player *del(player *head,int n);void main1();
28、void liulan();void qk();void qkmenu();void qingkong();void pn();void rscountmenu();void setcount();void sc();void st();void printcount();void help();void end();void mainmenu();void menu2();void menu3();void rulemenu();void paihangbang();void phbmenu();void countwork();void countmenu();void explainme
29、nu();void endmenu();int Time_get(time_t first,time_t second);void countnum();void check(); /檢查函數(shù)void move(int i,int j);/“到達”函數(shù)start.c#includestart.hvoid main()/開始程序printf(nnn);pl();printf(nnnnttt 歡迎來到猜數(shù)字游戲!nnnnnnn);pl0();printf(ttt (請按任意鍵進入菜單));getch();main1();void mainmenu()/主菜單system (cls);printf(
30、*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(tttt 1.開始游戲nn);printf(tttt 2.游戲記錄nn);printf(tttt 3.幫助nn);printf(tttt 4.退出游戲nn);printf(ttt 請按鍵選擇,回車確定n);printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(*);void menu2() /游戲記錄菜單system (cls);printf(*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf
31、(tttt 1.排行榜nn);printf(tttt 2.count文件nn);printf(tttt 3.返回主菜單 nn);printf(ttt 請按鍵選擇,回車確定n);printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(*);return ;void phbmenu()/瀏覽排行榜菜單system (cls);printf(*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(tttt 1.按排名瀏覽排行榜nn);printf(tttt 2.按姓名瀏覽排行榜nn);printf(tttt
32、3.按用時瀏覽排行榜nn);printf(tttt 4.重置排行榜nn);printf(tttt 5.返回上一菜單 nn);printf(tttt 6.返回主菜單 nn);printf(ttt 請按鍵選擇,回車確定n);printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(*);return ;void countmenu()/瀏覽count文件菜單system (cls);printf(*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(tttt 1.顯示count文件信息 nn);printf
33、(tttt 2.清空count文件 nn);printf(tttt 3.返回上一菜單 nn);printf(tttt 4.返回主菜單 nn);printf(ttt 請按鍵選擇,回車確定n);printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(*);return ;void qkmenu() /清空排行榜菜單system (cls);printf(*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(tttt 1.清空排行榜nn);printf(tttt 2.同時重置count文件nn);print
34、f(tt請按退格鍵返回上一菜單,請按鍵選擇(不需回車確定)n);printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(*);return ;void rscountmenu()/重置count文件菜單system (cls);printf(*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(tttt 1.重置count文件數(shù)據(jù)nn);printf(tttt 2.同時清空排行榜nn);printf(tt請按退格鍵返回上一菜單,請按鍵選擇(不需回車確定)n);printf(*_ _ _ _ _ _ _
35、 _ _ _ _ _ _ _ _ _*);printf(*);return ;void menu3() /幫助菜單system (cls);printf(*); printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(tttt 1.游戲規(guī)則nn);printf(tttt 2.游戲說明nn);printf(tttt 3.返回主菜單 nn);/*printf(tttt 4.重置排行榜nn);*/printf(ttt 請按鍵選擇,回車確定n);printf(*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _*);printf(*);return
36、 ;void move(int i,int j)/“到達”函數(shù)COORD c;/聲明坐標變量c.X=i;/橫坐標為x-1c.Y=j;/縱坐標為y-1SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);/使光標返回開頭return ;void rulemenu() /游戲規(guī)則int i,j;system (cls);printf(游戲規(guī)則:n);printf(t*n);printf(t*n);printf(t:游戲開始,系統(tǒng)隨機產(chǎn)生一位不重復的4位數(shù)字。n);putchar(n);printf( :游戲者輸入所猜的不重復數(shù)字
37、,并按回車提交(直接輸入,不n);printf(t可用空格隔開)。n);putchar(n);printf(t:系統(tǒng)將提交的數(shù)與它自動產(chǎn)生的數(shù)進行比較,輸出結(jié)果n);printf(t“*A*B”形式。其中A代表數(shù)字正確相應位置也正確,B代表數(shù)字正n);printf(t確但位置不正確。如:1A3B表示游戲者有1個數(shù)字的位置正確且數(shù)值n);printf(t也正確,除此以外,游戲者還猜對了3個數(shù)字,但位置不對,即游戲n);printf(t者已經(jīng)猜出4位數(shù)據(jù),但有3個數(shù)據(jù)位置不對!n);putchar(n);printf(t:游戲者有限的十次數(shù)的猜測機會,在規(guī)定次數(shù)內(nèi)完成,則游戲n);printf(t
38、成功。否則,游戲失敗。其中,猜測次數(shù)與成績有關:n);printf(t次數(shù)越少,成績越高。tn);putchar(n);printf(t:游戲排行榜中名次,只決定于成績。n);printf(t*n);printf(t*n);printf(n);printf(*按退格鍵返回幫助菜單,其他鍵返回主菜單。);i=10;j=0;move(i,j);/光標回到窗口的頂端if(getch()=8) help();else main1();void explainmenu()int i,j,k=0;char A;system (cls);printf(游戲說明:n);k+;printf(t*n);k+;pr
39、intf(t*n);k+;printf(t:此游戲有計時功能。進入游戲后開時計時,猜正確后計時結(jié)束。n);k+;printf(t游戲過程中不顯示時間,只有成功猜出數(shù)字后才會提示所用時間。n);k+;putchar(n);k+;printf(t:進入游戲后,可輸入“rt”可返回主菜單;輸入“rp”可n);k+;printf(t重新開始游戲 。n);k+;putchar(n);k+;printf(t:游戲中有瀏覽排行榜功能。n);k+;printf(t可分別按照成績、用戶名、所用時間的順序進行瀏覽。n);k+;printf(t其中只顯示前十名成績的記錄,且最多顯示15名玩家。n);k+;print
40、f(t按用戶名名輸出排行版功能中,數(shù)字優(yōu)先于字母,字母優(yōu)先于文字的n);k+;printf(t規(guī)則進行排序。n);k+;putchar(n);k+;printf(t:在瀏覽表最后,顯示最近一次重置排行榜或第一次游戲以來所有n);k+;printf(t玩家猜正確的總共人次和所有玩家猜正確的平均所用次數(shù)n);k+;printf(t則游戲成功。否則,游戲失敗。其中,猜測次n);k+;putchar(n);k+;printf(t:所有玩家參與游戲后,分別以1到10次猜正確的平均成功率的計算n);k+;printf(t公式為:n);k+;printf(t 用1次猜中數(shù)字的成功率+用2次猜中數(shù)字的成功率+
41、用十次猜中數(shù)n);k+;printf(t字的成功率的和除以10。n);k+;putchar(n);k+;printf(t:count儲存信息請查看其輸出。(在游戲記錄選項中)n);k+;printf(t其中“所占比例”表示占成功次數(shù)的比例n);k+;putchar(n);k+;printf(t:在主菜單下,選擇菜單5(菜單上未顯示)??蓹z查count文件中n);k+;printf(t數(shù)據(jù),和排行榜的起始時間與count文件中數(shù)據(jù)的起始時間。n);k+;printf(t*n);k+;printf(t*n);k+;printf(t 游戲設計者:華南農(nóng)業(yè)大學 09級軟件工程R3 謝澤雄n);k+;p
42、rintf(t*n);k+;printf(t*n);k+;printf(n);k+;printf(*是否頂端開頭(Y/N)? );/k用以統(tǒng)計輸出的行數(shù)i=10; j=0;move(i,j);/光標回到窗口的頂端A=getch();i=19; move(i,k);/光標回到最下方輸出處while(A!=Y&A!=y&A!=N&A!=n)putchar(A);k+;printf(n輸入錯誤 請輸入Y/N: );A=getch();if(A=Y|A=y) if(A=y) printf( y);else printf( Y);explainmenu();/回到開頭i=0; move(i,k);/光標
43、回到最下方輸出處/再次實現(xiàn)move(i)是為了應對輸入錯誤的情況printf(*按退格鍵返回幫助菜單,其他鍵返回主菜單。);if(getch()=8) help();else main1();void endmenu()/結(jié)束菜單system (cls);printf(nnn);printf(* * * * * * * * * n);printf(* * * * * * * * * * n);printf( * * * * * * * * * * * n);printf( * * * * * * * * * * * n);printf( * * * * * * * * n);printf( *
44、 * * * * * * * n);printf( * * * * * * * * * * * n);printf( * * * * * * * * * * * n);printf( * * * * * * * * * * n);printf( * * * * * * * * * * n);printf(nnnnttt Byebye.);printf(nnnnttt 歡迎使用本軟件!);getch();mianzone.c#includestart.hvoid main1()/被主函數(shù)調(diào)用,用以開始進入游戲char choose10;mainmenu();gets(choose);while(
45、strlen(choose)!=1)printf(請只選擇一項進行操作:);gets(choose);while(choose0!=1&choose0!=2&choose0!=3&choose0!=4&choose0!=5)printf(請選擇正確選項:);gets(choose);/*也可用default:printf(Error!n);實現(xiàn)*/switch(choose0)/功能函數(shù)選擇 case 1:gamezone();break;case 2:liulan();break;case 3:help();break;case 4:end();case 5:check();break; v
46、oid liulan()/進入瀏覽排行榜功能char choose;menu2();choose=getchar();getchar();switch(choose)/功能函數(shù)選擇 case 1:paihangbang();break;case 2:countwork();break;case 3:main1();break;default:printf(tError!n請重新輸入:);liulan(); void paihangbang()/進入排行榜功能char choose;phbmenu();lp:choose=getchar();getchar();switch(choose)/功能
47、函數(shù)選擇 case 1:printline();break;case 2:printname();break;case 3:printtime();break;case 4:qk();break;case 5:liulan();break;case 6:main1();break;default:printf(tError!n請重新輸入:);goto lp; void countwork()/進入count文件瀏覽功能char choose;countmenu();lp:choose=getchar();getchar();switch(choose)/功能函數(shù)選擇 case 1:printc
48、ount();break;case 2:st();break;case 3:liulan();break;case 4:main1();break;default:printf(tError!n請重新輸入:);goto lp; void qk()/清空排行榜功能char choose;int t=0;qkmenu();lp:choose=getch();if(choose=8) paihangbang();switch(choose) /功能函數(shù)選擇 case 1:qingkong();break;case 2:pn();break;default:printf(tError!n請重新輸入:)
49、;goto lp;void pn()/進入重置排行榜和count文件功能FILE *fp;char A;printf(是否重置排行榜和count文件(Y/N)?);A=getch();while(A!=Y&A!=y&A!=N&A!=n)printf(n輸入錯誤 請輸入Y/N:);A=getch();if(A=Y|A=y) if(A=y) printf( y);else printf( Y);fp=fopen(line.txt,w);fp=resetline(fp);/重置排行榜fclose(fp);resetcount();/重置count文件(無厘頭出問題)*printf(n重置成功!n請按
50、任意鍵返回主菜單);getch();main1();else liulan();void qingkong()/進入重置排行榜功能FILE *fp;char A;printf(是否重置排行榜(Y/N)?);A=getch();while(A!=Y&A!=y&A!=N&A!=n)printf(n輸入錯誤 請輸入Y/N:);A=getch();if(A=Y|A=y) if(A=y) printf( y);else printf( Y);fp=fopen(line.txt,w);fp=resetline(fp);/重置排行榜fclose(fp);printf(n重置成功!n請按任意鍵返回主菜單);g
51、etch();main1();else liulan();void st()/進入重置count文件char choose;int t=0;rscountmenu();lp:choose=getch();if(choose=8) countwork();switch(choose) /功能函數(shù)選擇 case 1:setcount();break;case 2:sc();break;default:printf(tError!n請重新輸入:);goto lp;void sc()/進入重置count文件和排行榜FILE *fp;char A;printf(是否重置count文件和排行榜(Y/N)?
52、);A=getch();while(A!=Y&A!=y&A!=N&A!=n)printf(n輸入錯誤 請輸入Y/N:);A=getch();if(A=Y|A=y) if(A=y) printf( y);else printf( Y);fp=fopen(line.txt,w);fp=resetline(fp);/重置排行榜fclose(fp);resetcount();printf(n重置成功!n請按任意鍵返回主菜單);getch();main1();else liulan();void setcount()/進入清空count文件功能char A;printf(是否清空count文件(Y/N)
53、?);A=getch();while(A!=Y&A!=y&A!=N&A!=n)printf(n輸入錯誤 請輸入Y/N:);A=getch();if(A=Y|A=y) if(A=y) printf( y);else printf( Y);resetcount();/重置count文件printf(n重置成功!n請按任意鍵返回主菜單);getch();main1();else liulan();void printcount()/輸出count文件數(shù)據(jù)函數(shù)float count13;int i;float sum=0;system(cls);pl();checkcount(count);for(i
54、=1;i11;i+)sum+=counti;printf(n*玩家參加游戲次數(shù):%2.0f(次)n,count0);for(i=1;i0) printf(t所占比例為: %6.2f%c,counti*100/sum,37); /100.00(%) 加上小數(shù)點有 六 位!putchar(n);pl0();i=4;note(i);printf((請按任意鍵返回主菜單));getch();main1();void help()/進入幫助功能char choose;int t=0;menu3();choose=getchar();getchar();switch(choose)/功能函數(shù)選擇 case
55、 1:rulemenu();break;case 2:explainmenu();break;case 3:main1();break;/*case 3:qingkong();break;*/default:printf(tError!n請重新);help(); void end()/進入結(jié)束功能char A;system(cls);printf(nnnnttt 是否退出游戲(Y/N)?);A=getch();while(A!=Y&A!=y&A!=N&A!=n)printf(nttt 輸入錯誤 請輸入Y/N:);A=getch();if(A=Y|A=y) if(A=y) printf( y);
56、else printf( Y);endmenu();exit(0);else main1();void check()FILE *fp;int i;float count13;for(i=0;i13;i+)counti=0;counti=0;/初始化count數(shù)組printf(ttt *恭喜您,進入了測試功能!*n);printf(count文件的數(shù)據(jù):n);fp=fopen(count.txt,r);if(fp=NULL) printf(count文件不存在!n);elsefor(i=0;i13;i+)fscanf(fp,%f ,&counti);for(i=0;i12;i+)printf(
57、%fn,counti);fclose(fp);printf(*接下來,測試數(shù)據(jù)記錄最近初始化的時間:n);printf(請輸入i(3/4),不需回車確定:(3是排行榜,4是count文件));scanf(%d,&i);while(i!=3&i!=4)printf(%dn請重新輸入:,i);scanf(%d,&i);note(i);printf(按任意鍵退出該功能!);getch();main1();gamezone.c#includestart.hvoid checkcount(float count)/檢查count的情況 且 讀取count中數(shù)據(jù)FILE *fp;int i;char A;
58、fp=fopen(count.txt,r);if(fp=NULL) /count文件不存在或打開失敗lp:printf(n*數(shù)據(jù)初始化失敗,游戲?qū)娭瞥跏蓟?!n);printf(*是否強制初始化游戲數(shù)據(jù)(Y/N)?);A=getch();while(A!=Y&A!=y&A!=N&A!=n)printf(n輸入錯誤 請輸入Y/N:);A=getch();if(A=Y|A=y) resetcount();fp=fopen(count.txt,r);/初始化count文件else main1();for(i=0;i12;i+)fscanf(fp,%f ,&counti);if(feof(fp) go
59、to lp;/讀取count文件數(shù)據(jù)fclose(fp);void closecount(float count)/存儲count中的數(shù)據(jù)int i;FILE *fp;fp=fopen(count.txt,w);for(i=0;i13;i+)fprintf(fp,%f ,counti);/將新的count數(shù)組的值寫入文件fclose(fp);void creat(char key)/定義生成隨機數(shù)函數(shù)int i,j;loop:srand(unsigned int)time(0);for(i=0;i4;i+)keyi=rand()%10;for(i=0;i3;i+)/判斷生成的答案中是否有重復數(shù)
60、字for(j=i+1;j4;j+)if(keyj=keyi) goto loop;void checknum(char guess)/定義檢查輸入函數(shù)int i,j;printf(n請輸入四個數(shù)字(09):);gets(guess);if(strlen(guess)=2)/判斷guess的長度是否為2,而進行特殊處理if(!strcmp(guess,rp) gamezone();/重新開始游戲if(!strcmp(guess,rt) main1();/返回主菜單while(strlen(guess)!=4)/判斷輸入的guess的長度是否為4printf(輸入無效,請重新輸入!);checkn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨街旺鋪出租合同模板
- 與孩子成長合同之一:教育規(guī)劃
- 個人住宅抵押借款合同模板
- 臨街店面租房合同模板
- 中外農(nóng)產(chǎn)品進出口貿(mào)易合同
- 中學食堂用品采購合同
- 個人與物業(yè)承包合同細則
- 個人貸款合同升級:抵押房屋保險新變化解析
- 個人就業(yè)合同樣本
- 個人向企業(yè)借款正式合同
- 全過程造價咨詢服務的質(zhì)量、進度、保密等保證措施
- 縣城屠宰場建設可行性研究報告
- 25學年六年級數(shù)學寒假作業(yè)《每日一練》
- 2025高考數(shù)學一輪復習-第8章-第3節(jié) 圓的方程【課件】
- 人文關懷在護理工作中的體現(xiàn)
- 2025年1月八省聯(lián)考高考綜合改革適應性測試-高三生物(陜西、山西、寧夏、青海卷) 含解析
- 環(huán)保行業(yè)深度研究報告
- 開工第一課安全培訓內(nèi)容
- 社會主義核心價值觀課件
- 《公路養(yǎng)護安全培訓》課件
- 湖北省石首楚源“源網(wǎng)荷儲”一體化項目可研報告
評論
0/150
提交評論