《C++猜單詞游戲課程設(shè)計(jì)報(bào)告(全).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《C++猜單詞游戲課程設(shè)計(jì)報(bào)告(全).doc(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、VC+課程設(shè)計(jì)報(bào)告課程:VC+課程設(shè)計(jì)系別:計(jì)算機(jī)系班級(jí):學(xué)號(hào):姓名:選題名稱:猜單詞游戲選題難易級(jí)別:A起止時(shí)間:2011.11.212011.12.22指導(dǎo)教師: 2011年 12 月15日1 程序功能介紹 這是一個(gè)猜單詞的游戲,這個(gè)猜單詞游戲分為倆種模式,一個(gè)是人人對(duì)抗模式,一種是人機(jī)對(duì)抗模式。玩家可根據(jù)自己的要求選擇不同的模式進(jìn)行游戲。 如果是倆個(gè)人玩游戲,可選擇人人對(duì)抗模式,在該模式下,先由一個(gè)玩家輸入一個(gè)單詞(該單詞只有該玩家知道),然后由另一個(gè)玩家猜單詞,猜錯(cuò)次數(shù)可以根據(jù)自己的要求改變。 如果是一個(gè)人玩游戲,可選擇人機(jī)對(duì)抗模式,在該模式下,由計(jì)算機(jī)隨機(jī)給出一個(gè)單詞,玩家根據(jù)組成單
2、詞字母的個(gè)數(shù)猜出單詞,猜錯(cuò)的次數(shù)可以指定,若在規(guī)定次數(shù)內(nèi)沒(méi)猜出單詞,顯示一個(gè)上吊的人形。2 課程設(shè)計(jì)要求1.將猜單詞的函數(shù)與相應(yīng)的數(shù)據(jù)封裝到類中,并改寫主程序,使程序簡(jiǎn)化。 2.根據(jù)所猜單詞的字母?jìng)€(gè)數(shù),給出指定幾率的提示字母,顯示于單詞中的正確位置。 3.在進(jìn)入猜單詞的過(guò)程后,首先顯示菜單詢問(wèn)是開始猜單詞還是修改設(shè)置,默認(rèn)的修改次數(shù)為4,默認(rèn)顯示字符的幾率為20%,若要修改這個(gè)設(shè)置,在菜單選項(xiàng)中選擇設(shè)置選項(xiàng)進(jìn)行修改。 4.在人人對(duì)抗時(shí),一個(gè)玩家給出單詞時(shí),單詞不顯示在屏幕上,字符用*號(hào)表示。 5.猜單詞時(shí),輸入一個(gè)單詞,判斷函數(shù)改為判斷輸入單詞的字符是否與所猜單詞一一對(duì)應(yīng),將猜中的字符顯示出來(lái)
3、。 6.在人機(jī)對(duì)抗時(shí),可以選擇隨機(jī)讀取單詞,也可以選擇向單詞庫(kù)輸入單詞,同時(shí),將單詞庫(kù)中單詞的個(gè)數(shù)顯示出來(lái),并根據(jù)單詞庫(kù)中單詞個(gè)數(shù)的多少?zèng)Q定隨機(jī)選取的范圍。3 對(duì)課程題目的分析與注釋類的封裝的關(guān)鍵代碼:class GuessGame/進(jìn)行類的封裝private:string Word;/欲猜的單詞 double Proba;/顯示字符概率 (0,1) int GuessNum;/總共可猜次數(shù) int WrongNum;/猜錯(cuò)的次數(shù) string DisplayWord;/ 欲顯示的單詞 string GuessWord;/第二個(gè)玩家輸入猜想的單詞int nLen;/ 輸入單詞的長(zhǎng)度int ch
4、oice;int option;public: int exit;int iloop;public: GuessGame();void InitialSet();/修改設(shè)置值int getChoice()return choice;void saveWordFile();/輸入單詞void play();void instruction();/主菜單void subMenu();/子菜單void usergame(int i);void compgame(int i);void drawman(int numguess,int numwrong,int i);void lchosen(char
5、 letter,string & letterchosen,int &check,int &chosencounter,int i);void test(string word,char letter,int & numwrong,string& temp);void rnd(string &word,int i);inline istream & Flush(istream & stream);GuessGame:GuessGame()Proba = 20.0 / 100;GuessNum = 4;exit = 0;iloop = 0;4 程序設(shè)計(jì)和說(shuō)明(說(shuō)明算法思想、設(shè)計(jì)思路,給出重要的、
6、關(guān)鍵的代碼) 算法思想 1)類的封裝 主要是對(duì)人人對(duì)抗和人機(jī)對(duì)抗操作部分類的封裝2)程序主體結(jié)構(gòu)的設(shè)置 主菜單:a) 人人對(duì)抗(注釋:以人人對(duì)抗對(duì)象的引用作為參數(shù)調(diào)用子程序)b) 人機(jī)對(duì)抗(注釋:以人機(jī)對(duì)抗對(duì)象的引用作為參數(shù)調(diào)用子程序)c) 退出人人對(duì)抗菜單1 開始猜單詞2 設(shè)置系統(tǒng)3 退出 人機(jī)對(duì)抗菜單1. 開始猜單詞2. 設(shè)置系統(tǒng)3. 向單詞庫(kù)添加單詞4. 退出3)人人對(duì)抗時(shí)輸入欲猜單詞的隱藏4)C+用于處理字符串變量的新的數(shù)據(jù)類型字符串類型(string類型)設(shè)計(jì)思路 進(jìn)入程序后,通過(guò)switch語(yǔ)句進(jìn)行選擇所要進(jìn)入的函數(shù),即可輸入選項(xiàng),選擇人人對(duì)抗、人機(jī)對(duì)抗、修改提示字母?jìng)€(gè)數(shù)或退出。當(dāng)
7、輸入的選項(xiàng)不符合要求時(shí),提示輸入錯(cuò)誤,請(qǐng)重新輸入。進(jìn)入人人或人機(jī)對(duì)抗后,首先詢問(wèn)是否重新設(shè)置可猜次數(shù)。默認(rèn)可猜次數(shù)為4次,若選擇修改,可將其改為4-10之間的某值。進(jìn)入游戲?qū)共糠?,人人?duì)抗時(shí),提示玩家2輸入單詞,輸入完畢后將其轉(zhuǎn)換為“*”,人機(jī)對(duì)抗時(shí),從單詞庫(kù)中隨機(jī)抽取一個(gè)單詞,以“*”的形式給出。按照設(shè)置的顯示百分率給出提示字母,并顯示在正確的位置上。玩家開始進(jìn)行猜單詞。若輸入的字母為組成單詞的字母,則顯示在正確的位置;若輸入的字母不是組成單詞的字母,則提示“wrong letter”,并逐步顯示上吊人形。將已輸入過(guò)的字母顯示在界面上方,當(dāng)玩家再次輸入已輸入字母時(shí),提示該字母已輸入過(guò),請(qǐng)重
8、新輸入。當(dāng)玩家猜出單詞或達(dá)到可猜次數(shù)時(shí),游戲結(jié)束,返回選擇菜單。若以上輸入不符合要求,重新輸入。若選擇退出選項(xiàng),則退出程序。 人人對(duì)抗 人機(jī)對(duì)抗 退出 主菜單是否修改設(shè)置?是否修改設(shè)置?是否否是 修改 修改玩家2 輸入單詞計(jì)算機(jī)抽取單詞 玩家開始猜單詞錯(cuò)對(duì) 輸出上吊人形Right【 】 返回主菜單關(guān)鍵代碼:class GuessGame/進(jìn)行類的封裝private:string Word;/欲猜的單詞 double Proba;/顯示字符概率 (0,1) int GuessNum;/總共可猜次數(shù) int WrongNum;/猜錯(cuò)的次數(shù) string DisplayWord;/ 欲顯示的單詞 s
9、tring GuessWord;/第二個(gè)玩家輸入猜想的單詞int nLen;/ 輸入單詞的長(zhǎng)度int choice;int option;public: int exit;int iloop;public: GuessGame();void InitialSet();/修改設(shè)置值int getChoice()return choice;void saveWordFile();/輸入單詞void play();void instruction();/主菜單void subMenu();/子菜單void usergame(int i);void compgame(int i);void drawm
10、an(int numguess,int numwrong,int i);void lchosen(char letter,string & letterchosen,int &check,int &chosencounter,int i);void test(string word,char letter,int & numwrong,string& temp);void rnd(string &word,int i);inline istream & Flush(istream & stream);GuessGame:GuessGame()Proba = 20.0 / 100;GuessNu
11、m = 4;exit = 0;iloop = 0;5 課程設(shè)計(jì)中遇到的問(wèn)題及解決方法在進(jìn)行類的封裝及參數(shù)調(diào)用時(shí)遇到了一些問(wèn)題通過(guò)與同學(xué)討論和查閱相關(guān)資料解決了6 課程設(shè)計(jì)中所增加的功能模塊(選做)未增加7 課程設(shè)計(jì)結(jié)果程序運(yùn)行開始界面:輸入1進(jìn)入人人對(duì)抗模式界面:輸入1開始游戲界面:玩家2輸入單詞asd后玩家1猜單詞界面:玩家1猜錯(cuò)單詞界面:玩家1用完猜的次數(shù)失敗界面:玩家1猜對(duì)單詞界面:玩家進(jìn)入人機(jī)對(duì)抗模式界面:玩家輸入3向單詞庫(kù)輸入單詞:8 還存在的不足之處由于在函數(shù)rand()中,不能保證每次抽取的隨機(jī)值都不同,即顯示字符的位置可能相同,所以給出隨機(jī)提示字母的百分率可能小于設(shè)置值。如果所
12、猜單詞中有重復(fù)字母,猜對(duì)一次只能顯示出一個(gè)。第一次運(yùn)行游戲返回主菜單后第二次要輸入倆次才有作用界面不夠清晰簡(jiǎn)潔。9. 對(duì)課程設(shè)計(jì)的感想和心得體會(huì)就編寫的程序而言,雖然能達(dá)到預(yù)期的結(jié)果,但在運(yùn)行時(shí)所需的時(shí)間比較長(zhǎng),而且總體結(jié)構(gòu)還不夠簡(jiǎn)潔,不太容易去理解。許多問(wèn)題還需要繼續(xù)研究,許多技術(shù)還需要更多的改進(jìn)。去圖書館借了不少書,也去網(wǎng)上看了些資料,只是對(duì)大概的知識(shí)有了點(diǎn)了解,但還是很難著手于寫代碼,后來(lái)就按照老師說(shuō)的,先搞清楚原理,再考慮如何去實(shí)現(xiàn)!后來(lái)又去上網(wǎng)查看相關(guān)資料,又到圖書館借了很多書看,總算有頭緒了。但在調(diào)試過(guò)程中,還是遇到了很多困難,后來(lái)通過(guò)了很多同的幫助才把問(wèn)題解決了。通過(guò)這次的課程設(shè)計(jì),讓我了解了猜單詞游戲的問(wèn)題。同時(shí)讓我更好地掌握了棧思想以及一維數(shù)組等等知識(shí),以及一些書本上沒(méi)有的東西,這對(duì)我以后的學(xué)習(xí)生涯以及將來(lái)步入社會(huì)起到很大的幫助。這次課程設(shè)計(jì)雖然花了我很多時(shí)間和精力,但很值得,因?yàn)樗鼘?duì)我能力提高起到很大幫助。這次課程設(shè)計(jì)也提醒我以前知識(shí)的匱乏,它給我敲響了警鐘,讓我意識(shí)到自己基礎(chǔ)的不扎實(shí).當(dāng)然這次實(shí)驗(yàn)還是有很多問(wèn)題的。比如程序設(shè)計(jì)的界面不夠好,一些程序并非自己所寫,而是修改某些程序而成,但這些不該,在下次課程設(shè)計(jì)時(shí)不會(huì)再發(fā)生.10