【C++案例】投骰子的随机游戏

2 篇文章 0 订阅

投骰子的随机游戏

每个骰子有六面,点数分别为123456。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。

每轮投两次骰子,第一轮如果和数为711则为胜,游戏结束;和数为2312则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值