设为首页 加入收藏

TOP

简单C++程序—掷骰子(四)
2014-04-06 17:42:03 来源: 作者: 【 】 浏览:721
Tags:简单 程序 骰子

 

  cout 《 "甲赢 "《n1《" 轮,乙赢 "《n2《" 轮";

  if(n1>n2)

  cout《",甲胜"《endl;

  else if(n2>n1)

  cout《",乙胜"《endl;

  return 0;

  }

  int shaizi::getdian()

  {

  return dian;

  }

  void shaizi::setdian()

  {

  srand(time(0));

  dian=rand()%6+1;

  }

  程序中用了类的"标配",set和get成员函数都有,这个结构更好。在main函数中多设了些道道,能够9局5胜,且平局不算。

  但是,程序运行是死循环!

  在屏幕上的数字快速滚动中,猜测问题的原因是,每次都平局,都continue了。把28-32行的处理平局的代码去掉运行,果然如此。见图:

  为什么会这样?还得说随机数的原理。用rand()得到的随机数,并不是完全随机,是"伪随机",随机数序列取决于"种子数",种子数由srand(long)设置。也就是说,当种子数相同时,得到的随机序列就是完全相同的。为此,常取系统时间(time(0)返回的是从1970年1月1日午夜起到现在的秒数)作种子数,这是个可以让每次运行时种子数都不同的办法。

  然而 在这个程序中,调用s1和s2两个对象的setdian成员函数时,间隔的时间太短了,现在再慢的计算机,也不会让再次调用间隔超过1秒,甚至在这1秒末,那一秒初的那一瞬间的可能性都没有。每次都平局,不可避免。

  好不容易想到个好玩的简单游戏,就此罢休?想到的一个解决方案,让两次"投掷"停顿一下(这在专业中叫做"延时"),可以做到能够得出不同的种子数。

  程序如下:

  #include <iostream>

  #include <cstdlib>

  #include <ctime>

  #include <windows.h>

  using namespace std;

  class shaizi

  {

  public:

  void setdian();

  int getdian();

  private:

  int dian;

  };

  const int round=9;   //round必须置一个奇数

  int main()

  {

  shaizi s1,s2;

  int i=1,n1=0,n2=0;

  while(i<=round)

  {

  s1.setdian();

  Sleep(1000);   //延时1000毫秒,即1秒

  s2.setdian();

  cout《"第"《i《"轮: 甲 "《s1.getdian()《",乙: "《s2.getdian();

  if(s1.getdian()>s2.getdian())

  n1++;

  else if (s2.getdian()>s1.getdian())

  n2++;

  else

  {

  cout《",平局重掷 "《endl;

  continue;

  }

  i++;

  cout《endl;

  if(n1==(round/2+1)||n2==(round/2+1))

  break;

  }

  cout 《 "甲赢 "《n1《" 轮,乙赢 "《n2《" 轮";

  if(n1>n2)

  cout《",甲胜"《endl;

  else if(n2>n1)

  cout《",乙胜"《endl;

  return 0;

  }

  int shaizi::getdian()

  {

  return dian;

  }

  void shaizi::setdian()

  {

  srand(time(0));     //设置种子数,由于有了间隔,能够保证种子数不同

  dian=rand()%6+1;    //实际每次取出的是,种子数确定的随机序列中的第一个

  }

  加入的Sleep(1000)是延迟1000毫秒,为了调用此函数,需要#include<window.h>.

        

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言结构体相关函数 指针 下一篇C语言五子棋胜负判定算法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: