来做一个猜数游戏吧

一个猜数小游戏

分析

  1. 首先尝试接受用户的一个输入数字
  2. 生成一个随机数
  3. 进入游戏循环主体中
    1. 输入数字大于随机数:输出大了,循环继续
    2. 输入数字小于随机数:输入小了,循环继续
    3. 输入数字等于随机数:猜对了,退出循环
  4. 结束程序

程序源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <random>
#include <iostream>

int main(){
// Create random number generator
std::random_device random_device;
std::mt19937 generator(random_device());
std::uniform_int_distribution<int> distribution(1,100);
const auto random_number = distribution(generator);
std::cout << random_number << std::endl;

// Create variable to store user's guess
int guessing_number{};

// Create loop to allow user to guess the random number
while(guessing_number != random_number){
std::cin >> guessing_number;
std::cout << "Guessing number: " << guessing_number << std::endl;
if(guessing_number > random_number){
std::cout << "Too high" << std::endl;
}
else if(guessing_number < random_number){
std::cout << "Too low" << std::endl;
}
else{
std::cout << "You got it!" << std::endl;
break;
}
}

return 0;
}


源码分析

随机数引擎

要在C++中使用库生成一个随机数,请按照以下步骤操作:

  1. 首先,确保已经包含了<random>头文件。在文件的开头添加以下代码:#include <random>

  2. 接下来,创建一个std::random_device对象,用于生成随机种子。这可以确保每次运行程序时生成的随机数不同。
    std::random_device rd;

  3. 使用std::seed函数,将random_device对象生成的随机种子用于初始化std::mt19937随机数生成器。
    std::mt19937 gen(rd());

  4. 使用std::uniform_int_distribution对象,指定随机数的范围。例如,要生成0到100之间的随机数,可以使用以下代码:
    std::uniform_int_distribution<> distrib(0, 100);

  5. 使用distrib对象生成随机数,并将其存储在变量中。
    const auto random_number = distrib(gen);

std::mt19937是一个Mersenne Twister伪随机数生成器,它是C++标准库中的一个均匀分布随机数生成器。Mersenne Twister是一种广泛使用的随机数生成器,其性能和分布非常广泛,因此在许多应用中都被广泛使用。

std::mt19937的构造函数接受一个random_device对象作为参数,该对象用于生成随机种子。通过使用random_device,可以确保每次运行程序时生成的随机数不同。

std::mt19937生成的随机数服从均匀分布,即在指定的区间内等概率地取值。

const 和 auto

const 关键字用于声明常量,即在程序运行期间其值不能被修改的量。

1
2
const int a = 5;
a = 6 // 错误,不能修改常量的值

auto 关键字用于声明自动类型变量,即编译器会根据初始值自动推断出变量的类型。

1
2
3
const int a = 5;    //声明一个int类型的a,并且定义值为5
auto b = a; // b的类型和a一样,都是int类型
b = 7; //正确,可以修改b的值

主体判断框架

使用while循环,在循环体中判断条件是否成立,如果条件成立,则执行循环体,否则退出循环。
用户如果输入错误数值,那么就一直循环,直到输入正确为止。
用户输入正确,那么就会通过break跳出循环。

整体解释

  1. 引入所需的头文件,包括(用于随机数生成器)和(用于输入输出)。
  2. 在main函数中,定义一个random_device对象,用于生成随机种子。
  3. 定义一个std::mt19937对象,作为随机数生成器,并将random_device对象作为参数传递。
  4. 定义一个std::uniform_int_distribution对象,用于生成1到100之间的随机整数。
  5. 使用distribution对象生成一个随机整数,并将其存储在random_number变量中。
  6. 使用std::cout输出随机数。
  7. 定义一个guessing_number变量,用于存储用户输入的数字。
  8. 使用一个while循环,直到用户猜对数字为止。
  9. 在循环中,使用std::cin从用户输入一个数字,并将其存储在guessing_number变量中。
  10. 使用std::cout输出用户输入的数字。
  11. 如果guessing_number大于random_number,则输出“Too high”。
  12. 如果guessing_number小于random_number,则输出“Too low”。
  13. 如果guessing_number等于random_number,则输出“You got it!”并跳出循环。
  14. 最后,return 0表示程序正常退出。

来做一个猜数游戏吧
http://cvrain.cloudvl.cn/2023/11/09/Cpp/guessing-number/
作者
ClaudeRainer
发布于
2023年11月9日
许可协议