C语言实现猜数字小游戏(详细教程)

简介: C语言实现猜数字小游戏(详细教程)

引言

本文将带领大家一步步使用C语言编写一个经典的猜数字小游戏。通过这个项目,你将学习到C语言的基本语法、控制结构以及如何与用户进行交互。无论你是编程初学者还是有经验的开发者,这个项目都将为你提供一个实践C语言编程的机会。让我们开始这段编程之旅吧!

一、游戏规则

游戏规则如下:

1.游戏的目标是猜出一个由计算机随机生成的1到1000之间的整数。

2.玩家有9次机会来猜测这个数字。

3.每次猜测后,计算机会提供提示,告诉玩家猜的数字是太高、太低还是正确。

4.如果玩家在9次机会内猜对了数字,则获胜;否则,游戏结束。

5.玩家可以输入任何1到1000之间的整数进行猜测。

6.如果玩家输入的数字不在1到1000的范围内,计算机将提示错误并要求重新输入。

7.每次猜测都是独立的,前面的猜测不会影响后面的猜测。

8.玩家可以通过逻辑和推理来缩小猜测范围,提高猜中的几率。

二、设计思路

1. 制作菜单

设计一个简单的文本菜单,提供开始游戏和退出游戏的选项。

使用printf函数显示菜单选项,并通过scanf函数获取玩家的输入选择。

判断玩家输入的选项:如果输入1,则开始游戏;如果输入0,则退出游戏。

2.生成随机数

在游戏开始前,使用srand函数和time函数来初始化随机数生成器,确保每次游戏都能产生不同的随机数。

使用rand函数生成一个1到1000之间的随机整数,作为玩家需要猜测的目标数字。

rand函数

C语言中提供了一个函数叫rand,这个函数是用来生成0~RAND_MAX(32767)之间的伪随机数。函数原型如下:

#include<stdlib.h>//rand函数所需的头文件
int rand(void);//函数原型,返回值为伪随机数

srand函数

C语言提供了一个函数叫srand,这个函数用来初始化随机数的生成器,通过调用srand函数的参数seed来设置rand函数的随机种子,从而达到生成随机数的效果。函数原型如下:

#include<stdlib.h>//srand函数所需的头文件
void srand(unsigned int seed);//函数原型

time函数

C语言中提供了一个函数叫time,用来获取当前时间戳,返回值为time_t类型。函数原型如下:

#include<time.h>//time函数所需的头文件
time_t time(time_t* timer);
//当timer非空时,函数会返回时间戳
//并将这个时间戳存储在函数返回的变量中;
//time为空时,只返回时间戳

3.逻辑判断与玩家互动

提示玩家输入猜测的数字,并通过 scanf 函数读取玩家的输入。

设置一个循环,允许玩家最多猜测9次。在每次猜测后,使用条件语句(if-else)来判断玩家输入的数字与目标数字的关系。

如果玩家猜对了,显示祝贺信息并结束游戏。

如果玩家猜错了,给出提示,并允许玩家继续猜测,直到用完所有的机会。

4.结束处理

如果玩家在9次尝试内猜对了数字,显示胜利消息,并使用 system("cls") 来清屏。

如果玩家用完了所有机会仍未猜对,显示失败消息,并告知正确答案,然后使用 system("cls") 来清屏。

三、 游戏设计

1.菜单函数

首先,我们需要制作一个简易的游戏菜单,代码如下:

void menu()
{
  printf("****************************\n");
  printf("*******    1.play    *******\n");
  printf("*******    0.exit    *******\n");
  printf("****************************\n");
 
}
//玩家按1开始游戏,按0则结束游戏

2.主函数

主函数用来控制按1开始游戏/按0退出游戏,并且多次进行直到玩家退出。

这里我们用switch来实现玩家的选择,用do...while循环语句保证游戏的多次进行。代码如下:

int main()
{
  int option;
  srand((unsigned int)time(NULL));//利用返回的时间戳提供随机种子
  do
  {
    system("cls");//用于清除缓冲区,后一次玩的时候清除前面记录
    menu();//调用菜单函数
    printf("请做出你的选择:>");
    scanf("%d", &option);//玩家输入选择
    switch (option)//switch语句实现玩家的选择
    {
    case 1:
    {
      game();//调用游戏功能函数
      break;
    }
    case 0:
    {
      printf("游戏结束\n");
      break;
    }
    default:
      printf("输入有误,请重新输入\n");
      system("pause");//用来暂停程序,按下后继续运行,即运行循环开头的清除缓冲区功能
      break;
    }
  } while (option);
 
}

3.游戏功能函数

用rand生成1~1000之间的随机数。再设置一个循环,允许玩家最多猜测9次,在每次猜测后,使用条件语句(if-else)来判断玩家输入的数字与目标数字的关系来给出相应提示。代码如下:

void game()
{
  int guess=0;//该变量为玩家即将输入的数字
  int num = rand() % 1000 + 1;//产生一个1~1000的随机数
  int chance = 9;//这里设置共有9次机会
  while (1)
  {
    printf("你还有%d次机会\n", chance);
    printf("请猜数字:>");
    scanf("%d", &guess);
    if (guess > num)
    {
      printf("不对哦,再往小了猜\n");
    }
    else if (guess < num)
    {
      printf("不对哦,再往大了猜\n");
    }
    else
    {
      printf("恭喜你猜中了!\n");
      system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
      break;
    }
    chance--;
    if (chance == 0)
    {
      printf("很遗憾,你没有猜出\n");
      printf("正确答案是%d\n", num);
      system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
      break;
    }
  }
}

四、完整代码及运行效果图

完整源代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
  printf("****************************\n");
  printf("*******    1.play    *******\n");
  printf("*******    0.exit    *******\n");
  printf("****************************\n");
 
}
void game()
{
  int guess = 0;
  int num = rand() % 1000 + 1;//产生1~1000的随机数
  int chance = 9;//这里设置共有9次机会
  while (1)
  {
    printf("你还有%d次机会\n", chance);
    printf("请猜数字:>");
    scanf("%d", &guess);
    if (guess > num)
    {
      printf("不对哦,再往小了猜\n");
    }
    else if (guess < num)
    {
      printf("不对哦,再往大了猜\n");
    }
    else
    {
      printf("恭喜你猜中了!\n");
      system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
      break;
    }
    chance--;
    if (chance == 0)
    {
      printf("很遗憾,你没有猜出\n");
      printf("正确答案是%d\n", num);
      system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
      break;
    }
  }
}
int main()
{
  int option;
  srand((unsigned int)time(NULL));
  do
  {
    system("cls");//用于清除缓冲区,后一次玩的时候清除前面记录
    menu();
    printf("请做出你的选择:>");
    scanf("%d", &option);
    switch (option)
    {
    case 1:
    {
      game();
      break;
    }
    case 0:
    {
      printf("游戏结束\n");
      break;
    }
    default:
      printf("输入有误,请重新输入\n");
      system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
      break;
    }
  } while (option);
 
}

运行效果图如下:

总结

通过这个项目,我们不仅学习了C语言的基本语法和控制结构,还学习了如何与用户进行交互。无论你是编程初学者还是有经验的开发者,这个项目都为你提供了一个实践C语言编程的机会。

最后,我们希望这个项目能够激发你对编程的兴趣,并鼓励你继续学习C语言和其他编程语言。编程是一项有趣且有用的技能,能够帮助你解决问题、创造工具和实现自己的想法。感谢阅读,祝你在编程之旅中取得进步!


相关文章
|
5月前
|
算法 C语言
【C语言】猜数字小游戏的一步一步实现1
【C语言】猜数字小游戏的一步一步实现
|
5月前
|
C语言
【C语言】猜数字小游戏的一步一步实现2
【C语言】猜数字小游戏的一步一步实现
|
12月前
|
C语言
50行代码带你实现一个猜数字小游戏——c语言
50行代码带你实现一个猜数字小游戏——c语言
207 0
|
3月前
|
存储 C语言
【C语言】猜数字小游戏
C语言实现猜数字小游戏
34 2
【C语言】猜数字小游戏
|
4月前
|
程序员 C语言
C语言小游戏之猜数字
C语言小游戏之猜数字
32 5
|
5月前
|
C语言
史上最简单的C语言猜数字小游戏(1—100随机数)
史上最简单的C语言猜数字小游戏(1—100随机数)
|
5月前
|
C语言
用C语言写一个猜随机数的小游戏
用C语言写一个猜随机数的小游戏
42 0
|
11月前
|
C语言
C语言经典小游戏 -- 猜数字
C语言经典小游戏 -- 猜数字
40 1
|
Java C语言
用C语言写一个猜数字小游戏
用C语言写一个猜数字小游戏
60 0
|
C语言
C语言实现小游戏之猜数字
C语言实现小游戏之猜数字
78 0