写一个猜数字游戏

游戏要求:

  1. 电脑自动生成1~100的随机数
  2. 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束
  3. 玩完一把,还可以继续玩,不需要重开

1. 随机数生成

srand((unsigned int)time(NULL)); 给int r = rand() ;设置更合理的种子

  • unsigned int:返回类型
  • rand() 生成伪随机数。如果不进行特别设置,每次程序运行时,rand() 函数生成的随机数序列是固定的。
  • 程序中在调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。
  • time(NULL)函数:如果传入的参数是 NULL ,就表示只获取当前时间,而不存储时间值到指定变量中。time(NULL) 返回的是时间戳(从一个特定的时间点到当前时间所经过的秒数)。
  • 要包含#include <stdlib.h>// 包含标准库,用于随机数生成函数 和#include <time.h>// 包含时间库,用于获取系统时间
真正生成并赋值随机数的是这行代码:
int r = rand() % 100 + 1;
如果要生成a~b的随机数:
a + rand()%(b-a+1)

2封装公式game

void game()
//void 是函数的返回值类型,表示这个函数执行完后不返回任何值
//game 是函数的名称,通常根据函数的功能命名(这里显然是 “游戏” 相关的功能)。
//括号 () 表示这是一个函数,括号内可以放参数(这里为空,说明调用这个函数时不需要传入数据)。

3.实现猜数字

#include <stdio.h>
#include <stdlib.h>// 包含标准库,用于随机数生成函数
#include <time.h>// 包含时间库,用于获取系统时间

void game()
{
    int r = rand() % 100 + 1;//生成伪随机数,赋值给r
    int guess = 0;
    
    // 无限循环,直到猜对数字才退出
    while (1)
    {
        printf("请猜数字>:");
        scanf("%d", &guess);
        
        if (guess < r)
        {
            printf("猜小了\n");
        }
        else if (guess > r)
        {
            printf("猜大了\n");
        }
        else//我写的是if (guess=0),不太对
        {
            printf("恭喜你,猜对了\n");
            break;
        }
    }
}

// 游戏菜单函数,用于展示游戏选项
void menu()
{
    printf("***********************\n");
    printf("****** 1. play ******\n");  
    printf("****** 0. exit ******\n");  
    printf("***********************\n");
}

// 主函数,程序入口
int main()
{
    // 定义变量用于存储玩家的选择(1或0)
    int input = 0;
    srand((unsigned int)time(NULL));//时间戳
    //rand() 会根据 srand设置的种子,生成一个随机数。
    
    do
    {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        
        switch (input)
        {
        case 1:
            game();//第一个写好的
            break;
        case 0:
            printf("游戏结束\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    }
    while (input);  
    //do-while循环
    //当input是非0,那么继续循环;当input为0时,循环条件不成立,退出循环
	//带实际循环体的while循环:不加分号空循环或do-while循环的结尾:必须加分号
    return 0;
}