猜单词游戏课程设计报告.docx

上传人:b****8 文档编号:30768558 上传时间:2023-08-23 格式:DOCX 页数:14 大小:18.58KB
下载 相关 举报
猜单词游戏课程设计报告.docx_第1页
第1页 / 共14页
猜单词游戏课程设计报告.docx_第2页
第2页 / 共14页
猜单词游戏课程设计报告.docx_第3页
第3页 / 共14页
猜单词游戏课程设计报告.docx_第4页
第4页 / 共14页
猜单词游戏课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

猜单词游戏课程设计报告.docx

《猜单词游戏课程设计报告.docx》由会员分享,可在线阅读,更多相关《猜单词游戏课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

猜单词游戏课程设计报告.docx

猜单词游戏课程设计报告

1.VC++课程设计报告

一.程序功能

一个猜单词游戏。

两人进行游戏时,由一个玩家给出一个单词,在人与计算机游戏时候,由计算机给出一个单词,另一个玩家根据组成单词的字母个数猜出单词,猜的次数可以指定,若猜不出,显示一个上吊的人形。

二.课程设计要求的实现

1.将猜单词的函数和相应的数据封装到类中,并改写了程序,使程序简单化。

根据所学的类的知识,我将画上吊小人的类体和猜单词的类体定义如下:

实现类数据的封装。

//draw类定义

#ifndefDRAW_H//检测是否已经包含

#defineDRAW_H

classdraw

{

public:

draw();//构造函数

//成员函数

voidrope();//绳子

voidhead();//头

voidneck();//颈

voidleftarm();//左臂

voidrightarm();//右臂

voidwaisttop();//腰

voidleftleg();//左腿

voidrightleg();//右腿

};

#endif

#ifndefGUESS_H

#defineGUESS_H

usingnamespacestd;

//程序类定义

classCGuess{

private:

stringWord,word,worD;//要猜的单词

stringDisplayWord;//用户所见的单词

char*pWord1;

char*pWord2;

intProba;//显示单词字母个数百分比

intGuessNum;//玩家猜词的机会

intWrongNum;//玩家猜错的次数

intChosenCounter;//玩家猜过的字母个数

stringLetterChosen;//玩家已经猜过的字母

intChoice;//玩家的选择

intShowNum;//显示字母个数

intLength;//所猜单词的长度

intLetterNum;//单词中的字母个数

inti;//循环的记数变量,使每次游戏都不一样

intCheck;//用户输入字母是否正确

intChoice2;

public:

CGuess();

voidInitialSet();

intSaveWordFile();

intUserWord();//玩家出词

intRndWord();//电脑出词

voidReplaceWord();

voidlChosen(char);

voidtest(char);

intRun();//运行

voidGetChoice();//得到选择

voidGame();//游戏主要函数

voidSet();//设置

voidpassword();

};

#endif

2.根据所猜单词中的字母个数,给出指定几率的提示字母,显示于单词中的正确位置。

实现该功能的函数定义如下:

voidCGuess:

:

Set()

{

cout<<"默认的猜单词次数改为:

";

cin>>GuessNum;

while(!

cin||GuessNum<4||GuessNum>10)

{

cout<<"无效输入"<

<<"请再输入:

";

Flush(cin);

cin>>GuessNum;

}

cout<<"默认的显示字母百分数改为:

";

cin>>Proba;

while(!

cin||Proba<10||Proba>80)

{

cout<<"无效输入"<

<<"请再输入:

";

Flush(cin);

cin>>Proba;

}

system("cls");

}

3.在进入猜单词的过程后,首先显示单词询问是开始猜单词还是修改设置,默认的修改次数为4,默认显示字符的几率为20%,若要修改这个设置,在显示菜单中选择设置选项进行修改。

实现该功能的函数定义如下:

voidCGuess:

:

InitialSet()

{

if(m_Choice==1){

cout<<"人人对抗"<

}else{

cout<<"人机对抗"<

}

cout<<"---------------------------------------"<

cout<<"1.开始游戏"<

cout<<"2.选择猜词机会"<

cout<<"你的选择:

"<

cin>>Choice2;

while(!

cin||Choice2<1||Choice2>2)

{

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;

}

}

cout<<"1.开始游戏"<

cout<<"2.选择显示字母的百分数"<

cout<<"你的选择:

"<

cin>>Choice2;

while(!

cin||Choice2<1||Choice2>2)

{

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.在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上。

字符用“*”显示。

参照教材21点的程序,结合猜单词题目的要求,实现该功能的函数定义如下:

#defineN13//为任意一个字符(包括空白字符)的ASC||码值

voidCGuess:

:

password()

{

charstr[20];

charch;

inti=0,a=0,j=0;

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++;

}a=j;for(i=0;i

{

word.replace(i,1,1,str[i]);

}

Word=word;word=worD;

intwordcheck;

do{//检查用户输入单词是否有误

wordcheck=0;

for(inti=0;i

if(!

isalpha(Word.at(i)))//isalpha();word.at();

{

wordcheck=1;

}

if(wordcheck==1){

cout<<"无效-请第二位玩家重新输入:

";

password();Word=word;word=worD;

}

}while(wordcheck==1);

}

5.猜单词时,输入一个单词,判断函数改为判断输入判断的字符是否于所猜单词一一对应,将猜中的字符显示出来。

实现该功能的函数定义如下:

voidCGuess:

:

ReplaceWord(){

pWord1=newchar[Length];

strcpy(pWord1,Word.data());

pWord2=newchar[Length];

strcpy(pWord2,Word.data());

char*letterlist=newchar[Length];//记录单词中的不重复字母

strcpy(letterlist,pWord1);

//循环得到一个记录单词所含字母的字符串letterlist

for(inti=0;i

for(intj=i+1;j

if(pWord2[i]==pWord2[j]&&pWord2[i]!

='*'){

pWord2[j]='*';//重复则换成星号

}

}

if(pWord2[i]!

='*'){

letterlist[LetterNum]=pWord2[i];

LetterNum++;

}

}

intShowNum=int(LetterNum*Proba/100.0);//要显示的字母数,保证其大于2

if(LetterNum==2)ShowNum=1;

if(LetterNum>2&&ShowNum<2)ShowNum=2;

int*radomarray=newint[ShowNum];//得到一指定长度的随机数组

intx;

srand(time(NULL));

for(i=0;i

x=rand()%ShowNum;//不大于m_ShowNum的随机数

radomarray[i]=x;

for(intj=0;j

if(radomarray[i]==radomarray[j]&&i!

=j)i--;//重复则再来一次

}

}

 

intre=1;//替换指定字母的循环

for(i=0;i

for(intj=0;j

if(char(pWord1[i])==char(letterlist[radomarray[j]])){re=0;}

}

if(re){

pWord1[i]='*';

}

re=1;

}

DisplayWord=m_pWord1;

delete[]radomarray;

}

6.在人机对抗时,可以随机读取单词,也可以选择向单词库输入单词,同时,将库中的单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。

实现该功能的函数定义如下:

intShowNum=int(LetterNum*Proba/100.0);//要显示的字母数,保证其大于2

if(LetterNum==2)ShowNum=1;

if(LetterNum>2&&ShowNum<2)ShowNum=2;

int*radomarray=newint[ShowNum];//得到一指定长度的随机数组

intx;

srand(time(NULL));

for(i=0;i

x=rand()%ShowNum;//不大于m_ShowNum的随机数

radomarray[i]=x;

for(intj=0;j

if(radomarray[i]==radomarray[j]&&i!

=j)i--;//重复则再来一次

}

}

 

intre=1;//替换指定字母的循环

for(i=0;i

for(intj=0;j

if(char(pWord1[i])==char(letterlist[radomarray[j]])){re=0;}

}

if(re){

pWord1[i]='*';

}

re=1;

}

DisplayWord=m_pWord1;

delete[]radomarray;

}

三.程序的使用说明

***************************************

1人人对抗

2人机对抗

3添加单词

4设置游戏

5退出游戏

按1进入人人对抗

开始出现初始设置界面

1开始游戏

2选择猜词机会

选择后继续进入设置界面

1开始游戏

2选择显示字母的百分数

设置完成后出现:

请玩家二输入单词(输入的单词以星号显示)

输入完成后由玩家一进行游戏,之后退到主界面

按2进入人机对抗

进入设置界面(同1过程)

可以选择默认的值或更改猜词机会和显示字母百分数

进行游戏(注释:

电脑从word.txt中随机抽选词语并根据进行的设置进行游戏)

按3向单词库添加单词

添加任何单词,可多次添加。

可显示单词个数。

按4进行游戏设置

可以修改系统默认的猜词机会和显示字母百分数

按5退出游戏

1、人人对抗中,要求实现第二位玩家输入单词后,屏幕不显示该单词而显示星号“*”。

参照教材中二十一点程序的做法,实现了该功能。

2、由于程序要充分体现C++面向对象的特点,游戏界面要保证友好,方便与玩家的交流,实现玩家对游戏的设置。

因此每个操作之前,都有相应的设置提示,玩家可根据需要选择默认值或者修改设置。

而每步操作之后,也都有相应的提示,如果玩家输入错误,形同会判断并且给与相应的错误提示,方便与玩家交流,提高程序的可操作性。

3、人机大战时,玩家可以选择向单词库中输入单词。

输入前后都会有相应的词库单词数目提示。

五.制作调试心得及体会

在上一学期,我学习了c++程序设计与教程。

但是如今发现,自己学的是理论的皮毛,面对实际问题的时候,我却一无所错,毫无头绪。

后来,经过询问学长同学,以及对之前前辈的借鉴,我终于完成课程设计。

实践是检验真理最好方法,实际与理论相结合。

在以后的学习里,我还有学习更多与c++相关的知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1