猜数字小游戏(随机生成’三剑客‘)

简介: 猜数字小游戏(随机生成’三剑客‘)

大家好,我是一只励志要翻身的小牛,废话少说,下面就给大家介绍第一个C语言小游戏——猜数字小游戏!


一、游戏规则

至于猜数字嘛,见名知意,规则无非就是:玩家反复输入猜的数字直到猜对为止,下面,我们就通过C语言实现一个1-100之间的猜数字游戏,老铁们准备好了吗,发车了!

二、效果展示

三、游戏设计思路

1.游戏交互界面

       (1)创建游戏菜单

       (2)创建游戏逻辑主体

2.猜数字游戏

       (1)电脑生成随机数字

       (2)玩家输入数字

       (3)判断是否猜对

四、游戏交互界面

1.创建游戏菜单

玩游戏怎么能没有菜单呢,下面我们创建一个简易的菜单供玩家选择:

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

2.创建游戏逻辑主体

游戏的逻辑的是否完美实现是整个游戏成败的关键,对于这样一个简单的小游戏我们可以这样实现游戏主体逻辑:

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("选择错误\n");
      break;
    }
  } while (input);//这里用do while 循环是因为这个游戏需要至少进去一次
                //特点:先执行,后判断
  return 0;
}

1、因为游戏是面向用户的,所以这里需要定义并调用菜单函数——menu()

2、因为游戏至少可以进入一次,所以用do-while()循环——代码至少执行一次

注意:while(input)——循环条件input的巧妙之处,C语言中0为假,非0为真,所以这里用户输入1或输入 其他非0数字导致错误,都会再次调出菜单让用户选择,无需增加其他条件。

当然了这里的猜数字游戏函数-game()还未定义,我们接下来我们就需要对 game()函数进行实现:

五、游戏实现

1、随机数生成”三剑客“

我们回到游戏的设计思路,其实猜数字游戏中最重要的一步就是生成随机数,那我们应该如何生成随机数呢?这里C语言为我们提供了随机数生成三剑客:rand--srand--time

(1)随机数生成器:rand函数

rand()函数的属性:int rand (void)——生成随机整数(0-32767)

分析:rand()函数接受参数为空,返回一个int类型的随机整数。头文件-stdlib.h

但是rand()函数真的随机吗?我们下面一探究竟:

#include <stdio.h>
#include<stdlib.h>
int main()
{
  int i = 5;
  while (i)
  {
    int ret = rand();
    printf("%d\n", ret);
    i--;
  }
  return 0;
}

执行3次结果:

可以发现,循环5次后,每组的随机数据都一致,因此答案就很明显了,rand()函数是假随机。

(2)随机数发生器的初始化函数:srand函数

那么我们还有没有办法让它真随机呢?办法当然是有的啦,C语言同时为我们提供了一个随机数发生器的初始化函数:srand函数--配合rand函数使用,设置随机数生成起点

srand()函数属性:void srand (unsigned int seed)

分析:srand函数接受一个unsigned int类型,返回空(不需要返回值->设置随机数生成起点),头文件-stdlib.h

执行结果:

可以发现,rand函数生成的随机值随srand函数接受参数变化而变化,要想让rand函数生成一个随机数,srand函数就需要接收一个随机值

(3)获取时间戳:time函数:

那么这个随机值去哪找呢?因为时间是不断变化的,因此我们可以让srand函数接收一个时间戳。 这里引出获取时间戳:time函数:

time函数属性:time_t time (time_t* timer)

分析:time函数接收一个指针类型,返回time_t类型,头文件-time.h

(4)三剑客的”有机结合“ -真随机的实现

1.rand函数的属性:int rand (void)

2.srand函数属性:void srand (unsigned int seed)

3.time函数属性:time_t time (time_t* timer)

了解了“三剑客”各自的属性,就可以开始配置随机数生成器,实现“真随机 ”

//生成随机数的大致逻辑结构
#include<stdlib.h>
#include<time.h>
int main()
{
  srand((unsigned int)time(NULL));
  int ret = rand();
  return 0;
}

注意:

1、time函数接收指针类型参数,所以传入NULL-空指针

2、srand函数接收unsigned int类型参数 ,所以将time返回类型time_t转换为unsigned int类型

2、玩家输入与判断

玩家输入与判断模块通过简单的while循环语句与if判断语句即可实现,这里就不再分开赘述,代码如下:

void game()
{
  int a = 0;
  //rand()函数生成一个随机数
  int ret = rand() % 100 + 1;//1-100之间的随机数
  while (1)//1为真,让他一直循环,直到猜对
  {
    printf("请猜数字:");
    scanf("%d", &a);
    if (a > ret)
    {
      printf("猜大了\n");
    }
    else if (a < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了!\n");
      break;
    }
  }
}


注意:

1、这里的srand函数放到了主函数中,因为调用一次函数就会设置一个随机数的生成器,不需要重复调用。

2、 rand()%100+1的含义:因为rand生成随机整数范围是(0-32767),所以rand()%100限定了范围(0-99),加1满足(1-100)范围需求。

六、完整代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
  printf("**************************************************\n");
  printf("*******      1->play       0->exit        ********\n");
  printf("**************************************************\n");
}
void game()
{
  int a = 0;
  //rand()函数生成一个随机数
  int ret = rand() % 100 + 1;//1-100之间的随机数
  while (1)//1为真,让他一直循环,直到猜对
  {
    printf("请猜数字:");
    scanf("%d", &a);
    if (a > ret)
    {
      printf("猜大了\n");
    }
    else if (a < 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("选择错误\n");
      break;
    }
  } while (input);//这里用do while 循环是因为这个游戏需要至少进去一次
                //特点:先执行,后判断
  return 0;
}

七、结语

铁汁们,猜数字游戏这点事大家都明白了吗?如果本文对你有所帮助的话,请给博主一个一键三连哦🥰


相关文章
|
6月前
|
Python
用四个数字实现不重复的三位数如何用python实现
主要是利用三个循环,三个嵌套循环让三个数字组合,如果是三个不同的数字就可以打印出来,同时用一个sum来统计他们的个数,最后将print置于最右打印出总数。
104 0
|
6月前
|
存储 算法 编译器
捣蛋小游戏——猜数字
捣蛋小游戏——猜数字
|
6月前
|
存储 Python
如何使用Python实现“猜数字”游戏
本文介绍了使用Python实现“猜数字”游戏的过程。游戏规则是玩家在给定范围内猜一个由计算机随机生成的整数,猜对则获胜。代码中,首先导入random模块生成随机数,然后在循环中获取玩家输入并判断大小,提供猜小、猜大提示。通过增加猜测次数限制、难度选择、优化输入提示和图形化界面等方式可优化游戏。这篇文章旨在帮助初学者通过实际操作学习Python编程。
248 2
|
6月前
L1-056 猜数字
L1-056 猜数字
28 0
猜数字小游戏
猜数字小游戏
60 0
|
6月前
|
C++
【PTA】L1-056 猜数字 (C++)
【PTA】L1-056 猜数字 (C++)
72 0
【PTA】L1-056 猜数字 (C++)
|
6月前
|
BI
猜数字
猜数字
34 0
|
6月前
LCP 01. 猜数字
LCP 01. 猜数字
31 0
|
C语言
透过猜数字的小游戏来重新认识和学习随机数(rand())和时间函数(time(NULL))
透过猜数字的小游戏来重新认识和学习随机数(rand())和时间函数(time(NULL))
|
存储 C语言
你也能做的简单版猜数字游戏(和优化版猜数字)
你也能做的简单版猜数字游戏(和优化版猜数字)