基于C++如何实现掷双骰游戏(C++,开发技术)

时间:2024-04-30 14:43:30 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E5%9F%BA%E4%BA%8EC%2B%2B%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E6%8E%B7%E5%8F%8C%E9%AA%B0%E6%B8%B8%E6%88%8F

在最流行的博彩游戏中有一种名为“掷双骰”(craps)的骰子游戏,这种游戏在世界各地的娱乐场所和大街小巷非常受欢迎。游戏的规则很简单:

玩家掷两个骰子。每个骰子有六面,分别含有1、2、3、4、5和6个点。掷完骰子后,计算两个朝上的面的点数之和。

1、如果首次投掷的点数总和是7或者11,那么玩家赢;

2、如果首次投掷的点数只和事2、3或者12(称为"craps"),那么玩家输(即庄家赢);

3、如果首次投掷的点数只和事4、5、6、7、8、9或者10,那么这个和就成为玩家的“目标点数”。要想赢的话,玩家必须连续的掷骰子直到点数与这个目标点数相同为止,即“得到了点数”。但在得到点数前,如果掷到的是7,就会输掉。

这个是我拿来当作笔记的,主要是为了记住这么个问题,当我要想循环的实现博彩游戏并且统计输赢的时候,会自然而然的想到在外部套一个for循环去执行,但是这样就会涉及到一个问题,即随机数的生成,按照我最开始的理解是随着循环的进行,给srand提供的seed不同(也就是实参time(0))就会在每次循环都产生不同的随机序列。即代码如下

然而统计运行结果是:

WIN: 0
LOSE: 100000

也就是说一旦第一次是输了,那么就一直都是输的,为什么?

原因在于程序运行太快,而time(0)提供的时间戳是以秒为单位提供的,而程序1s内就执行完了,自然就提供的seed是一样的,那么rand的序列也是一样,所以就一直是赢或者输,那么我要是非要它不一直赢或者输了?可以这样,将循环次数设置得更大,让程序1s内运行不完,不就可以提供不同的时间戳了?而事实是这样也是可行的,如图,是我设置1000w次循环的统计结果。

WIN: 8703168
LOSE: 1296832

本文:基于C++如何实现掷双骰游戏的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:java树结构stream工具类怎么用下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18