




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、成績(jī) 課程設(shè)計(jì)報(bào)告 題 目 24點(diǎn)游戲 課 程 名 稱(chēng) 軟件項(xiàng)目實(shí)踐(二) 院 部 名 稱(chēng) 信息技術(shù)學(xué)院 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) m11計(jì)算機(jī)科學(xué)與技術(shù)(專(zhuān)轉(zhuǎn)本)學(xué) 生 姓 名 王蕾 學(xué) 號(hào) 1121412006 課程設(shè)計(jì)地點(diǎn) 校內(nèi)實(shí)驗(yàn)室 課程設(shè)計(jì)學(xué)時(shí) 2周(40學(xué)時(shí)) 指 導(dǎo) 教 師 沈 奇 金陵科技學(xué)院教務(wù)處制課程設(shè)計(jì)報(bào)告目錄一、實(shí)驗(yàn)?zāi)康暮鸵?二、實(shí)驗(yàn)儀器和設(shè)備2三、實(shí)驗(yàn)過(guò)程2四、實(shí)驗(yàn)結(jié)果與分析16五、實(shí)驗(yàn)心得18 一、實(shí)驗(yàn)?zāi)康暮鸵?實(shí)驗(yàn)?zāi)康?) 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;2) 初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等
2、基本方法和技能;3) 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;4) 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā)。5) 培養(yǎng)快速學(xué)習(xí)新的知識(shí),并在項(xiàng)目中使用的能力。2實(shí)驗(yàn)要求設(shè)計(jì)并實(shí)現(xiàn)24點(diǎn)游戲,滿足以下基本要求: 運(yùn)行系統(tǒng)后,用戶登錄,輸入用戶名后,可以進(jìn)入游戲,或查看英雄榜。 玩家開(kāi)始游戲后,系統(tǒng)隨機(jī)產(chǎn)生四個(gè)1-13的數(shù),分別代表13張牌。提示玩家輸入算式。判斷玩家輸入的表達(dá)式是否合法,其中算式中的四個(gè)數(shù)字只能是程序所給的四個(gè)數(shù)字。當(dāng)玩家正確輸入算式后,運(yùn)用“用堆棧求解表達(dá)式”的原理,求出結(jié)果并判斷是否為24,得出用戶是輸是贏的結(jié)果。 如果用戶贏,計(jì)算其所用時(shí)間(從輸入
3、算式開(kāi)始計(jì)算,直至輸入算式結(jié)束),并與英雄榜中成績(jī)進(jìn)行比較。可以進(jìn)入英雄榜的,則需更新英雄榜。英雄榜只按成績(jī)降序記錄1-5名相關(guān)信息。二、實(shí)驗(yàn)儀器和設(shè)備microsoft windowsxp / windows 7turbo c/visual c+三、實(shí)驗(yàn)過(guò)程(一)項(xiàng)目計(jì)劃 11 總體介紹 24點(diǎn)游戲是一種使用撲克牌來(lái)進(jìn)行的益智的游戲,游戲內(nèi)容為:從113中,任意抽取4張牌,運(yùn)用加、減、乘、除和括號(hào)等運(yùn)算符把牌面上的數(shù)進(jìn)行運(yùn)算得到24,每個(gè)數(shù)都必須運(yùn)算,并且只能運(yùn)算一次,運(yùn)算符可多次重復(fù)使用。1.2 參考文獻(xiàn)1算法與數(shù)據(jù)結(jié)構(gòu)用c語(yǔ)言描述,唐策善編著,高等教育出版社 20082數(shù)據(jù)結(jié)構(gòu) (c語(yǔ)言
4、版),嚴(yán)蔚敏等編著, 清華大學(xué)出版社 20043數(shù)據(jù)結(jié)構(gòu)實(shí)用教程(第二版),徐孝凱編著,清華大學(xué)出版社 20064計(jì)算機(jī)程序設(shè)計(jì)技巧第一、三卷,d.e.knuth著,管紀(jì)文譯,國(guó)防出版社5fundamentals of data structures,fulls horo-witz&sartaj sahnt6.數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)(中譯本),程惟寧譯,新時(shí)代出版社(二)需求分析21 需求概述分析 1)輸出的判定和四位數(shù)字的類(lèi)型: 在輸出的時(shí)候?qū)ψ詈蠼Y(jié)果等于24的判別,因?yàn)榭紤]到有除法,有可能中途 結(jié)果可能會(huì)出現(xiàn)不能整除的情況與小數(shù),所以輸出的四個(gè)數(shù)都設(shè)為float型,且輸出判定的時(shí)候用近似判定
5、法,而不直接寫(xiě)讓最后結(jié)果等于24(詳情見(jiàn)算法)。2)括號(hào)問(wèn)題的處理: 對(duì)于括號(hào)問(wèn)題,我規(guī)定對(duì)每一步的計(jì)算表達(dá)式,除了*之外,+,-,都加上括號(hào),即讓程序按自己規(guī)定的方向執(zhí)行,輸出的括號(hào)只是讓人能看懂,其實(shí)在運(yùn)算時(shí)不起作用(詳情見(jiàn)算法)。22 輸入輸出的要求輸入的運(yùn)算符只能是+、-、*、/、(、)這六個(gè),輸入的整數(shù)必須是程序隨機(jī)產(chǎn)生的那四個(gè)數(shù),而且每個(gè)數(shù)只能用一次。23 概要設(shè)計(jì) 功能模塊圖24算法游戲隨機(jī)發(fā)牌輸入求解表達(dá)式計(jì)算表達(dá)式判斷表達(dá)式的正誤 (三)面向?qū)ο蠓治?.1 用例圖 登入查看英雄榜用戶用例圖退出3.2 總體流程圖 開(kāi)始開(kāi)始界面選擇事件登入輸入用戶名和密碼與數(shù)據(jù)庫(kù)信息進(jìn)行檢測(cè)普通
6、用戶數(shù)據(jù)進(jìn)入普通用戶界面選擇事件切換用戶進(jìn)入游戲退出游戲數(shù)據(jù)不存在退出退出查看英雄榜3.3游戲流程圖開(kāi)始進(jìn)入游戲開(kāi)始界面輸入表達(dá)式計(jì)算是否=24?顯示congratulationsery good顯示input any key,hint answer.go on or exit ?退出nnyy(四)詳細(xì)設(shè)計(jì) 4.1 界面要求 要求有合理的界面,用戶可以讀懂看清程序?qū)⒁龅氖虑椋⒖梢栽谝徊揭徊降膱?zhí)行時(shí)可以有一些提示,這樣用戶可以繼續(xù)使用。4.2 功能邏輯設(shè)計(jì)在設(shè)計(jì)這個(gè)程序之前,我把這個(gè)程序分為多塊,它們分別為:1) 顯示登錄界面 玩家輸入用戶名和密碼,進(jìn)入游戲2) 顯示游戲界面 隨機(jī)產(chǎn)生4個(gè)數(shù)
7、; 提示輸入表達(dá)式; 玩家輸入表達(dá)式,用棧存儲(chǔ)起來(lái); 判斷輸入是否合法,四個(gè)數(shù)是不是隨機(jī)產(chǎn)生的四個(gè); 給出結(jié)果。3) 顯示游戲界面 用戶根據(jù)提示,選擇進(jìn)入查看英雄榜; 4.3存儲(chǔ)結(jié)構(gòu)1)人算24點(diǎn)時(shí):使用的是窮舉法,對(duì)應(yīng)一組數(shù)字,找出有可能的情況。 2)計(jì)算機(jī)算24點(diǎn)時(shí):采用單鏈表作為存儲(chǔ)結(jié)構(gòu),使用棧來(lái)進(jìn)行表達(dá)式求值的原理實(shí)現(xiàn)。4.4使用說(shuō)明例1:顯示: 7 7 2 5 則您可以輸入表達(dá)式: 2*5+7+7. 回車(chē)顯示: congratulations 例2.顯示: 3 12 2 6 則您可以輸入表達(dá)式: 2*3+6+12.回車(chē)顯示: congratulations例3. 顯示:10 9 10
8、 10則您可以輸入表達(dá)式:?回車(chē)顯示:input any key,hint answer.附: 1)當(dāng)玩家不會(huì)游戲時(shí),可以輸入?,游戲會(huì)給出答案;但有的四個(gè)數(shù)字不能算出24點(diǎn),所以直接進(jìn)入下個(gè)游戲。2)游戲存在著許多不足之處,比如沒(méi)有注冊(cè)功能,沒(méi)有管理員的功能,所以不能進(jìn)行對(duì)用戶的管理,修改,添加等操作。 (五)編碼系統(tǒng)主要功能代碼1) /*進(jìn)入游戲*/void game()/*進(jìn)入游戲*/ int i,j,k,t,again,res,flag;char c;float num4;again=1; clock_t start, finish;double duration,n;while(ag
9、ain=1) system("cls");printf("tt *n");printf("tt * *n");printf("tt * 24game *n");printf("tt * *n");printf("tt *n"); printf("nntt "); srand(time(0); /*獲取隨機(jī)種子使得每次隨機(jī)的值不同*/ for(i=0;i<4;i+) numi=(float)(rand()%13); /*獲取13以內(nèi)的隨機(jī)數(shù)值*/ fo
10、r(i=0;i<4;i+) printf("%2.0ft",numi); /*輸出4個(gè)隨機(jī)數(shù)值*/ printf("nn");start = clock(); self();/*自己算*/ finish = clock(); duration = (double)(finish - start) / clocks_per_sec; if(result=24) printf("tt congratulations!the correct answer.nn"); if(j<10) strcpy(herosj.name ,te
11、); strcpy(herosj.sex ,temp1.sex); herosj.time =duration; j+; else n=heros0.time; for(i=0;i<10;i+) if(herosi.time>n) herosi.time=n; j=i; strcpy( ,); strcpy(herosj.sex ,temp1.sex); herosj.time =duration; input_hero(); /*向英雄榜文件里寫(xiě)入信息*/ else printf("tt input any ke
12、y,hint answer.nn");c=getch();if(c) for (i=0;i<4;i+) for (j=0;j<4;j+) if (j!=i) for (k=0;k<4;k+)if (k!=j && k!=i) for (t=0;t<4;t+) if (t!=i && t!=j && t!=k) res=treat(numi,numj,numk,numt); /*確保每次經(jīng)排列后傳遞的數(shù)不可能相同*/ if (res=0) printf ("tt no answer !n");
13、printf ("ntt 1: go ontt2: exitn");printf ("ntt please select (1 or 2):n");c=getchar();c=getchar();switch(c) case '1': again=1;break; case '2': c=getchar();users();break;2) /*將表達(dá)式壓入棧中*/void calculate(char *p,s &s1) int i=strlen(p),m,n; while(i>=0) if(pi>=
14、'0'&&pi<='9')push(s1,pi-'0'); else switch(pi) case'*':pop(s1,m);pop(s1,n);push(s1,m*n);break; case'+':pop(s1,m);pop(s1,n);push(s1,m+n);break; case'-':pop(s1,m);pop(s1,n);push(s1,m-n);break; case'/':pop(s1,m);pop(s1,n);push(s1,m/n);br
15、eak; i-; pop(s1,m); result=m; printf("ntt yun suan jie guo shi:%dnn",m);3) /*判斷運(yùn)算符級(jí)別函數(shù);*/int f(char c) int f=-1; switch(c) case'+': case'-':f=1;break; case'*': case'/':f=2;break; default:f=0;break; return f;4) /*判斷字符是否為操作符*/bool operator(char c) if(c='+&
16、#39;|c='-'|c='*'|c='/') return 1; else return 0;5) /*將中綴表達(dá)式轉(zhuǎn)化為前綴表達(dá)式*/void convert(char *s,char *p) char stack100; int top=0,j=0, len=0; printf("ttshu ru qiu jie biao da shi :"); scanf("%s",s); if(s0=')') printf("tt error input!exit.n"); u
17、sers(); else while(slen!='0') len+; for(int i=len-1;i>=0;) if(si>=48 && si<=57) pj=si; j+; if(si=')') /*假如是回括號(hào),將它壓棧。*/ top+; stacktop=si; while(operator(si) if(top=0|stacktop=')'|f(si)>=f(stacktop) top+; stacktop=si; break; else pj=stacktop; top-;j+; if(si
18、='(') /*假如是開(kāi)括號(hào),棧中運(yùn)算符逐個(gè)出棧并輸出,直到遇到閉括號(hào)。閉括號(hào)出棧并丟棄。*/ while(stacktop!=')') pj=stacktop; top-;j+; top-; i-; while(top!=0)/*假如輸入完畢,棧中剩余的所有操作符出棧并加到輸入串中*/ pj=stacktop; j+; top-; pj='0' i=-j; for(j=i;j>=i/2;j-) char t; t=pj;pj=pi-j;pi-j=t; 6) /*用戶自己算24點(diǎn)*/void self() char p100; char p
19、1100; convert(p,p1); s s1; initial(s1); calculate(p1,s1);int treat(float a,float b,float c,float d) int i,j,k;float sum1,sum2,sum3;for (i=0;i<4;i+) for (j=0;j<6;j+) for (k=0;k<6;k+) if(!(i=3&&b=0)&&(!(j=3&&c=0)&&(!(k=3 &&d=0) sum1=myf(i,a,b); sum2=myf
20、(j,sum1,c); sum3=myf(k,sum2,d); if(fabs(sum3-24)<0.1) temp+; myprint(1,i,j,k,a,b,c,d); if(k=2) sum1=myf(i,a,b); sum2=myf(j,c,d); sum3=sum1*sum2;if(fabs(sum3-24)<0.1) temp+; myprint(2,i,j,k,a,b,c,d); if(k=3) sum1=myf(i,a,b); sum2=myf(j,c,d); if(sum2!=0) sum3=sum1/sum2;if (fabs(sum3-24)<0.1)
21、temp+; myprint(3,i,j,k,a,b,c,d); if (temp=0) return 0;else return 1;float myf(int flag,float m,float n)if(flag=0) return (m+n);if(flag=1) return (m-n);if(flag=2) return (m*n);if(flag=3) if(n=0) return 30000; else return (m/n);if(flag=4) return (n-m);if(flag=5) if(m=0) return 30000; else return (n/m)
22、;return 0;void myprint(int type,int i,int j,int k,float a,float b,float c,float d)char sigle6; sigle0='+' sigle1='-' sigle2='*' sigle3='/' sigle4='-' sigle5='/'if(type=1) if(j=4 | j=5) if (k=4 | k=5) printf("tt %2.0f %c (%2.0f %c (%2.0f %c %2.0f)
23、=24n",d,siglek,c,siglej,a,siglei,b);else printf("tt (%2.0f %c (%2.0f %c %2.0f) %c %2.0f =24n",c,siglej,a,siglei,b,siglek,d); else if(k=4 | k=5) printf("tt %2.0f %c (%2.0f %c %2.0f) %c %2.0f) =24n",d,siglek,a,siglei,b,siglej,c); else printf("tt (%2.0f %c %2.0f) %c %2.0f) %c %2.0f =24n",a,siglei,b,siglej,c,siglek,d); if(type=2 | type=3) printf("tt (%2.0f %c %2.0f) %c (%2.0f %c %2.0f) =24n",a,siglei,b,siglek,c,siglej,d);四、實(shí)驗(yàn)結(jié)果與分析1 系統(tǒng)各模塊的運(yùn)行界面(1) 運(yùn)算正確:(2) 沒(méi)有運(yùn)算結(jié)果(3) 運(yùn)算錯(cuò)誤:2系統(tǒng)性能分析 通過(guò)該游戲系統(tǒng),我們將以前人們通過(guò)手動(dòng)算24點(diǎn)的游
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- iceshelf對(duì)混合層分層的影響-洞察闡釋
- 小學(xué)五年級(jí)上冊(cè)安全工作計(jì)劃(18篇)
- 車(chē)輛掛靠汽車(chē)美容養(yǎng)護(hù)合作協(xié)議范本
- 產(chǎn)業(yè)園區(qū)場(chǎng)地預(yù)租及招商引資合同
- 高科技園區(qū)場(chǎng)地?zé)o償租賃協(xié)議
- 車(chē)庫(kù)及車(chē)位租賃管理服務(wù)協(xié)議
- 2025電子產(chǎn)品購(gòu)銷(xiāo)版合同
- 2025員工勞動(dòng)合同范本
- 2025合同范本企業(yè)合作運(yùn)營(yíng)協(xié)議模板
- 2025年上海市物業(yè)服務(wù)合同示范文本
- 國(guó)開(kāi)電大-工程數(shù)學(xué)(本)-工程數(shù)學(xué)第4次作業(yè)-形考答案
- 后張法預(yù)應(yīng)力混凝土梁預(yù)制施工工藝標(biāo)準(zhǔn)
- 《老年護(hù)理》課程標(biāo)準(zhǔn)
- 肺癌質(zhì)量控制指標(biāo)(2023年版)
- GB/T 42508-2023投資項(xiàng)目風(fēng)險(xiǎn)評(píng)估指南
- 5、腫瘤細(xì)胞生物學(xué)
- 2B英語(yǔ)單詞默寫(xiě)unit1~8譯林版二年級(jí)下冊(cè)英語(yǔ)下載打印
- 等級(jí)保護(hù)技術(shù)方案三級(jí)
- 5異常精彩實(shí)例
- 發(fā)生輸液反應(yīng)時(shí)的應(yīng)急預(yù)案及處理演示文稿
- 2023年江西二造《建設(shè)工程造價(jià)管理基礎(chǔ)知識(shí)》高頻核心題庫(kù)300題(含解析)
評(píng)論
0/150
提交評(píng)論