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语言和其他编程语言。编程是一项有趣且有用的技能,能够帮助你解决问题、创造工具和实现自己的想法。感谢阅读,祝你在编程之旅中取得进步!


相关文章
|
2月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
2月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
85 1
|
2月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
3月前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
61 1
C语言——实现贪吃蛇小游戏
|
3月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
50 1
C 语言——实现扫雷小游戏
|
2月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
2月前
|
编译器 C语言 C++
VSCode安装配置C语言(保姆级教程)
VSCode安装配置C语言(保姆级教程)
|
2月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
2月前
|
C语言
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)
|
2月前
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)