c++猜单词课程设计猜单词游戏.docx
- 文档编号:6813734
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:44
- 大小:2.19MB
c++猜单词课程设计猜单词游戏.docx
《c++猜单词课程设计猜单词游戏.docx》由会员分享,可在线阅读,更多相关《c++猜单词课程设计猜单词游戏.docx(44页珍藏版)》请在冰豆网上搜索。
c++猜单词课程设计猜单词游戏
VC++课程设计报告
——猜单词游戏
VC++课程设计报告
1.功能:
课程设计题目的功能:
一个猜单词游戏。
两人游戏时,由一个玩家给出一个单词,在人与计算机游戏时,由计算机给出一个单词,另一个玩家根据组成单词的字母个数猜出单词,猜的次数可以指定,若猜不中,显示一个上吊的人形。
(1)将猜单词的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)根据所猜单词的字母个数,给出指定几率的提示字母,显示于单词中的正确位置。
(3)在进入猜单词的过程后,首先显示菜单询问是开始猜单词还是修改设置,默认的修改次数为4,默认显示字符的几率为20%,若要修改这个设置,在显示菜单中选择设置选项进行修改。
(4)在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”显示。
(5)猜单词时,输入一个单词,判断函数改为判断输入单词的字符是否与所猜单词一一对应,将猜中的字符显示出来。
(6)在人机对抗时,可以随机读取单词,也可以选择向单词库输入单词,同时,将单词库中单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。
程序设计的思想和方法
(1)类的封装
画上吊人形的类已经封装起来,这部分程序基本不用改了,主要是对人人对抗和人及对抗操作部分类的封装。
可以定义一个类的两个对象,也可以定义为一个基本类和一个派生类的对象,成员函数可根据对象的不同分别调用,数据结构如下:
ClassCGuess
{
private:
stringWord;//欲猜的单词
doubleProba;//显示字符的概率0—1
intGuessNum;//总共可猜的次数
intWrongNum;//猜错的次数
stringDisplayWord;//欲显示的单词
stringGuessWord;//第二个玩家输入猜想的单词
intnLen;//输入单词的长度
public:
CGuess();//构造函数
voidInitialSet();//修改设置值
voidInputWord();//输入单词并初始化成员函数
voidInputGuess();//接收用户所猜的单词
intJudge();//判断是否猜中,猜中返回0,猜不中返回1或-(death)
intShowDisplay();//显示单词及上吊人形,程序结束返回1
intOpenWordFile();//打开单词库,随机取出一个单词赋给Word,成功返回1
intSaveWordFile();//向单词库输入新单词,正确返回1
(2)程序主体结构的设置
该设置基本上全部修改了原程序的结构,在main函数中分别定义人人对抗和人机对抗的对象。
在键入对应的菜单选项后,进入操作函数,操作函数的参数即是对应对象的引用。
同样,若有下级菜单的函数一样用该对象的引用参数,这样,可保证对象的唯一性。
主菜单:
1.人人对抗(以人人对抗对象的引用作为参数调用子程序)
2.人机对抗(以人机对抗对象的引用作为参数调用子程序)
人人对抗菜单
1.开始猜单词
2.设置系统(即设置显示字符的概率和允许猜错的次数)
3.退出
人机对抗
1.开始猜单词
2.设置系统(即设置显示字符的概率和允许猜错的次数)
3.向单词库中添加单词
4.退出
(3)人人对抗时输入欲猜单词的隐藏
一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。
本程序在基础上还要有些限制条件,就是接收的字符必须是字母,当字幕为大写时还要转化为小写。
如果输入的不是字母要提示重新输入。
(4)C++用于处理字符串变量的新的数据类型——字符串类型(string类型)
在原程序字符串的操作中用了一种新的数据类型——String,该类型是一个字符串类,可以定义对象。
它在使用方法上和char,int类型一样,可以用来定义字符串变量,即用一个名字代表一个字符序列。
程序设计的特点
(1)增设了单词库,并且输入50个单词,以便使用。
(2)人人对抗和人机对抗时显示是否有重复字母
2.课程设计的详细设计:
程序主体结构图如下:
程序详细结构:
1.主菜单程序:
voidCGuess:
:
GetChoice(){
cout< cout<<"猜单词游戏"< cout<<"制刘健莹"< cout<<"***********************************************************"< cout< cout<<"按1人人对抗模式"< cout<<"按2人机对抗模式"< cout<<"按3退出"< cout< cout<<"***********************************************************"< cout<<"请您选择: "; cin>>Choice;//得到用户选择 while(! cin||Choice<1||Choice>3)//简查是否无效 { cout<<"无效输入"< <<"请再输入: "; Flush(cin); cin>>Choice; }//完成简查,得到有效输入,m_Choice变量的值被修改,清屏 system("cls"); } 2.子菜单程序: intCGuess: : InitialSet() { intexit=0; if(Choice==1) { cout<<"人人对抗"< cout<<"***********************************************************"< cout<<"按1开始玩游戏"< cout<<"按2修改设置值"< cout<<"按3退出"< cout< cout<<"*************************************************************"< cout<<"你的选择: "< cin>>Choice2;} else { cout<<"人机对抗"< cout<<"***********************************************************"< cout<<"按1开始玩游戏"< cout<<"按2修改设置值"< cout<<"按3向单词库输入单词"< cout<<"按4退出"< cout< cout<<"***********************************************************"< cout<<"你的选择: "< cin>>Choice2; } while(! cin||Choice2<1||Choice2>4) { cout<<"无效输入"< <<"请再输入: "; Flush(cin); cin>>Choice2; } system("cls"); if(Choice2==1)cout< if(Choice2==2){ cout<<"你要几次猜词机会(4-10): "; cin>>GuessNum;//输入猜词次数 while(! cin||GuessNum<4||GuessNum>10) { cout<<"无效输入"< <<"请再输入-你要几次猜词机会(4-10): "; Flush(cin); cin>>GuessNum; } } while(! cin||Choice2<1||Choice2>4) { cout<<"无效输入"< <<"请再输入: "; Flush(cin); cin>>Choice2; } system("cls"); if(Choice2==1)cout< if(Choice2==2){ cout<<"你要百分之几的字母显示出来(10-80): "; cin>>Proba;//输入显示字母百分数 while(! cin||Proba<10||Proba>80) { cout<<"无效输入"< <<"请再输入-你要百分之几的字母显示出来(10-80): "; Flush(cin); cin>>Proba; } } if(Choice2==3) { if(Choice==1) { exit=1; } else { SaveWordFile(); InitialSet(); } } if(Choice2==4) { exit=1; } returnexit; }3.修改默认设置程序: if(Choice2==1)cout< if(Choice2==2){ cout<<"你要几次猜词机会(4-10): "; cin>>GuessNum;//输入猜词次数 while(! cin||GuessNum<4||GuessNum>10) { cout<<"无效输入"< <<"请再输入-你要几次猜词机会(4-10): "; Flush(cin); cin>>GuessNum; } } while(! cin||Choice2<1||Choice2>4) { cout<<"无效输入"< <<"请再输入: "; Flush(cin); cin>>Choice2; } system("cls"); if(Choice2==1)cout< if(Choice2==2){ cout<<"你要百分之几的字母显示出来(10-80): "; cin>>Proba;//输入显示字母百分数 while(! cin||Proba<10||Proba>80) { cout<<"无效输入"< <<"请再输入-你要百分之几的字母显示出来(10-80): "; Flush(cin); cin>>Proba; } 4.默认的游戏设置程序: Proba=20;//显示单词字母个数百分比 GuessNum=4;//玩家猜词的机会 5.将单词输入进单词库中的函数: voidGuessGame: : saveWordFile() { intn=50,i,j; ofstreamout; out.open("words.txt"); if(! out) { cout<<"不能打开单词库"< } cout<<"单词库中有50个单词"< cout<<"向单词库中输入多少个单词"< cin>>j; cout<<"请向单词库中输入"< for(i=0;i {stringword;//输入单词 getline(cin,word); n=n+1; out< cout<<"单词库中有"< } out.close(); } 6.显示猜对的单词: voidGuessGame: : test(stringword,charletter,int&numwrong,string&temp) { staticintm; intcheck2=0;//判断输入的字符是否为组成单词的字符,正确为1 if(letter==word.at(m))//若单词中有这一个字符 { temp.replace(m,1,1,letter); check2=1; } if(check2==0)//若单词中没有这一个字符 { cout< cout<<"Wrongletter"< system("pause"); numwrong++; } if(m<(word.length()-1)){m++;} elsem=0; } 7.输出给定几率的字母: for(i=word.length()*Proba;i { temp.replace(i,1,1,'*'); } 8.游戏程序主体运行: intCGuess: : Run(){ intexit=0;//主循环是否退出的变量,1时退出 do{//主循环 system("cls");//执行系统命令清屏 GetChoice();//给出说明并得到选择 switch(Choice) { case1: Game();//与人对战 break; case2: Game();//与电脑对战 break; case3: cout<<"再见"< exit=1; break; default: cout<<"无效输入-请再输入"< } }while(exit! =1);//退出主循环 system("pause");//执行系统命令: 暂停 return0; }9.在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。 #defineN13//为任意一个字符(包括空白字符)的ASC||码值 voidCGuess: : password() { charstr[20]; charch; inti=0,a=0,j=0; stringword,Word,worD; cout<<"请第二位玩家输入单词: "< cout.flush();//请输出缓冲区 ch=getch(); while(ch! =13) { str[i]=ch; if(str[i]>=97&&str[i]<=122) { cout<<'*';j++; cout.flush(); ch=getch(); } elseif(str[i]>=65&&str[i]<=90) { str[i]=str[i]+32;j++; cout<<'*'; cout.flush(); ch=getch(); } elseif(str[i]<=65||(str[i]>=90&&str[i]<=97)||str[i]>=112) { cout<<"*"; cout.flush(); ch=getch(); } i++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 单词 课程设计 游戏
![提示](https://static.bdocx.com/images/bang_tan.gif)