投骰子的随机游戏
投骰子的随机游戏
每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。
每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。
投骰子需要一个能模拟产生随机数的函数,#include <cstdlib> 中的 int rand(void) 函数是C++库中自带的产生并返回一个伪随机数的函数。
所谓伪随机数,即是指每当程序重新运行时产生的随机数和上次程序运行时产生的随机数相同,
比如在第一次程序运行时产生随机数:1,8,6,4,9,3,2,在本次运行内的确为一组随机数,但当关闭程序重新运行时,产生的随机数仍为1,8,6,4,9,3,2,
#include <cstdlib> 中的 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 }