柏柯猜单词游戏课程设计报告Word文档下载推荐.docx
- 文档编号:16800964
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:51.88KB
柏柯猜单词游戏课程设计报告Word文档下载推荐.docx
《柏柯猜单词游戏课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《柏柯猜单词游戏课程设计报告Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
voidleftarm();
//左臂
voidrightarm();
//右臂
voidwaisttop();
//腰
voidleftleg();
//左腿
voidrightleg();
//右腿
};
#endif
#ifndefGUESS_H
#defineGUESS_H
usingnamespacestd;
//程序类定义
classCGuess{
private:
stringm_Word,m_word,m_worD;
//要猜的单词
stringm_DisplayWord;
//用户所见的单词
char*m_pWord1;
char*m_pWord2;
intm_Proba;
//显示单词字母个数百分比
intm_GuessNum;
//玩家猜词的机会
intm_WrongNum;
//玩家猜错的次数
intm_ChosenCounter;
//玩家猜过的字母个数
stringm_LetterChosen;
//玩家已经猜过的字母
intm_Choice;
//玩家的选择
intm_ShowNum;
//显示字母个数
intm_Length;
//所猜单词的长度
intm_LetterNum;
//单词中的字母个数
intm_i;
//循环的记数变量,使每次游戏都不一样
intm_Check;
//用户输入字母是否正确
intm_Choice2;
CGuess();
voidInitialSet();
intSaveWordFile();
intUserWord();
//玩家出词
intRndWord();
//电脑出词
voidReplaceWord();
voidisChosen(char);
voidJudge(char);
intRun();
//运行
voidGetChoice();
//得到选择
voidGame();
//游戏主要函数
voidSet();
//设置
voidpassword();
#endif
2.根据所猜单词中的字母个数,给出指定几率的提示字母,显示于单词中的正确位置。
实现该功能的函数定义如下:
voidCGuess:
:
Set()
cout<
<
"
默认的猜单词次数改为:
;
cin>
>
m_GuessNum;
while(!
cin||m_GuessNum<
4||m_GuessNum>
10)
{
cout<
"
无效输入"
<
endl
<
请再输入:
Flush(cin);
cin>
}
默认的显示字母百分数改为:
m_Proba;
cin||m_Proba<
10||m_Proba>
80)
system("
cls"
);
}
3.在进入猜单词的过程后,首先显示单词询问是开始猜单词还是修改设置,默认的修改次数为4,默认显示字符的几率为20%,若要修改这个设置,在显示菜单中选择设置选项进行修改。
InitialSet()
if(m_Choice==1){
人人对抗"
endl;
}else{
人机对抗"
cout<
---------------------------------------"
endl<
endl;
1.使用默认的值"
endl<
2.选择猜词机会"
你的选择:
m_Choice2;
cin||m_Choice2<
1||m_Choice2>
2)
if(m_Choice2==1)cout<
m_GuessNum<
if(m_Choice2==2){
你要几次猜词机会(4-10):
//输入猜词次数
while(!
10)
cout<
endl
请再输入-你要几次猜词机会(4-10):
cin>
2.选择显示字母的百分数"
m_Proba<
你要百分之几的字母显示出来(10-80):
//输入显示字母百分数
80)
请再输入-你要百分之几的字母显示出来(10-80):
4.在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上。
字符用“*”显示。
参照教材21点的程序,结合猜单词题目的要求,实现该功能的函数定义如下:
#defineN13//为任意一个字符(包括空白字符)的ASC||码值
password()
{
charstr[20];
charch;
inti=0,a=0,j=0;
请第二位玩家输入单词:
cout.flush();
//请输出缓冲区
ch=getch();
while(ch!
=13)
str[i]=ch;
if(str[i]>
=97&
&
str[i]<
=122)
'
*'
j++;
cout.flush();
ch=getch();
elseif(str[i]>
=65&
=90)
str[i]=str[i]+32;
elseif(str[i]<
=65||(str[i]>
=90&
=97)||str[i]>
=112)
*"
i++;
}a=j;
for(i=0;
i<
a;
i++)
{
m_word.replace(i,1,1,str[i]);
}
m_Word=m_word;
m_word=m_worD;
intwordcheck;
do{//检查用户输入单词是否有误
wordcheck=0;
for(inti=0;
i<
m_Word.length();
i++)
if(!
isalpha(m_Word.at(i)))//isalpha();
word.at();
{
wordcheck=1;
}
if(wordcheck==1){
无效-请第二位玩家重新输入:
password();
m_Word=m_word;
}while(wordcheck==1);
5.猜单词时,输入一个单词,判断函数改为判断输入判断的字符是否于所猜单词一一对应,将猜中的字符显示出来。
ReplaceWord(){
m_pWord1=newchar[m_Length];
strcpy(m_pWord1,m_Word.data());
m_pWord2=newchar[m_Length];
strcpy(m_pWord2,m_Word.data());
char*letterlist=newchar[m_Length];
//记录单词中的不重复字母
strcpy(letterlist,m_pWord1);
//循环得到一个记录单词所含字母的字符串letterlist
for(inti=0;
m_Length;
i++){//记录不重复字母数
for(intj=i+1;
j<
j++){
if(m_pWord2[i]==m_pWord2[j]&
m_pWord2[i]!
='
){
m_pWord2[j]='
//重复则换成星号
if(m_pWord2[i]!
letterlist[m_LetterNum]=m_pWord2[i];
m_LetterNum++;
intm_ShowNum=int(m_LetterNum*m_Proba/100.0);
//要显示的字母数,保证其大于2
if(m_LetterNum==2)m_ShowNum=1;
if(m_LetterNum>
2&
m_ShowNum<
2)m_ShowNum=2;
int*radomarray=newint[m_ShowNum];
//得到一指定长度的随机数组
intx;
srand(time(NULL));
for(i=0;
m_ShowNum;
i++){//是否有重复
x=rand()%m_ShowNum;
//不大于m_ShowNum的随机数
radomarray[i]=x;
for(intj=0;
i;
if(radomarray[i]==radomarray[j]&
i!
=j)i--;
//重复则再来一次
intre=1;
//替换指定字母的循环
i++){
if(char(m_pWord1[i])==char(letterlist[radomarray[j]])){re=0;
if(re){
m_pWord1[i]='
re=1;
m_DisplayWord=m_pWord1;
delete[]radomarray;
6.在人机对抗时,可以随机读取单词,也可以选择向单词库输入单词,同时,将库中的单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。
三.程序的使用说明
**我们一起来猜单词吧!
HANGMAN游戏!
!
**
让在一开始的界面开始,会出现如下的界面:
制作者:
柏柯
指导教师:
***************************************
1人人对抗
2人机对抗
3添加单词
4设置游戏
5退出游戏
按1进入人人对抗
开始出现初始设置界面
1使用默认的值
2选择猜词机会
选择后继续进入设置界面
2选择显示字母的百分数
设置完成后出现:
请玩家二输入单词(输入的单词以星号显示)
输入完成后由玩家一进行游戏,之后退到主界面
按2进入人机对抗
进入设置界面(同1过程)
可以选择默认的值或更改猜词机会和显示字母百分数
进行游戏(注释:
电脑从word.txt中随机抽选词语并根据进行的设置进行游戏)
按3向单词库添加单词
添加任何单词,可多次添加。
可显示单词个数。
按4进行游戏设置
可以修改系统默认的猜词机会和显示字母百分数
按5退出游戏
其结构图如图所示
五、退出游戏
四.程序设计中遇到的问题和解决方法
1、人人对抗中,要求实现第二位玩家输入单词后,屏幕不显示该单词而显示星号“*”。
参照教材中二十一点程序的做法,实现了该功能。
2、由于程序要充分体现C++面向对象的特点,游戏界面要保证友好,方便与玩家的交流,实现玩家对游戏的设置。
因此每个操作之前,都有相应的设置提示,玩家可根据需要选择默认值或者修改设置。
而每步操作之后,也都有相应的提示,如果玩家输入错误,形同会判断并且给与相应的错误提示,方便与玩家交流,提高程序的可操作性。
3、人机大战时,玩家可以选择向单词库中输入单词。
输入前后都会有相应的词库单词数目提示。
五.制作调试心得及体会
在此之前,我只学了一个学期的C++程序设计,对这门计算机语言的掌握还不够熟练,要独立完成课程呢个设计还是很有难度的。
但这个题目是游戏类型的,比较贴近生活,以前我也很喜欢吊小人的猜单词游戏,因此特别想运用所学的知识,用程序去实现它。
我按照题目要求,运用所学知识,借助教材的提示和部分程序,完成了对数据函数的封装,编写程序,调试程序。
第一次做,不免有很多不尽人意的地方。
比如说,游戏界面显得比较单调,不够友好。
每次才做完成之后还不能选择回到上级菜单,而是直接回到主菜单,还不能满足玩家随心所欲的要求。
有时候程序会莫名其妙地中断,在调试过程中也出现了不能向单词库中随机读去单词的情况。
但这毕竟是第一次,能基本完成程序的要求我还是很欣慰的。
我会将所学的C++知识尽可能多的运用。
做出更好的程序。
在此要感谢老师这么长时间来对我们的悉心指导和耐心帮助,也希望老师多多批评指正。
0916120201柏柯
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 柏柯猜 单词 游戏 课程设计 报告