投骰子的随机游戏
每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。
每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。
由rolldice函数负责模拟投骰子、计算和数并输出和数。
随机数生成器:
rand()
:生成伪随机数的函数,它的输出是基于某个内部状态的序列(即伪随机数)。
虽然我们在编程中常常使用随机数,但计算机实际上不能生成完全随机的数,而是生成伪随机数,这些数是通过特定算法计算出来的。种子是这个算法的起始点,它决定了随机数生成的序列。伪随机数是通过某种数学算法计算出来的,算法本身需要一个初始值来开始计算,这个初始值就是种子(seed
)
成指定范围的随机数公式:random_value = rand() % (max - min + 1) + min;
srand(unsigned int seed)
:设置 rand()
使用的种子。种子不同,生成的随机数序列也不同。通过输入种子,用户可以确保每次运行程序时生成不同的随机数序列。使用1作为seed参数,可以重新初化rand()
#include <iostream>
#include <cstdlib> // 包含随机数相关函数,如rand()和srand()
using namespace std;
// 投骰子、计算和数、输出和数的函数
int rollDice() {
// 生成两个骰子的随机点数,点数范围是1到6
int die1 = 1 + rand() % 6; // 第一个骰子
int die2 = 1 + rand() % 6; // 第二个骰子
// 两个骰子的和数
int sum = die1 + die2;
cout << "当前掷骰子的结果 " << die1 << " + " << die2 << " = " << sum << endl;
// 返回和数
return sum;
}
// 定义枚举类型,用于表示游戏的状态
enum GameStatus { WIN, LOSE, PLAYING };
// 游戏状态设为WIN,表示玩家赢
int main() {
int sum, myPoint; // myPoint用于存储玩家的目标点数
GameStatus status; // status表示游戏状态(WIN, LOSE, 或 PLAYING)
unsigned seed; // 随机数种子,用于初始化随机数生成器
cout << "请输入随机数种子: ";
cin >> seed;
srand(seed); // 将种子传递给srand(),初始化随机数生成器
// 第一轮
sum = rollDice(); // 调用rollDice(),获取骰子和数
switch (sum)
{
// 和数为7或11,玩家胜利
case 7:
case 11:
status = WIN; // 游戏状态设为WIN,表示玩家赢
break;
// 和数为2、3或12,玩家失败
case 2:
case 3:
case 12:
status = LOSE; // 游戏状态设为LOSE,表示玩家输
break;
// 其他情况,游戏继续进行,玩家需要再投骰子
default:
status = PLAYING; // 游戏继续进行
myPoint = sum; // 将当前和数设为玩家的目标点数
cout << "point is " << myPoint << endl;
break;
}
// 进入循环,直到游戏结束(玩家胜利或失败)
while (status == PLAYING)
{
sum = rollDice();
// 如果和数等于玩家的目标点数,玩家胜利
if (sum == myPoint)
status = WIN;
// 如果和数为7,玩家失败
else if (sum == 7)
status = LOSE;
}
// 输出游戏结果
if (status == WIN)
cout << "玩家胜利" << endl;
else
cout << "玩家失败" << endl;
return 0; // 程序正常结束,返回0
}