猜硬币游戏(c++语言)

前言 (随机数和随机种子)

1.随机数

  • rand()

如同字面意思,生成随机数
rand() 产生一个00x7ffff,即032767之间的随机数

  • RAND_MAX:表示最大随机数,简而言之就是RAND_MAX==0x7ffff

猜硬币游戏(c++语言)_第1张图片

这个随机数生成了10个,运行了两次,可以看出,两次结果都不变化,(多少次都不变化)

  • srand()

随机数种子
通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))
srand()一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的随机数。

1.srand((unsigned)time(0))

猜硬币游戏(c++语言)_第2张图片

可以看出加入随机种子后每次运行完的序列不一样,体现了“随机性”。
2.srand((unsigned)time(NULL))
猜硬币游戏(c++语言)_第3张图片

  • 1.要取得 [a,b) 的随机整数,使用(rand() % (b-a))+ a (结果值含a不含b)。

  • 2.要取得 [a,b] 的随机整数,使用(rand() % (b-a+1))+ a (结果值含a和b)。

  • 3.要取得 (a,b] 的随机整数,使用(rand() % (b-a))+ a + 1 (结果值不含a含b)。

可以看出随机数种子的意义就是让随机数每一轮产生不一样的数。

  • 重要点
    1.{0,1} 随机数(或0;或1)

  • a: rand()%2;

  • b: rand*2/RAND_MAX

产生[a,b]上的随机数 ((double)rand()/RAND_MAX)*(b-a) + a ,其中(double)rand()/RAND_MAX)可以得到一个0~1的随机数

1.rand()/RAND_MAX可表示为在[0,1]区间内的随机数
2.rand()/(RAND_MAX+1)可表示为在[0,1)区间内的随机数

猜硬币游戏

1.功能:

a.提供游戏指南
b.计算机随机产生正反面,让用户猜,报告对错结果
c.重复玩游戏过程,直到用户不想玩了为止

2.问题求解

进行结构化程序设计
自顶向下分解为(1)介绍指南;(2)猜结果

即两个函数
void prn_instruction(); 介绍
void play(); 猜结果

  • prn_instruction()
void prn_instruction()
{
    cout << "这是一个猜硬币正反面的游戏.\n";
    cout << "我会扔一个硬币,你来猜.\n";
    cout << "如果猜对了,你赢,否则我赢。\n";
}
  • play()
void play()
{ 
        char flag = ‘y’;
        while ( flag == ‘Y’ || flag == ‘y’)
        { 
                coin = 生成正反面;
                输入用户的猜测;
                if  (用户猜测 == coin) 
                	报告本次猜测结果正确;
                else  
                	报告本次猜测结果错误;
                询问是否继续游戏
        }
}

这里有三个问题:
(1)系统如何生成正反面,使计算机表达后“用户理解”;
(2)用户如何输入猜测,与系统一一对应;
(3)怎么判断游戏继续还是结束

  • 问题1:系统如何生成正反面,使计算机表达后“用户理解
    因为计算机只能生成数字,可以使用“1”和“0”表示正反面。所以这里就是使用某种方法使计算机生成数字。
    因此使用随机数【1】和【0】
    rand*2/RAND_MAX 生成0和1;
srand(time(NULL));
coin = rand() * 2 / RAND_MAX;
  • 问题2:用户如何输入猜测,与系统一一对应
    这里要保证用户只能输入0和1,无法输入其他的数字。
    因此需要使用get_call_from_user(),表示整数型,所以shi
    该函数接收用户输入的一个整型数。如果输入的数不是0或1,则重新输入,否则返回输入的值
int get_call_from_user()
{
    int guess;
    do
    {
        cout << "\n输入你的选择(0表示正面,1表示反面):";
        cin >> guess;
    } while (guess != 0 && guess != 1);
    return guess;
}
  • 问题3:怎么判断游戏继续还是结束

falg=y或Y

你可能感兴趣的:(C++,c++,游戏,c语言)