资源描述
VC+课程设计报告课程:VC+课程设计系别:计算机系班级:学号:姓名:选题名称:猜单词游戏选题难易级别:A起止时间:2011.11.212011.12.22指导教师: 2011年 12 月15日1 程序功能介绍 这是一个猜单词的游戏,这个猜单词游戏分为俩种模式,一个是人人对抗模式,一种是人机对抗模式。玩家可根据自己的要求选择不同的模式进行游戏。 如果是俩个人玩游戏,可选择人人对抗模式,在该模式下,先由一个玩家输入一个单词(该单词只有该玩家知道),然后由另一个玩家猜单词,猜错次数可以根据自己的要求改变。 如果是一个人玩游戏,可选择人机对抗模式,在该模式下,由计算机随机给出一个单词,玩家根据组成单词字母的个数猜出单词,猜错的次数可以指定,若在规定次数内没猜出单词,显示一个上吊的人形。2 课程设计要求1.将猜单词的函数与相应的数据封装到类中,并改写主程序,使程序简化。 2.根据所猜单词的字母个数,给出指定几率的提示字母,显示于单词中的正确位置。 3.在进入猜单词的过程后,首先显示菜单询问是开始猜单词还是修改设置,默认的修改次数为4,默认显示字符的几率为20%,若要修改这个设置,在菜单选项中选择设置选项进行修改。 4.在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用*号表示。 5.猜单词时,输入一个单词,判断函数改为判断输入单词的字符是否与所猜单词一一对应,将猜中的字符显示出来。 6.在人机对抗时,可以选择随机读取单词,也可以选择向单词库输入单词,同时,将单词库中单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。3 对课程题目的分析与注释类的封装的关键代码:class GuessGame/进行类的封装private:string Word;/欲猜的单词 double Proba;/显示字符概率 (0,1) int GuessNum;/总共可猜次数 int WrongNum;/猜错的次数 string DisplayWord;/ 欲显示的单词 string GuessWord;/第二个玩家输入猜想的单词int nLen;/ 输入单词的长度int choice;int option;public: int exit;int iloop;public: GuessGame();void InitialSet();/修改设置值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 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 程序设计和说明(说明算法思想、设计思路,给出重要的、关键的代码) 算法思想 1)类的封装 主要是对人人对抗和人机对抗操作部分类的封装2)程序主体结构的设置 主菜单:a) 人人对抗(注释:以人人对抗对象的引用作为参数调用子程序)b) 人机对抗(注释:以人机对抗对象的引用作为参数调用子程序)c) 退出人人对抗菜单1 开始猜单词2 设置系统3 退出 人机对抗菜单1. 开始猜单词2. 设置系统3. 向单词库添加单词4. 退出3)人人对抗时输入欲猜单词的隐藏4)C+用于处理字符串变量的新的数据类型字符串类型(string类型)设计思路 进入程序后,通过switch语句进行选择所要进入的函数,即可输入选项,选择人人对抗、人机对抗、修改提示字母个数或退出。当输入的选项不符合要求时,提示输入错误,请重新输入。进入人人或人机对抗后,首先询问是否重新设置可猜次数。默认可猜次数为4次,若选择修改,可将其改为4-10之间的某值。进入游戏对抗部分,人人对抗时,提示玩家2输入单词,输入完毕后将其转换为“*”,人机对抗时,从单词库中随机抽取一个单词,以“*”的形式给出。按照设置的显示百分率给出提示字母,并显示在正确的位置上。玩家开始进行猜单词。若输入的字母为组成单词的字母,则显示在正确的位置;若输入的字母不是组成单词的字母,则提示“wrong letter”,并逐步显示上吊人形。将已输入过的字母显示在界面上方,当玩家再次输入已输入字母时,提示该字母已输入过,请重新输入。当玩家猜出单词或达到可猜次数时,游戏结束,返回选择菜单。若以上输入不符合要求,重新输入。若选择退出选项,则退出程序。 人人对抗 人机对抗 退出 主菜单是否修改设置?是否修改设置?是否否是 修改 修改玩家2 输入单词计算机抽取单词 玩家开始猜单词错对 输出上吊人形Right【 】 返回主菜单关键代码:class GuessGame/进行类的封装private:string Word;/欲猜的单词 double Proba;/显示字符概率 (0,1) int GuessNum;/总共可猜次数 int WrongNum;/猜错的次数 string DisplayWord;/ 欲显示的单词 string GuessWord;/第二个玩家输入猜想的单词int nLen;/ 输入单词的长度int choice;int option;public: int exit;int iloop;public: GuessGame();void InitialSet();/修改设置值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 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;5 课程设计中遇到的问题及解决方法在进行类的封装及参数调用时遇到了一些问题通过与同学讨论和查阅相关资料解决了6 课程设计中所增加的功能模块(选做)未增加7 课程设计结果程序运行开始界面:输入1进入人人对抗模式界面:输入1开始游戏界面:玩家2输入单词asd后玩家1猜单词界面:玩家1猜错单词界面:玩家1用完猜的次数失败界面:玩家1猜对单词界面:玩家进入人机对抗模式界面:玩家输入3向单词库输入单词:8 还存在的不足之处由于在函数rand()中,不能保证每次抽取的随机值都不同,即显示字符的位置可能相同,所以给出随机提示字母的百分率可能小于设置值。如果所猜单词中有重复字母,猜对一次只能显示出一个。第一次运行游戏返回主菜单后第二次要输入俩次才有作用界面不够清晰简洁。9. 对课程设计的感想和心得体会就编写的程序而言,虽然能达到预期的结果,但在运行时所需的时间比较长,而且总体结构还不够简洁,不太容易去理解。许多问题还需要继续研究,许多技术还需要更多的改进。去图书馆借了不少书,也去网上看了些资料,只是对大概的知识有了点了解,但还是很难着手于写代码,后来就按照老师说的,先搞清楚原理,再考虑如何去实现!后来又去上网查看相关资料,又到图书馆借了很多书看,总算有头绪了。但在调试过程中,还是遇到了很多困难,后来通过了很多同的帮助才把问题解决了。通过这次的课程设计,让我了解了猜单词游戏的问题。同时让我更好地掌握了栈思想以及一维数组等等知识,以及一些书本上没有的东西,这对我以后的学习生涯以及将来步入社会起到很大的帮助。这次课程设计虽然花了我很多时间和精力,但很值得,因为它对我能力提高起到很大帮助。这次课程设计也提醒我以前知识的匮乏,它给我敲响了警钟,让我意识到自己基础的不扎实.当然这次实验还是有很多问题的。比如程序设计的界面不够好,一些程序并非自己所写,而是修改某些程序而成,但这些不该,在下次课程设计时不会再发生.10
展开阅读全文