AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

利用C++编写一个猜字游戏

51自学网 http://www.wanshiok.com

  三:程序分析
   
  程序的运行结果大家都看到了,符合该游戏的规则,随机性也较强,这就是C++的强大。

  我们判断字母是否已经被猜过,是这样做的:

if(badguess.find(guess)!=string::npos||
player.find(guess)!=string::npos)
{
 cout<<"对不起,这个字母您已经猜过了。";
 continue;
}//判断是否已经猜过

  因为如果字母被猜过,那么它要么在玩家猜出的残缺单词中,要么处于错误字母集合中,我们用find函数在这两处分别进行了搜索。

  对于猜错后的处理,我们又是这样做的:

int temp=first.find(guess);
if(temp==string::npos)
{
 cout<<"啊!猜错了。/n";
 guesses--;
 badguess+=guess;
}//猜错后的处理

  首先,我们查找这个字符是否在单词中出现。如果没有出现,find函数将返回string::npos。npos是一个常量,比string能存储的最大元素数多1。如果没有出现,我们先是将猜错的机会减去一次,再用了这个代码:badguess+=guess;将错误的字母加入badguess对象中。想想,这要用常规字符数组有多难?

  最后,如果temp不是string::npos,那么我们就说玩家猜对了。但可能这个单词中有多个这样的字母,所以,我们这样做了:

temp=first.find(guess,temp+1);
while(temp!=string::npos)//继续搜索该字符,看是否单词中有多个该字符
{
 player[temp]=guess;
 temp=first.find(guess,temp+1);
}

  这样一来,逐步缩小区间,直到确认单词中再无这个字符为止。大家从运行结果中也可以看到这一点:

您当前猜出的单词:----------a-
您当前猜错的字母集合:
请您猜吧!s
您还剩下10次猜错的机会。
您当前猜出的单词:-----ss---a-//将两个“s”都显示出来了
您当前猜错的字母集合:
   
  大家若有兴趣,可以对这个程序进行扩充,比如加入难度选择、最后给出对玩家的评价等。最后,希望大家能通过这个范例,更加热爱C++!

 
 

上一篇:C++中动态内存分配引发问题的解决方案  下一篇:深入探讨C++中的引用