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





相关文章
|
26天前
|
C语言
【C语言】猜数字小游戏的一步一步实现2
【C语言】猜数字小游戏的一步一步实现
|
1月前
|
算法 C语言 C++
【C语言实战项目】三子棋游戏
【C语言实战项目】三子棋游戏
31 1
|
5天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
27天前
|
人工智能 机器人 测试技术
【C/C++】C语言 21点桌牌游戏 (源码) 【独一无二】
【C/C++】C语言 21点桌牌游戏 (源码) 【独一无二】
|
30天前
|
程序员 C语言
【C语言实战项目】通讯录(动态增容版)
【C语言实战项目】通讯录(动态增容版)
21 0
|
1月前
|
编译器 定位技术 C语言
【C语言实战项目】扫雷游戏
【C语言实战项目】扫雷游戏
26 0
|
20天前
|
程序员 编译器 C语言
C语言库函数 — 错误信息报告函数
C语言库函数 — 错误信息报告函数
18 0
|
5天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
1天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
1天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)