龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

利用C++编写一个猜字游戏[组图]

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
今天,我们要用C++来写一个猜字母的游戏。不要担心,做起来并不是那么难的。首先,我们必须了解一下游戏规则。 一:玩家每次只能猜一个字母; 二:玩家只能猜错有限次,否则游

  今天,我们要用C++来写一个猜字母的游戏。不要担心,做起来并不是那么难的。首先,我们必须了解一下游戏规则。

  

  一:玩家每次只能猜一个字母;

  

  二:玩家只能猜错有限次,否则游戏失败;

  

  三:猜错的字母将被记录下来;

  

  

更多内容请看C/C++技术专题 网络游戏攻略 游戏开发专题,或

  

  三:程序分析

   

    程序的运行结果大家都看到了,符合该游戏的规则,随机性也较强,这就是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<<"啊!猜错了。

";

   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++技术专题 网络游戏攻略 游戏开发专题,或

  

精彩图集

赞助商链接