投骰子的随机游戏
每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。
每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。
投骰子需要一个能模拟产生随机数的函数,#include
所谓伪随机数,即是指每当程序重新运行时产生的随机数和上次程序运行时产生的随机数相同,
比如在第一次程序运行时产生随机数:1,8,6,4,9,3,2,在本次运行内的确为一组随机数,但当关闭程序重新运行时,产生的随机数仍为1,8,6,4,9,3,2,
include 中的 void srand(unsigned int seed) 函数则可以解决这一问题,通过输入不同的参数 seed ,则可以为rand() 每次产生随机数设置一个起始点,
使得每次产生的随机数不同
C++代码如下:
1 #include<iostream>
2 #include<cstdlib>
3 using namespace std;
4
5 enum GameStatus {WIN,LOSE,PLAYING}; //枚举游戏状态
6
7 int rollDice() {
8 int dice1, dice2,sum;
9 dice1 = 1 + rand() % 6; //将产生的随机数转成范围1-6的骰子的点数
10 dice2 = 1 + rand() % 6;
11 sum = dice1 + dice2;
12 return sum;
13 }
14
15 int main() {
16 unsigned seed;
17 GameStatus status;
18 int sum,MyPoint;
19 cin >> seed;
20 srand(seed);
21 sum = rollDice();
22 switch (sum)
23 {
24 case 7:
25 case 11:status = WIN;
26 break;
27 case 2:
28 case 3:
29 case 12:status = LOSE;
30 break;
31 default:status = PLAYING; MyPoint = sum;
32 break;
33 }
34 while (status==PLAYING)
35 {
36 sum = rollDice();
37 if (sum == MyPoint)
38 status = WIN;
39 else if (sum == 7)
40 status = LOSE;
41 }
42 if (status == WIN)
43 cout << "player win";
44 else //此时只有输和赢两种状态
45 cout << "player lose";
46 return 0;
47 }
原文链接: https://www.cnblogs.com/pgzhang/p/9069916.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/274450
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!