手写C语言之分支循环应用-编写猜数字游戏(09)(11)

简介: 手写C语言之分支循环应用-编写猜数字游戏(09)

前面文章有一个密码登陆的程序,这里需要强调一下数组是不需要取地址,因为数组本身就是以地址的形式存储的。

猜数字游戏(产生100以内的数字)

游戏可以一直玩,有功能选项!并且我们的游戏一打开就可以运行了,所以我们使用do while循环的模式。

定义功能打印函数

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

每次程序运行之后都需要我们进行打印信息,用于我们的用户进行玩游戏的提示,所以我们需要编写一个打印函数,该函数没有返回值,所以是void!

猜数字函数

//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
  int random_num = rand() % 100 + 1;
  int input = 0;
  while (1)
  {
    printf("请输入猜的数字>:");
    scanf("%d", &input);
    if (input > random_num)
    {
      printf("猜大了\n");
    }
    else if (input < random_num)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
  }
}

这里我们需要产生一个随机值,这里的随机值和我们其他语言(Python)是不一样的,这里为什么要将产生的rand()%100呢?因为这里是随机数的最大值,需要控制在100以内,利用取余操作符,模100=1——99,然后加1,就是1-100的数字。

主函数

int main()
{
  int input = 0;
  srand((unsigned)time(NULL));
  do
  {
    menu();
    printf("请选择>:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      break;
    default:
      printf("选择错误,请重新输入!\n");
      break;
    }
  } while (input);
  return 0;
}

这里首先需要用户输入一个值,这个值那么是0,要么是1,所以它可以作为我们循环是否执行的判断依据,利用switch进行执行。


srand((unsigned)time(NULL));


由于每次生成的随机数要满足随机,所以我们需要利用我们的初始化随机函数种子:


1、拿当前系统时间作为种子,由于时间是变化的,种子也在变化,可以产生随机数。计算机中的随机数实际上都不是真正的随机数,如果两次给的种子一样,则会生成相同的随机序列。 所以,一般都会以当前的时间作为种子来生成随机数,这样更加的随机。

2、使用时,参数可以是unsigned型的任意数据,比如srand(10);

3、如果不使用srand,用rand()产生的随机数,在多次运行,结果是一样的。


而且这个函数只需要调用一次,不然它产生的数比较的逼近,无法模拟真实的游戏场景,所以我们将其初始化随机种子放到我们的main函数。


完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
  printf("**********************************\n");
  printf("*********** 1.play **********\n");
  printf("*********** 0.exit **********\n");
  printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
  int random_num = rand() % 100 + 1;
  int input = 0;
  while (1)
  {
    printf("请输入猜的数字>:");
    scanf("%d", &input);
    if (input > random_num)
    {
      printf("猜大了\n");
    }
    else if (input < random_num)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
  }
}
int main()
{
  int input = 0;
  srand((unsigned)time(NULL));
  do
  {
    menu();
    printf("请选择>:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      break;
    default:
      printf("选择错误,请重新输入!\n");
      break;
    }
  } while (input);
  return 0;
}

image.png

相关文章
|
3天前
|
C语言
C语言---正方形图案--循环
C语言---正方形图案--循环
|
3天前
|
C语言
C语言----循环---n的k次方
C语言----循环---n的k次方
|
3天前
|
C语言
C语言---循环迭代的方式求第n个斐波那契数
C语言---循环迭代的方式求第n个斐波那契数
|
3天前
|
C语言
C语言---循环迭代---n的阶乘
C语言---循环迭代---n的阶乘
|
3天前
|
C语言
C语言-----分支和循环
C语言-----分支和循环
34 0
|
C语言
c语言对对碰游戏源码
c语言对对碰游戏源码
93 0
|
3天前
|
C语言
C语言---函数----实现函数判断year是不是润年
C语言---函数----实现函数判断year是不是润年
|
3天前
|
C语言
C语言---函数----100~n之间的素数
C语言---函数----100~n之间的素数
|
3天前
|
C语言
C语言---函数---请输入乘法口诀表的行,来打印几几乘法表
C语言---函数---请输入乘法口诀表的行,来打印几几乘法表
|
3天前
|
C语言
C语言--函数递归与迭代
C语言--函数递归与迭代