详解C语言实现猜数字游戏

作者:build.code 时间:2023-11-03 04:58:51 

前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法。

一:猜数字游戏基本介绍&对程序预期

.猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到玩家猜对为止。

2.程序预期:猜数字结束后,玩家如果猜对了的话可以继续游戏,也可以退出游戏

二:程序设计思路

1.总体思路:

首先,实现游戏功能必须要有一个菜单来提示玩家如何进行操作。其次,为了代码具有可读性,可以将游戏部分函数和菜单部分函数作为两个子函数,然后在主函数调用他们。然后我们为了实现玩家可以多次游戏可以使用循环。

综上所述,我们应该设计两个子函数:菜单函数和游戏函数。一个主函数

2.菜单部分函数:

菜单部分函数

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

菜单函数设计相对简单,只是为了提示玩家如何操作

3.游戏部分函数

void game()
{
srand((unsigned int)time(NULL));
int ret = rand() % 100 + 1;
while (1)
{
printf("猜数字\n");
int guess = 0;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}

①在游戏函数部分,首先要生成随机数,生成随机数的方法如下:

C语言中提供了生成随机数的函数rand函数

详解C语言实现猜数字游戏

rand函数会返回一个0到RAND-MAX的随机整数,使用这个函数需要包含头文件<stdlib.h>

但是rand函数每次生成的随机数相同,所以只用rand函数不够,所以要使用srand()函数增加随机性 

详解C语言实现猜数字游戏

后一句中说明在使用rand函数前要定义一个srand()函数

详解C语言实现猜数字游戏

如画线句所示,srand函数的作用就是一个随机数的生成的种子。

而且需要一个无符号整型,在srand函数中括号输入一个随机数字即可生成随机数,时间正是一个一直在变化的数字。

在这里提出一个时间戳的概念:时间戳是指格林威治时间1970年01月01日00时00分00秒 (北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

详解C语言实现猜数字游戏

因为srand需要的参数是无符号类型,所以对time进行强制类型转换。time后不需要参数,所以给他一个空指针。

使用srand((unsigned int)time(NULL))

输入time返回一个时间戳

详解C语言实现猜数字游戏

需要一个头文件<time.h>

因为给出的随机数范围太大,所以需要限定随机数范围

如下:int ret = rand()%100+1,将随机数限定在0-100区间,便于猜测

②:猜数字环节

利用while循环来逐步缩小猜测范围,当猜测的数字等于随机数时提示”猜对了“。

4.主函数部分

int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入");
}
} while (input);
return 0;
}

主函数中使用了switch语句,和do-while语句

主要目的是为了玩家选择是否进入游戏

5.代码主体

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<time.h>void menu(){printf("***********************************************\n");printf("*************************1play*****************\n");printf("*************************0exit*****************\n");printf("***********************************************\n");}void game(){srand((unsigned int)time(NULL));int ret = rand() % 100 + 1;while (1){printf("猜数字\n");int guess = 0;scanf("%d", &guess);if (guess > ret){printf("猜大了\n");}else if (guess < ret){printf("猜小了\n");}else{printf("猜对了\n");break;}}}int main(){int input = 0;do{menu();scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("输入错误,请重新输入");}} while (input);return 0;}#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
void menu()
{
printf("***********************************************\n");
printf("*************************1play*****************\n");
printf("*************************0exit*****************\n");
printf("***********************************************\n");
}
void game()
{
srand((unsigned int)time(NULL));
int ret = rand() % 100 + 1;
while (1)
{
printf("猜数字\n");
int guess = 0;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入");
}
} while (input);
return 0;
}

三:总结

此程序主要为了熟悉循环和分支的具体用法,并且学会利用时间戳和rand函数生成随机数。

来源:https://blog.csdn.net/m0_63807219/article/details/122525515

标签:C语言,实现,猜数字,游戏
0
投稿

猜你喜欢

  • java容器详细解析

    2023-08-23 16:13:38
  • java使用Abobe Acrobat DC生成模板

    2022-04-14 21:03:12
  • Android实现环形进度条的实例

    2023-01-11 17:39:22
  • Java双向链表的操作

    2021-07-31 02:54:33
  • C#将时间转成文件名使用方法

    2022-08-15 05:59:22
  • springboot自动配置原理解析

    2021-06-01 17:54:33
  • Android不规则封闭区域填充色彩的实例代码

    2022-10-17 08:33:05
  • SpringMVC如何接收参数各种场景

    2022-01-23 22:56:24
  • java io文件操作从文件读取数据的六种方法

    2023-05-17 02:54:40
  • Java Spring框架简介与Spring IOC详解

    2021-08-06 03:05:56
  • java线程组构造方法源码解析

    2022-11-24 08:58:26
  • 基于Spring Mvc实现的Excel文件上传下载示例

    2022-01-22 02:02:56
  • c#根据网址抓取网页截屏生成图片的示例

    2021-08-31 14:29:13
  • 使用SharedPreferences在Android存储对象详细代码

    2022-06-14 12:50:29
  • springboot项目中使用Swagger的简单示例

    2023-01-14 05:18:24
  • C#微信开发之获取接口调用凭据

    2023-10-28 07:57:54
  • 谈谈Hashmap的容量为什么是2的幂次问题

    2022-12-27 18:42:35
  • Spring Boot深入排查 java.lang.ArrayStoreException异常

    2023-07-11 16:31:27
  • SpringCloud Gateway HttpWebHandlerAdapter链路调用请求流程介绍

    2023-04-29 00:12:18
  • MyBatis实践之DAO与Mapper

    2022-09-28 23:19:32
  • asp之家 软件编程 m.aspxhome.com