【C语言实战项目】猜数字游戏

简介: 【C语言实战项目】猜数字游戏

一.游戏功能描述

首先简介我们想实现的功能描述

1.程序为用户提供一个菜单,供其选择是否开始游戏

2.开始游戏后程序生成一个1~100之间的随机数

3.玩家猜数字:

        1>.猜小了,程序会告诉你猜小了,并且告诉你下次猜的范围

        2>.猜大了,程序会告诉你猜大了,并且告诉你下次猜的范围

        3>.猜对了,程序会告诉你:恭喜你猜对了:>本轮游戏结束

4.游戏可以反复玩直到用户主动退出游戏

游戏运行效果图:


二.对功能的实现的分析

1.实现菜单,且菜单可以提供分支的功能,可以反复执行并且要至少要执行一次。则需要使用switch 和do while循环来实现。

2.系统生成随机数时需要使用rand函数rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。 在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。)同时srand种子可使用传入时间戳的方式来确定入口。

如果还有不了解rand()函数的朋友可以移步【C语言】rand()函数详解,里面有非常详细的关于rand()函数的0基础详解。

3.猜数字环节的实现较为简单,仅需使用if语句来实现生成数与猜测数之间的判断即可。同时缩小猜测范围时需要新引入两个变量(c和d),在if语句中将用户猜测失败的数字赋予c/d,用以下一步提醒用户缩小猜测范围使用。当用户“猜中”数字时,祝贺并结束程序即可。(有能力以后可以编写动画祝贺效果放在结尾,增强用户使用体验)


三.完整程序代码

综上,程序完整代码如下

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//printf函数头文件
#include<stdlib.h>
//rand、srand函数头文件
#include<time.h>
//time函数头文件
 
void menu()//菜单功能函数
{
  printf("***************************\n");
  printf("***************************\n");
  printf("******   1.play    ********\n");
  printf("******   0.exit    ********\n");
  printf("***************************\n");
  printf("***************************\n");
}
 
game()//游戏功能函数
{
  int a = rand()%100+1;
  //使用rand函数生成一个随机数,rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。
  //如果需要生成的数字范围在某一个更小范围内,则可利用rand随机数取模的方式限制其范围。
  int b = 0;
  //该变量用于存放用户猜的数字
  int c = 1;
  int d = 100;
  //以上两个变量用于实现提醒范围缩小的功能,且初始范围为1~100
  while (a != b)//当用户猜的数字和系统生成数字相等时,跳出循环,游戏结束
  {
    scanf("%d", &b);//接收用户所猜数字存入变量b中
    if (b > a) 
    {
      d = b;//缩小单边范围
      printf("猜大了\n");
      printf("请猜一个%d~%d之间的数:", c, d);
    }
    else if (b < a) 
    {
      c = b;//缩小单边范围
      printf("猜小了\n");
      printf("请猜一个%d~%d之间的数:", c, d);
    }
    else //当a=b时,弹出提醒,跳出循环,游戏结束
    {
      printf("恭喜你,猜对了!本轮游戏结束:>\n");
    }
  }
}
int main()
{
  int input = 0;
  srand((unsigned int)time(NULL));
  //在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1
  //随机种子相同,每次产生的随机数也会相同
  //为了避免每次游戏产生随机数的入口都相同的情况,调用srand函数且传入当前时间戳用以确定本轮游戏随机数生成的入口
  //注:一次程序运行只需要使用srand函数确定一次入口就行,如果每次随机数的生成都依赖srand则可能会因为生成时间相近而导致生成的随机数相近甚至相同
  do
  {
    menu();
    printf("请选择:>\n");
    scanf("%d", &input);
    switch (input)//用于判断用户是否开始游戏
    {
    case 1:
      printf("请猜一个1~100之间的数字:");
      game();
      break;
    case 0:
      printf("退出程序\n");
      break;
    default://当用户输入除0/1的数据时,用以提醒其输入错误
      printf("输入错误,请重新输入\n");
      break;
    }
  } while (input);
  //while判断部分,因为0为假,不执行,其他均为真,循环会继续执行,因此直接将input变量放入判断部分即可
  return 0;
}

总结

该篇博客用以纪念第一次使用C语言尝试实现编写一个功能较为完整的游戏程序,虽然过程磕磕绊绊,也有许多地方自己理解的还不够透彻,但总算是按照自己脑海里的设想成功编写出了这个程序,很难想象一个月以前自己还是一个在班级团建时傻傻参与这个游戏的新生,而一个月之后自己就能凭借专业能力在计算机上复现该游戏了,这让我第一次体验到了计算机程序与我们生活的贴合之近,也体悟到了计算机与人脑的逻辑差异。此时感到程序员作为二者之间沟通的桥梁的重要性,愿以后能成为计算机与生活间一条优秀可靠的桥梁吧!加油!





相关文章
|
2月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
104 0
|
19天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
30 1
|
2月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
2月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
85 1
|
2月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
2月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
37 0
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3
|
18天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
31 6
|
1天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
19 6
|
2月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
43 10