【C语言】编写一个猜数字小游戏

游戏大概:

        这段代码实现了一个简单的猜数字游戏功能。程序运行后,会先显示一个菜单供用户选择是开始游戏(输入 1 )还是退出游戏(输入 0 )。当选择开始游戏时,电脑会生成一个在 1 到 100 之间的随机数,然后用户通过不断输入猜测的数字,程序会提示猜大了还是猜小了,直到猜对为止。

设置菜单menu():

        

void menu(){
    printf("********************************\n");
    printf("*******1.play     0.exit********\n");
    printf("********************************\n");
}

        这个函数的作用是在控制台输出游戏的菜单界面,清晰地展示给用户两个选项,即选择 1 开始游戏,选择 0 退出游戏,通过格式化的文本输出,让界面更加直观。

        注:这里期望当用户输入 0 时结束循环(退出游戏),但如果在代码执行过程中,由于某些原因使得 后续input 的值没有机会被正确更新为 0 或者被修改为一个能使循环条件为假的值,那么循环就会一直持续下去,从而出现死循环的情况。

        如果没有用0定义退出,则在后续main函数部分,可能因为循环没有识别到能够令自己停下来的值,从而一直循环,不能起到退出游戏的效果。(C语言中,0表示假,一切非零是真)

设置游戏game():

void game(){
    //1.生成随机数
    int ret = 0;
    int guess = 0;
    ret = rand() % 100 + 1;//专门生成随机数的函数
    // printf("%d\n", ret);
    
    //2.猜数字
    while(1){
        printf("猜数字:");
        scanf("%d", &guess);
        if(guess > ret){
            printf("猜大了,再猜一次!\n");
        }else if(guess < ret){
            printf("猜小了,再猜一次!\n");
        }else{
            printf("恭喜你,猜对了。\n");
            break;
        }
    }
}
  • 生成随机数部分
    • 首先定义了两个整型变量 ret 和 guessret 用于存储电脑生成的随机数,guess 用于后续接收用户猜测的数字。
    • 通过 rand() % 100 + 1 这个表达式来生成随机数。rand 函数会返回一个范围在 0 到 RAND_MAX(通常是 32767 )之间的伪随机整数,对其取模 100 后得到的结果范围是 0 到 99,再加上 1 就可以得到一个在 1 到 100 之间的随机数,并将这个随机数赋值给 ret
  • 猜数字部分
    • 使用 while(1) 构建了一个无限循环,意味着只要没有猜对数字,循环就会一直执行下去,让用户可以持续进行猜测。
    • 在循环内部,首先通过 printf 和 scanf 提示用户输入猜测的数字,并将用户输入的数字存储到 guess 变量中。
    • 接着通过 if - else if - else 语句来判断用户猜测的数字和电脑生成的随机数 ret 的大小关系:
      • 如果 guess 大于 ret,就输出提示信息告知用户猜大了,让用户再猜一次。
      • 如果 guess 小于 ret,则输出提示信息告知用户猜小了,同样让用户继续猜测。
      • 当 guess 等于 ret 时,说明用户猜对了,输出恭喜信息并通过 break 语句跳出循环,结束当前轮次的游戏。

main函数部分:

int main(){
    srand((unsigned int) time(NULL));
    //时间戳
    //拿时间戳来设置随机数的生成起点

    // time_t time(time_t *timer)   
    int input = 0;
    do{
        menu();
        printf("请选择>:");
        scanf("%d", &input);
        switch(input){
            case 1:
                game();
                break;
            case 0:
                printf("退出游戏。\n");
                break;
            default:
                printf("输入错误,请重新输入。\n");
        }
    }while(input);
    return 0;
}
  • 设置随机数种子部分
    • 在 main 函数开头,首先调用 srand((unsigned int) time(NULL))time(NULL) 函数会获取从 1970 年 1 月 1 日 0 时 0 分 0 秒到当前时刻的秒数(时间戳),将这个时间戳转换为 unsigned int 类型后作为参数传递给 srand 函数,以此来设置随机数生成的种子。这样做的目的是使得每次运行程序时,由于时间戳不同,rand 函数生成的随机数序列也就不同,增加游戏的随机性。
  • 游戏流程控制部分
    • 定义了一个整型变量 input,用于接收用户在菜单中选择的操作( 1 表示开始游戏,0 表示退出游戏等)。
    • 通过 do - while 循环来实现整个游戏的流程控制,使得游戏可以反复执行以下操作,直到用户选择退出(即 input 为 0 ):
      • 首先调用 menu 函数,输出游戏的菜单界面,展示操作选项给用户。
      • 接着提示用户输入选择,并通过 scanf 函数获取用户输入的数字存储到 input 变量中。
      • 使用 switch 语句根据 input 的值来执行不同的操作:
        • 当 input 为 1 时,调用 game 函数,进入猜数字的游戏环节。
        • 当 input 为 0 时,输出提示信息告知用户退出游戏,然后 while 条件判断为假,结束 do - while 循环,进而结束整个程序。
        • 如果 input 是其他值(既不是 1 也不是 0 ),则输出提示信息告知用户输入错误,让用户重新输入。

包含的头文件:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

开头引入三个头文件:

  • stdio.h:标准输入输出头文件,提供了像 printfscanf 这样用于输入输出操作的函数声明,在代码中多处用于向控制台输出提示信息以及获取用户输入的数字等操作。
  • stdlib.h:标准库头文件,其中声明了 rand 函数(用于生成伪随机数)以及 srand 函数(用于设置随机数生成的种子)等,是实现生成随机数功能的关键头文件。
  • time.h:时间相关的头文件,代码中使用了 time 函数来获取当前时间(以时间戳的形式),其返回值被用于设置随机数生成的种子,确保每次运行游戏时生成的随机数序列不同。

完整函数:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//RAND_MAX - 0-32767
void menu(){
    printf("********************************\n");
    printf("*******1.play     0.exit********\n");
    printf("********************************\n");
}

void game(){
    //1.生成随机数
    int ret = 0;
    int guess = 0;
    ret = rand() % 100 + 1;//专门生成随机数的函数
    // printf("%d\n", ret);
    
    //2.猜数字
    while(1){
        printf("猜数字:");
        scanf("%d", &guess);
        if(guess > ret){
            printf("猜大了,再猜一次!\n");
        }else if(guess < ret){
            printf("猜小了,再猜一次!\n");
        }else{
            printf("恭喜你,猜对了。\n");
            break;
        }
    }
}
int main(){
    srand((unsigned int) time(NULL));
    //时间戳
    //拿时间戳来设置随机数的生成起点

    // time_t time(time_t *timer)   
    int input = 0;
    do{
        menu();
        printf("请选择>:");
        scanf("%d", &input);
        switch(input){
            case 1:
                game();
                break;
            case 0:
                printf("退出游戏。\n");
                break;
            default:
                printf("输入错误,请重新输入。\n");
        }
    }while(input);
    return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值