C语言猜数字游戏实现

简介: C语言猜数字游戏实现

前言: 

猜数字是一项简单的小游戏,跟着C看看如何从无到有,有逻辑地把这项小游戏用C语言写出来吧。

初学C语言的小伙伴放心食用~~~

目录

❤️1.整体框架

🧡2.简易菜单

💛3.游戏逻辑

3.1随机数字的生成

3.2猜数字

💚4.最终成果展示



猜数字游戏的要求:

1.生成1~100之间的随机数;

2.猜数字:

  1>猜小了,程序会告诉你猜小了,继续猜;

  2>猜大了,程序会告诉你猜大了,继续猜;

  3>才对了,程序会告诉:恭喜你猜对了!!!,游戏结束。

3.游戏可以反复玩。



1.整体框架


微信图片_20230414210320.png

进入程序,输入1开始猜数字,输入0退出游戏,此处可用switch-case执行分支;


要使游戏至少能进行一次,可以使用do  while循环;


这样可以先写出整体框架

#include<stdio.h>
int main()
{   
  int input = 0;//要作为循环判断条件,所以初始化在循环体系外
  do
  {
    //打印菜单
    menu();
    //选择入口
    printf("请选择:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      printf("猜数字\n");
            //游戏逻辑
      geme();
      break;
    case 0:
      //退出
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误,请重新输入");
      break;
    }
  } while (input);//input是0时为假,是1时为真,可以作为判断标志
  return 0;
}


2.简易菜单


打印一个简易菜单,创建一个菜单函数:

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

到这里游戏的基本框架就有了

运行:

微信图片_20230414210815.png



3.游戏逻辑


3.1随机数字的生成


在C语言中,有专门生成随机整数的函数,那就是rand函数

C/C++资源网站

微信图片_20230414210907.pngrand函数返回的是0~RNAD_MAX之间的整数值微信图片_20230414211017.png

转到定义,可以看到RAND_MAX代表的十六进制数字 7fff

转换为十进制就是32767

那就明白了:

rand()随机生成0~32767之间的整数

按照思路创建game函数:

void game()
{
    int ret = rand();
    printf("%d\n", ret);
}


运行几次:


微信图片_20230414211246.png微信图片_20230414211320.png微信图片_20230414211407.png微信图片_20230414211501.png

发现每次生成的数字都是相同的,

每次生成的数字是相同的?那可没意思,

怎么解决这个问题呢?

其实rand函数并不是这么使用的,我们忽视了一个关键点:

微信图片_20230414211701.png

那就是在使用rand函数之前要调用srand函数来设置随机数的生成器

微信图片_20230414211746.png

要调用srand函数,找到关于srand函数的信息

应用srand要返回一个整数值

下面随机给srand一个整数并运行程序:

微信图片_20230414211834.png

微信图片_20230414211906.png

诶?

如果给srand的值是固定的,那生成的数也是固定的

反过来想,如果给srand的值不是固定的,那生成的数不就不是固定的了吗?也就是实现了随机数的生成

问题又来了,有没有随时变化的值?

没错,那就是时间

于是我们引入一个概念:时间戳

恰好 C语言中,time函数会返回时间戳

微信图片_20230414212009.png

time_t本质上就是整形,这里不做过多阐述

需要注意的是time函数需要的是time_t* ,也就是指针

而我们对返回的值没有确界要求,只要让time返回一个数就可以了

那我们给空指针NULL


srand(time(NULL));


此时出现了警告:

微信图片_20230414212109.png

解决方法很简单,把time强制转化成unsigned int就好

于是就有了:


srand((unsigned int)time(NULL));


加入game函数:

void game()
{
  srand((unsigned int)time(NULL));
  int ret = rand();
  printf("%d\n", ret);
}

运行几次:

微信图片_20230414212317.png

问题又来了:

每次生成的数字都很接近,尤其是前后选择时间较短的时候

原因是每次选择都会调用一次srand函数,相当于每次进行游戏都会重置起点

其实srand函数只要调用一次就行了,不需要频繁调用

通过把srand函数放到main函数开头就可以解决这个问题了

最后,我们需要的是1~100的整数

只需要把rand返回的值模100并+1就ok

void game()
{
  int ret = rand()%100+1;
  printf("%d\n", ret);
}


3.2猜数字


常规思路

输入并判断:

    printf("猜一个吧");
  scanf("&d", &num);
  if (num > ret)
  {
    printf("猜大了");
  }
  else if (num < ret)
  {
    printf("猜小了");
  }
  else
  {
    printf("恭喜你猜对了!!!");
  }

猜大和猜小都需要重新猜,知道猜对为止

所以while循环给死,猜对跳出

void game()
{
  int ret = rand()%100+1;
  int num = 0;
  //printf("%d\n", ret);
  while (1)
  {
    printf("猜一个吧:");
    scanf("%d", &num);
    if (num > ret)
    {
      printf("猜大了\n");
    }
    else if (num < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你猜对了!!!\n");
      break;
    }
  }
}


4.最终成果展示


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>//包含rand和srand函数
#include<time.h>//包含time函数
void menu()
{
  printf("****************\n");
  printf("*    1.play    *\n");
  printf("*    0.exit    *\n");
  printf("****************\n");
}
void game()
{
  int ret = rand()%100+1;
  int num = 0;
  //printf("%d\n", ret);
  while (1)
  {
    printf("猜一个吧:");
    scanf("%d", &num);
    if (num > ret)
    {
      printf("猜大了\n");
    }
    else if (num < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你猜对了!!!\n");
      break;
    }
  }
}
int main()
{
  srand((unsigned int)time(NULL));
  int input = 0;
  do
  {
    //打印菜单
    menu();
    //选择入口
    printf("请选择:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      //游戏逻辑
      game();
      break;
    case 0:
      //退出
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误,请重新输入");
      break;
    }
  } while (input);
  return 0;
}

微信图片_20230414212828.png


如果你觉得这篇文章还不错并且对你有帮助,不妨动动手指点赞收藏加转发,给一个大大的关注

你们的每一次支持都将转化为我前进的动力!!!💗💗💗

目录
相关文章
|
2天前
|
程序员 C语言 索引
【️C语言-游戏设置】---三子棋(N满)
【️C语言-游戏设置】---三子棋(N满)
|
2天前
|
C语言
️️【C语言-游戏设置】---猜数字游戏1~100
️️【C语言-游戏设置】---猜数字游戏1~100
|
10天前
|
C语言
C语言——oj刷题——猜数字游戏
C语言——oj刷题——猜数字游戏
|
10天前
|
C语言
扫雷游戏(C语言)
扫雷游戏(C语言)
|
11天前
|
C语言
C语言游戏实战(12):植物大战僵尸(坤版
C语言游戏实战(12):植物大战僵尸(坤版
25 4
|
18天前
|
安全 C语言
四步手把手教你实现扫雷游戏(c语言)
四步手把手教你实现扫雷游戏(c语言)
25 0
|
18天前
|
程序员 C语言
实现三子棋游戏(C语言)----就是这么简单
实现三子棋游戏(C语言)----就是这么简单
8 2
|
18天前
|
C语言
C语言实现猜数字游戏
C语言实现猜数字游戏
25 1
|
19天前
|
C语言
C语言实现扫雷游戏
C语言实现扫雷游戏
16 0
|
22天前
|
C语言
循环的应用--猜数字游戏、关机程序【c语言篇】
循环的应用--猜数字游戏、关机程序【c语言篇】
31 0