




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程設計名稱:猜數字游戲的分析與實現(xiàn)目錄一 游戲說明二 總體設計三 程序代碼四 運行結果五 附錄文檔一 游戲說明1使用說明(1)開始功能鍵選擇 1:開始游戲2:查看排行榜3:查看幫助4:清除排行榜5 :等級設定(2)系統(tǒng)將提交的數與它自動產生的數進行比較,輸出結果“*A*B”形式。其中A代表數字正確相應位置也正確,B代表數字正確但位置不正確。如:1A3B表示游戲者有1個數字的位置正確且數值也正確,除此以外,游戲者還猜對了3個數字,但位置不對,即游戲者已經猜出4位數據,但有3個數據位置不對2程序說明書(1)程序的功能說明:猜數字游戲是一個運行在Windows平臺下的小型游戲軟件,依據猜數字游戲的基本規(guī)則,給用戶進行成績排行,并可以隨著玩家的游戲記錄進行更新。游戲用戶可以選擇開始游、排行榜查看、幫助等主要功能。當用戶選擇開始游戲時,系統(tǒng)會讓用戶逐次猜數字,用戶每次猜數字后系統(tǒng)會給出本次猜數字的結果提示,如位置和數字都正確的數字個數、數字正確但位置不正確的數字個數。如果用戶猜數字的次數超過10次,則提示用戶游戲失敗,如果在10次之內猜出4個數字和正確的順序,則提示用戶猜數字成功,并到排行榜中進行比較,如果排名在前一名,則計入排行榜中,以便其他用戶查看。在排行榜查看功能中,用戶可以查看當前的游戲排行,如有新的記錄產生,則插入到排行榜中,并把排行榜中位次最末的記錄擠出排行榜。在幫助模塊,用戶可以查看游戲規(guī)則,當熟悉規(guī)則后可以退出幫助模塊。(2)程序的設計說明:排行榜中存放玩家信息和成績,排行榜對應record文件。如刪除該文件,則調用系統(tǒng)后,會初始化排行榜,重新建立該文件,并設置初始的玩家姓名和游戲記錄。3 軟件可以實現(xiàn)的基本功能(1)游戲區(qū):玩家可以在游戲區(qū)逐次猜數字,系統(tǒng)給出玩家每次猜數字后的提示,包括數值、位置均正確的數字個數和數值正確但位置不正確的數字個數。(2)刷新排行榜:當玩家成功完成一輪猜數字游戲后,可通過和排行榜中相應記錄的比較判斷玩家是否可以進入排行榜,進入排行榜的資格游戲成績在前五名的玩家。(3)查看排行榜:玩家可以查看當前排行榜中的排名順序,從而確定自己的游戲目標。排行榜的查看按一定順序顯示給用戶,便于查看。(4)清除排行榜:玩家可以選擇清除排行榜功能,使得排行榜上的玩家姓名和玩家游戲記錄從系統(tǒng)中清除,只留下系統(tǒng)默認的玩家名(player)和系統(tǒng)默認記錄10次。(5)幫助:玩家通過幫助功能了解游戲規(guī)則和排行榜設置規(guī)則。4模塊設計說明(1).游戲區(qū)模塊該模塊為玩家提供猜數字游戲的主體功能,由系統(tǒng)自動產生4個隨機排列的整數,并給用戶10次機會猜測數字的數值和排列順序。如果用戶在10次之內沒有猜出正確的結果,則提示用戶游戲失敗,否則提示用戶猜數字成功,并調用產生新記錄模塊對玩家游戲成績進行處理。流程圖如下:系統(tǒng)模塊結構圖產生原始數字:由系統(tǒng)產生4個隨機數,并按任意順序排列,作為游戲的原始數字供玩家進行猜數字游戲。游提示:提示用戶數值和位置全對的數字個數,和只有數值但位置不對的數字個數。原始數字顯示:當用戶在10次之內仍未能猜出原始數字和順序時,系統(tǒng)提示玩家失敗,并給玩家顯示出原始數字和順序。游戲區(qū)模塊功能圖(2)、排行榜模塊該模塊為玩家提供排行榜的瀏覽和清除功能,包括按玩家成績順序瀏覽、按玩家姓名瀏覽和清除排行榜3個子功能。按玩家成績順序瀏覽子功能中,將玩家的姓名、游戲成績按猜數字次數從少到多的順序列表顯示,即將玩家記錄從高到底顯示。按玩家姓名瀏覽的子功能中,為了玩家便于查找到自己的游戲成績,將玩家的姓名和猜數字次數記錄按照玩家姓名的字母順序列表顯示。清除排行榜:當用戶選擇清除排行榜功能時,系統(tǒng)會將所有玩家的歷史游戲記錄和玩家姓名一起從排行榜中清除,在排行榜中只留下默認的游戲記錄和默認的玩家姓名,即系統(tǒng)默認玩家姓名player和系統(tǒng)默認記錄10次。游戲控制模塊功能圖(3)新記錄模塊該模塊的功能是當玩家成功完成游戲時,判斷用戶可否進入排行榜,如果可以進入,則刷新排行榜中的記錄,將當前玩家的游戲記錄寫入排行榜,并將排行榜目前結果顯示給用戶。產生新記錄模塊功能圖(4)讀取最好記錄模塊讀取最好記錄模塊的主要功能是當用戶選擇游戲開始選項時,首先提示用戶目前排行榜中的最游戲記,如果目前沒有排行的玩家記錄,則初始化排行榜,給出系統(tǒng)默認的玩家姓名和默認的游戲記錄。如果目前排行榜中有玩家記錄,則判斷出最好記錄顯示給用戶。產生新記錄模塊功能圖(5)幫助模塊幫助模塊提供的功能是當玩家選項為幫助功能對應的選項數字時,進入幫助模塊,給出用戶猜數字的游戲規(guī)則和游戲中相關提示的含義。(6)系統(tǒng)總流程圖:二 總體設計1 要求(1)要求使用多文件方式實現(xiàn)設計;(2)要求在各個文件內實現(xiàn)結構化設計;(3)每個模塊作為一個單獨的文件。 2 文件及函數組成源文件函數名或其他成分 功能 record.h ASK宏定義結構聲明結構聲明庫函數及函數原型聲明 game_ control.cGame_rank設置游戲等級Game_explain輸出游戲說明game_ register.cTiptop_record記錄最高分Tiptop_output輸出最佳排行game.cGame_main開始游戲中心Build_number獲取系統(tǒng)隨機數字Game_in_out獲取游戲者數據和輸出結果Time_command時間控制Game_result游戲結果處理輸出record.cmain主函數Menu_select選擇菜單manage_menu處理菜單3函數設計(1) 輸出游戲說明函數函數原型:void Game_ explain()功 能:輸出游戲規(guī)則說明參 數:void返 回 值:void要 求:說明游戲相應的按鍵,保證游戲者按照說明。(2)記錄最高分函數:函數原型:void Tiptop_register(int)功 能:把從Get_player函數得到的游戲者信息和游戲的積分信息一同保存到指定路徑的Tiptop_register.dat文件中參 數:int S;S為游戲積分返 回 值:void要 求:要求把原來有的信息替換為現(xiàn)在的信息,并且只有積分大于原有信息的第 十名,才會被以替換的方式記錄;并且是降序的方式排列的。(3)輸出最佳排行函數:函數原型:void Tiptop_out()功 能:輸出最佳排行信息參 數:void返 回 值:void要 求:沒有信息的時候輸出提示,有信息時按降序排列輸出全部信息。(4)開始游戲中心函數函數原型:void Game_main()功 能:調用Time_ control 、Build_number等函數,進行游戲的整體控制參 數:void返 回 值:void要 求:注意函數的完整性,保證游戲順利進行,注意沒有設置等級時候,默認C=1!(5)獲取游戲者游戲數據和輸出游戲進程結果函數函數原型:void Course_in_out()功 能:把游戲者猜的數據讀入內存,并且分析得出結果,并輸出結果參 數:void返 回 值:void要 求:用A或B的代碼表示本次的結果,其中A表示數值對位置也對,B表示數值對,但位置錯了!每次得到游戲者的猜測數據都要分析得出結果并輸出結果,以便游戲者的下一次猜測。(6)游戲結果處理輸出函數函數原型:void Game_result(int m )功 能:計算,得出最后游戲積分參 數:int m:整個游戲的時間 返 回 值:void要 求:按照游戲等級,設置不同的游戲積分方式。(7)時間控制函數函數原型:int Time_ control()功 能:利用和文件,得到玩游戲的總時間,計算游戲積分。參 數:void返 回 值:int Time:游戲前后的時間差異要 求:得到的時間是以秒為單位,數據是整型數據。4補充 :函數說明void Menu_select();/選擇菜單函數void Tiptop_record(int);/記錄最高分函數void Tiptop_output();/輸出最佳排行函數void Game_explain();/輸出游戲說明函數void Game_main();/開始游戲中心函數void Game_in_out();/獲取游戲數據和輸出游戲進程結果函數int Time_command();/時間控制函數void Game_result(int);/游戲結果處理輸出函數3程序代碼1 主體游戲程序 #include #include #include #define N 4#define MAX_TIMES 10/* 隨機出要猜的數字,四個數字都不相同 */void create_rand_num ( int * rand_num ) int num10=0,1,2,3,4,5,6,7,8,9;/* 每位數的范圍 */ int i; int rand_n; /* 產生的隨機數 */ int temp; 整形變量 randomize(); /* 隨機種子發(fā)生器 */ /* 產生四個不同隨機數 */ for(i=0 ;i N; i+) /* 對數組的下標來隨機,而不是對它的元素,請仔細思考 */ rand_n = rand()%(10-i) + i; *(rand_num + i) = num rand_n ; temp = numi; /* 隨機到了的數字往前推,以后的隨機中它不再出現(xiàn) */ numi = num rand_n ; num rand_n = temp; /* 判斷輸入數據的合法性 */int input_check ( int * guess ) int i=0; for(;i 9 | *(guess + i)0) printf(Error! Input the right number!n); return 0; return 1;/* 判斷玩家猜的數字,返回猜的次數,超10次返回0 */int guess_num ( int * rand_num ) int guessN; /* 玩家猜的數字 */ int times = 1; int i, j; int A, B; /* A表示數值且位置正確的個數,B只表示數值正確的個數 */ for(;times = MAX_TIMES; times+)/* 最多猜可以10次 */ printf(t%d:, times); for(i=0 ;i N; i+) /* 輸入要猜的4個數字 */ scanf(%d, &guessi); if( !input_check(guess) ) times -; continue; /* 非法輸入,重輸 */ /* 判斷用戶所猜的數字 */ A = B = 0; for(i=0 ;i N; i+) for(j=0 ;j N; j+) if(i=j & guessj = *(rand_num+i) /* 數值和位置正確 */ A +; break; else if( guessj = *(rand_num+i) ) /* 數值正確 */ B +; break; if( i = N-1 ) /* 猜對了,返回猜的次數 */ if( A=N ) printf(ntttRight!n); return times; printf(ttt%dA %dBn, A, B); return 0; /* 10次內沒猜對 */* 統(tǒng)計結果 */void result( int times , int * score ) switch( times ) case 1:case 2:case 3: printf(tVery Good!); printf(tScore +%d, 110-times*10 ); *score += 110-times*10; break; case 4:case 5:case 6: printf(tGood!); printf(tScore +%d, 100-times*10 ); *score += 100-times*10; break; case 7: printf(tPass!); printf(tScore +%d,20 ); *score += 20; break; default: printf(tCome On!); /* 是否繼續(xù)游戲 */int go_on () char c; printf(nntContinue game?(yorn):); getchar(); if(c=getchar() = y | c = Y) return 1; return 0;main() int rand_numN; /* 產生的四個隨機數 */ int times; /* 猜對結果所用的次數 */ int score = 0; /* 得分 */ int flag = 1 ; /* 繼續(xù)游戲 */ while( flag ) clrscr(); printf(tGUESS NUM GAMEtscore=%dn, score); create_rand_num ( rand_num ); times = guess_num(rand_num ); result( times , &score ); flag = go_on (); 2 游戲控制 #includerecord.h/*/ 設置游戲等級函數/*void Game_rank()FILE *fp;printf(t*n);printf(t*1:初級*n);printf(t*2:中級*n);printf(t*3:高級*n);printf(t*n);printf(t請選擇游戲等級:t);loop:scanf(%d,&C);if(C3)printf(t輸入有誤!請重新輸入:t);goto loop;if(fp=fopen(C.txt,w)=NULL)printf(打開C.txt文件失敗!);exit(1);fwrite(&C,sizeof(int),1,fp);fclose(fp);if(C=1)printf(t等級設置為初級!n);if(C=2)printf(t等級設置為中級!n);if(C=3)printf(t等級設置為高級!n);printf(n);/*/輸出游戲說明函數/*void Game_explain() printf(游戲說明:n);printf(t*n);printf(t*n);printf(t:游戲開始,系統(tǒng)隨機產生一位不重復的N位數字。N的大小與等級n);printf(t有關:n);printf(t初級:N=3t中級:N=4t高級:N=5tn);printf(t:游戲者輸入所猜的不重復數字,并按回車提交。n);printf(t提交的數據位數應與N的大小一致,當數據位數大于N時,只取前N位;n);printf(t:系統(tǒng)將提交的數與它自動產生的數進行比較,輸出結果n);printf(t“*A*B”形式。其中A代表數字正確相應位置也正確,B代n);printf(t表數字正確但位置不正確。如:1A3B表示游戲者有1個數字的位置n);printf(t正確且數值也正確,除此以外,游戲者還猜對了3個數字,但位置不n);printf(t對,即游戲者已經猜出4位數據,但有3個數據位置不對!n);printf(t:游戲者有限定次數的猜測機會,在規(guī)定次數內完成,n);printf(t則游戲成功。否則,游戲失敗。其中,猜測次n);printf(t數與等級有關:n);printf(t初級:10次t中級:9次t高級:8次。tn);printf(t:按完成游戲所用的時間和次數計算游戲者所得分數,n);printf(t游戲等級越高,猜測所用的次數越少,得分越高!n);printf(t若游戲者得分比系統(tǒng)已經保存的分數的高,將提示要求n);printf(t輸入游戲者信息,并且保存在最佳排行之中。n);printf(t:游戲者可以自行設置等級!n);printf(t*n);printf(t*n);printf(n);3Game_ register.c排行榜等相關程序 #includerecord.h/*/記錄最高分函數/*void Tiptop_record(int S)FILE *fp;tiptop n;char *week=星期天,星期一,星期二,星期三,星期四,星期五,星期六;time_t timep;struct tm *t;printf(t恭喜您!n);printf(t您獲得本游戲的最高分!n);/獲取名字printf(t請輸入您的姓名:);printf(t);scanf(%s,);/獲取時間time(&timep);t=gmtime(&timep);t-tm_year=1900+t-tm_year;t-tm_mon=1+t-tm_mon;t-tm_hour=8+t-tm_hour;n.year=t-tm_year;n.month=t-tm_mon;n.day=t-tm_mday;strcpy(n.week,weekt-tm_wday);n.hour=t-tm_hour;n.minute=t-tm_min;n.second=t-tm_sec;/獲取等級if(C=1)strcpy(n.grade,初級);if(C=2)strcpy(n.grade,中級);if(C=3)strcpy(n.grade,高級);/獲取分數n.data=S;if(C=1)if(fp=fopen(tiptop1.txt,w)=NULL)printf(t打開tiptop1.txt文件失敗!);exit(1);fwrite(&n,sizeof(struct tiptop),1,fp);fclose(fp);if(C=2)if(fp=fopen(tiptop2.txt,w)=NULL)printf(t打開tiptop2.txt文件失敗!);exit(1);fwrite(&n,sizeof(struct tiptop),1,fp);fclose(fp);if(C=3)if(fp=fopen(tiptop3.txt,w)=NULL)printf(t打開tiptop3.txt文件失敗!);exit(1);fwrite(&n,sizeof(struct tiptop),1,fp);fclose(fp);/*/輸出最佳排行函數/*void Tiptop_output()int i;FILE *fp;tiptop p,q,r;if(fp=fopen(tiptop1.txt,r)=NULL)printf(還沒有最佳排行!);exit(1);fread(&p,sizeof(struct tiptop),1,fp);fclose(fp);if(fp=fopen(tiptop2.txt,r)=NULL)printf(還沒有最佳排行!);exit(1);fread(&q,sizeof(struct tiptop),1,fp);fclose(fp);if(fp=fopen(tiptop3.txt,r)=NULL)printf(還沒有最佳排行!);exit(1);fread(&r,sizeof(struct tiptop),1,fp);fclose(fp);if(p.data=0&q.data=0&r.data=0)printf(t暫無最高分信息!);printf(n);printf(t是否直接進入游戲?刷新最佳排行信息?n);printf(t1:是t2:否n);printf(t);i=0;scanf(%d,&i);if(i=1)printf(t請設置游戲等級: n);Game_rank();Game_main();elseMenu_select();elseprintf(t最佳排行:n);printf(t等級t姓名t分數t游戲時間n);if(p.data!=0)printf(t%st%st%dt,p.grade,,p.data);printf(%d%d%dt,p.year,p.month,p.day);printf(%st%d:%d:%dn,p.week,p.hour,p.minute,p.second);if(q.data!=0)printf(t%st%st%dt,q.grade,,q.data);printf(%d%d%dt,q.year,q.month,q.day);printf(%st%d:%d:%dn,q.week,q.hour,q.minute,q.second);if(r.data!=0)printf(t%st%st%dt,r.grade,,r.data);printf(%d%d%dt,r.year,r.month,r.day);printf(%st%d:%d:%dn,r.week,r.hour,r.minute,r.second);if(p.data=0)printf(t初級暫無最高分信息!n);if(q.data=0)printf(t中級暫無最高分信息!n); if(r.data=0)printf(t高級暫無最高分信息!n);/重置最佳排行榜if(p.data!=0&q.data!=0&r.data!=0)printf(t是否重置最佳排行?n);printf(t1:是t2:否t);i=0;scanf(%d,&i);if(i=1)p.data=0;q.data=0;r.data=0;if(fp=fopen(tiptop1.txt,w)=NULL)printf(打開tiptop1.txt文件失敗!);exit(1);fwrite(&p,sizeof(struct tipto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 花卉種植的自動化與智能化技術考核試卷
- 信息系統(tǒng)監(jiān)理師考試內容展望試題及答案
- 調味品生產設備選型與維護保養(yǎng)考核試卷
- 軟件測試中的時間管理策略試題及答案
- 氣體凈化技術在飼料工業(yè)的應用考核試卷
- 網絡技術與軟件開發(fā)結合試題及答案
- 行政組織文化建設的重要性試題及答案
- 行政組織理論的教學方法對比與2025年試題及答案
- 客服大廳電腦管理制度
- 公司外幣結匯管理制度
- 臺球店員工合同范例
- 我的家鄉(xiāng)廣西百色
- 程序文件-XXX(安全閥校驗機構)(2023版)
- 散糧裝卸工藝
- 中華人民共和國產品質量法培訓
- 餐廳干股分紅協(xié)議書
- 醫(yī)院手術室凈化裝修方案
- 2024年海南省高考地理試卷(含答案)
- 《排球正面雙手墊球 移動墊球》教案
- 《菊次郎的夏天》電影賞析
- 課件:《中華民族共同體概論》第十五講:新時代與中華民族共同體建設
評論
0/150
提交評論