编程实现比划猜词游戏题目。

  四:每次猜测后,游戏应显示出当前猜出的残缺单词,以及当前猜错的所有字母,和剩下的猜错的机会;  五:假设玩家猜的字母在单词中,单词中所有的该字母将被视为已猜出,例如:假如原单词是apple,我们猜出了p,则程序应显示当前猜出的残缺单词为-pp--。  六:不得多次猜测同一个字母,因为这样是浪费时间。  一:预备工作:   规则就是这么多,我们应该用C++代码来实现它。首先,我们应考虑怎样记录单词,其中包括原单词、猜错的字母、当前猜出的残缺单词。假如用传统的C风格数组,这是很麻烦的,这用C风格字符串实现很困难。但C++为我们预先想到了这一切,C++中带有一个功能强大的string类,它的声明在头文件string中。注重,cstring或string.h中只是包含了一些处理字符串的函数,不包括string类。要使用这个类,我们首先要知道它的构造函数,这样才能创建string类对象。   
string(const char* s)
将string对象初始化为字符串s
string(size_type n,char c)
将对象初始化为有n个元素的对象,它们都是字符c
string(const string& str,size_type pos=0,size_type n=npos)
将对象初始化为str中,从第pos个元素开始的n个元素。   其实,这个类的构造函数远不止这些,但我们开发这个游戏只用得到这些(也许还用不上这么多)。我们还要了解一些关于string类的知识。它重载了所有的关系操作符、可以用+=操作符把字符串、string类对象、字符加到对象的末尾。比如,我们可以写出这样的代码:string a="butter"; string b="fly"; a+=b;这是十分方便的。它还重载了[]操作符,使我们完全可以像常规数组一样用它。对于string类,我们还要初步了解一下它的输入选项。它有tor&&,所以我们可以用cin进行输入,并且它与istream中的cin的使用规则是一样的。值得注重的一点是,string类是一个比较智能的类,它能够自动调整字符串的长度,这样,我们就不用担心浪费空间或者输入字符串超出对象末尾了。而我们常用的getline()函数呢?这是一个成员函数,所以不能进行重载。解决的办法是,string类带有一个getline()的非成员函数,它接受两个参数,第一个是istream类对象,第二个是string类对象,并且去掉了长度参数,原因已经说了。所以,假设temp是一个string类对象,我们应这样对它使用getline():getline(cin,string);看起来有点不好看,但实用。  最后,要实现这个拼字游戏,我们必须在对象中查找字符。string类已经提供了这方面的函数了,请看下表(未完全列出)。 
size_type find(char ch,size_type pos=0)
从字符串的pos位置开始,查找字符ch,若找到,返回第一个ch所在的索引,否则,返回string::npos。
size_type find(const string& str,size_type pos=0)
从字符串的pos位置开始,查找字符串str,若找到,返回str的首字母所在的索引,否则,返回string::npos。
size_type find (const char* s,size_type pos=0)
从字符串的pos位置开始,查找字符串s,若找到,返回s的首字母所在的索引,否则,返回string::npos。    举例说明,若temp是一个string对象,内容为"apple",则temp.find('p')将返回1,即第一个字符p对应的索引。  二:游戏源代码:
#include &iostream&#include &string&#include &cstdlib&#include &ctime&#include &cctype&const int NUM = 26;const string list[NUM] = {"alabama", "choice", "usually","dangerous", "deer", "panda", "love", "health", "exciting","interesting", "administrator", "ofessional", "manage", "nonce", "onset","typeid", "quarter", "remote", "lovely", "car", "keeper","valid", "where", "mean", "important", "last"};//供游戏的单词库 int main(){ srand(time(0));  cout && "Will you play a word game? &y/n& "; cin && play = tolower(play); while(play=='y') {  string first(wordlist[rand()%NUM]);//随机选择单词   int length=first.length();  string player(length,'-');//玩家猜测的单词   //猜错的字母集合   int guesses=10;//猜错的机会     cout&&"您有"&&guesses&&"次猜错的机会。\n";  cout&&"您的单词:"&&player&&'\n';  while(guesses&0&&player!=first)  {   cout&&"请您猜吧!";   cin&&   if(badguess.find(guess)!=string::nposplayer.find(guess)!=string::npos)   {    cout&&"对不起,这个字母您已经猜过了。";       }//判定是否已经猜过    int temp=first.find(guess);   if(temp==string::npos)   {    cout&&"啊!猜错了。\n";    guesses--;    badguess+=   }//猜错后的处理    else   {    player[temp]=    temp=first.find(guess,temp+1);    while(temp!=string::npos)//继续搜索该字符,看是否单词中有多个该字符     {     player[temp]=     temp=first.find(guess,temp+1);    }   }   cout&&"您还剩下"&&guesses&&"次猜错的机会。\n";   cout&&"您当前猜出的单词:"&&player&&'\n';    cout&&"您当前猜错的字母集合:"&&badguess&&'\n';   }   if(guesses==0)   cout&&"对不起,您失败了。\n";  else   cout&&"您真棒!\n";   cout&&"正确单词为:"&&first&&'\n';   cout && "Will you play again? &y/n& ";    cin&& } system("PAUSE"); return 0;}  下面是运行结果:Will you play a word game? &y/n& y您有10次猜错的机会。您的单词:------------请您猜吧!a您还剩下10次猜错的机会。您当前猜出的单词:----------a-您当前猜错的字母集合:请您猜吧!s您还剩下10次猜错的机会。您当前猜出的单词:-----ss---a-您当前猜错的字母集合:请您猜吧!p您还剩下10次猜错的机会。您当前猜出的单词:p----ss---a-您当前猜错的字母集合:请您猜吧!o您还剩下10次猜错的机会。您当前猜出的单词:p-o--ss-o-a-您当前猜错的字母集合:请您猜吧!r您还剩下10次猜错的机会。您当前猜出的单词:pro--ss-o-a-您当前猜错的字母集合:请您猜吧!f您还剩下10次猜错的机会。您当前猜出的单词:prof-ss-o-a-您当前猜错的字母集合:请您猜吧!e您还剩下10次猜错的机会。您当前猜出的单词:profess-o-a-您当前猜错的字母集合:请您猜吧!i您还剩下10次猜错的机会。您当前猜出的单词:professio-a-您当前猜错的字母集合:请您猜吧!n您还剩下10次猜错的机会。您当前猜出的单词:professiona-您当前猜错的字母集合:请您猜吧!l您还剩下10次猜错的机会。您当前猜出的单词:professional您当前猜错的字母集合:您真棒!正确单词为:professionalWill you play again? &y/n& n请按任意键继续. . .
更多内容请看C/C++技术专题&&网络游戏攻略&&游戏开发专题,或
  三:程序分析      程序的运行结果大家都看到了,符合该游戏的规则,随机性也较强,这就是C++的强大。  我们判定字母是否已经被猜过,是这样做的:
if(badguess.find(guess)!=string::nposplayer.find(guess)!=string::npos){ cout&&"对不起,这个字母您已经猜过了。"; }//判定是否已经猜过   因为假如字母被猜过,那么它要么在玩家猜出的残缺单词中,要么处于错误字母集合中,我们用find函数在这两处分别进行了搜索。  对于猜错后的处理,我们又是这样做的:
int temp=first.find(guess);if(temp==string::npos){ cout&&"啊!猜错了。\n"; guesses--; badguess+=}//猜错后的处理   首先,我们查找这个字符是否在单词中出现。假如没有出现,find函数将返回string::npos。npos是一个常量,比string能存储的最大元素数多1。假如没有出现,我们先是将猜错的机会减去一次,再用了这个代码:badguess+=将错误的字母加入badguess对象中。想想,这要用常规字符数组有多难?  最后,假如temp不是string::npos,那么我们就说玩家猜对了。但可能这个单词中有多个这样的字母,所以,我们这样做了:
temp=first.find(guess,temp+1);while(temp!=string::npos)//继续搜索该字符,看是否单词中有多个该字符 { player[temp]= temp=first.find(guess,temp+1);}  这样一来,逐步缩小区间,直到确认单词中再无这个字符为止。大家从运行结果中也可以看到这一点:您当前猜出的单词:----------a-您当前猜错的字母集合:请您猜吧!s您还剩下10次猜错的机会。您当前猜出的单词:-----ss---a-//将两个“s”都显示出来了您当前猜错的字母集合:      大家若有爱好,可以对这个程序进行扩充,比如加入难度选择、最后给出对玩家的评价等。最后,希望大家能通过这个范例,更加热爱C++!
更多内容请看C/C++技术专题&&网络游戏攻略&&游戏开发专题,或
优质网站模板猜字游戏_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩25页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢C语言 猜字游戏 源程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言 猜字游戏 源程序
上传于||暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢C语言-猜字游戏-源程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言-猜字游戏-源程序
上传于||文档简介
&&C语言-猜字游戏-源程序
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢千里之行 始于足下精诚所至 金石为开
欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 1931 人关注过本帖
标题:一个简单的猜字游戏
来 自:湖南
等 级:论坛游民
帖 子:73
专家分:19
结帖率:92%
&&已结贴√
&&问题点数:0&&回复次数:11&&&
一个简单的猜字游戏
&&& 随机数的应用
&&&程序代码:#include&iostream&
#include&cstdlib&
#include&ctime&
using namespace
int main()
&&& intsrand(time(<font color=#));//产生随机数
&&& t=(<font color=#+rand()%<font color=#0);//
&&& int m=<font color=#;
&&& cout&&&我有一个数从1到1000,你能猜得到我的数字嘛?&&&
&&& cout&&&请输入你的数: &;
&&& while(m&<font color=#)
&&&&&&&&cin&&n;
&&&&&&&&if(n==t)
&&&&&&&&&&&&cout&&&很幸运,你猜对了!&&&
&&&&&&&&if(n&t)
&&&&&&&&&&&&cout&&& 太低了,再试一次&&&
&&&&&&&&if(n&t)
&&&&&&&&&&&&cout&&& 太高了,再试一次&&&
&&&&&&&&return <font color=#;
搜索更多相关主题的帖子:
来 自:何方
等 级:版主
威 望:158
帖 子:6710
专家分:41591
程序存在好几次不足:
1 是不是应该在猜中了的时候加个break?
2 如果m&0一直为真 就没有必要用这个变量了 直接while (true) 还明确一点
3 没有必要用 if() if () if() 这样的逻辑,用if ()else if() else if()就行了
我的博客:
http://blog.sina. com. cn/yuccn
来 自:湖南
等 级:论坛游民
帖 子:73
专家分:19
回复 2楼 yuccn
在猜中后,如果你仍想猜,这时跳出程序就没有意义了,另外,break 不能随便用。
来 自:何方
等 级:版主
威 望:158
帖 子:6710
专家分:41591
要不就继续猜,要不就退出,这个总比在死循环好。你的程序都没有再次产生随机数,猜中了再猜一个已知数字来死循环?
另外,break 不能随便用。??这个是什么道理。。。
而且,没有人说顺不顺便便用,只是说合不合理吧了。
[ 本帖最后由 yuccn 于
00:03 编辑 ]
我的博客:
http://blog.sina. com. cn/yuccn
等 级:新手上路
我也觉得无法再次产生随机数十个问题。。。另外我就没什么说的咯。。。对于我这个初学者来说,挺不错的。
来 自:湖南
等 级:论坛游民
帖 子:73
专家分:19
srand(time(0)这个语句就是来产生活的随机数的,每次运行都不会有相同的数,你运行下就知道了
[ 本帖最后由 编程2011 于
00:15 编辑 ]
来 自:湖南
等 级:论坛游民
帖 子:73
专家分:19
回复 4楼 yuccn
srand(time(0)这个语句就是来产生活的随机数的,每次运行都不会有相同的数,你运行下就知道了
来 自:北京
等 级:贵宾
威 望:94
帖 子:6779
专家分:16751
回复 7楼 编程2011
yuccn 的意思是说猜中了后再猜还有什么意思。
虽然每次运行出的随机数不一样,但你这个程序即使猜中了也不既出循环。还让人猜同一个数,这很无趣。至少也得再生成一个随机数让人猜吧。
来 自:何方
等 级:版主
威 望:158
帖 子:6710
专家分:41591
呵呵,还是版主读懂我的意思。难觅。。。
我的博客:
http://blog.sina. com. cn/yuccn
等 级:论坛游民
帖 子:21
专家分:26
&iostream& &cstdlib&&&&&&&&&&&&是什么意思
#include &ctime&
srand(time( 0 ));&&& 随机数有范围吧!多少?&&t=( 1 +rand()% 1000 )这个应该是限定范围,rand何意? ;
cout && &&&& &&endl&&& 见过,但不理解,怎么回事?
版权所有,并保留所有权利。
Powered by , Processed in 0.023886 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved}

我要回帖

更多关于 比划猜词游戏题目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信