首页 > 其他分享 >C语言实现猜数字小游戏

C语言实现猜数字小游戏

时间:2023-09-20 13:06:44浏览次数:40  
标签:count rand 数字 int 玩家 小游戏 随机数 printf C语言

C语言实现猜数字小游戏_头文件

@TOC

学了也有几周c语言了,我们能不能用c语言实现一个小游戏玩一玩?

今天牛牛给大家分享一个猜数字小游戏,希望大家能够喜欢。

一、游戏设计思路

1.菜单: 设计一个”菜单“,让玩家可以选择”玩游戏“或者”不玩“。 2. 随机数:每次进入游戏,程序会自动生成一个”随机数“为目标数字(设置范围,不可过大)。 3. 限定次数:给玩家营造紧张的氛围,我们限定最多的猜测次数。 4. 选择难度:猜测的次数由玩家自己选择。 5.提示: 玩家每次猜测数字的时候程序会给出相应提示(比目标数字大还是小?) 6. 结局:玩家成功或者失败给出相应的结果。

二、代码的实现

2.1 菜单

我们可以用自定义函数打印一个游戏菜单。 如下:

void menu()//游戏菜单
{
	printf("***************************************************\n");
	printf("*********   1.玩游戏      ******      2.不玩*******\n");
	printf("***************************************************\n");
	printf("请选择:\n");
}

2.2 随机数rand函数

函数名:

rand函数

头文件

#include <stdlib.h>

格式

int rand(void)

返回值

返回生成伪随机数的整数

rand函数会生成的随机数是int型的整数。最小值为0,但最大值(RAND_MAX)由编程环境决定,最大值最低不得低于32767.

int main()
{
	int retry=0;//是否再运行一次
	do
	{
		printf("随机数是%d\n", rand());
		printf("是否再运行一次:(1)是,(0)否\n");
		scanf("%d", &retry);
	} while (retry);

}

C语言实现猜数字小游戏_随机数_02

通过上述代码运行结果我们发现,虽然我们的确生成了一组随机数(随机数列),但是每次重新重新生成随机数列的时候,随机数列都是一样的,这就很令人费解,这到底是不是随机数列啊? 其实rand函数是对一个叫做”种子”的基准值来运算生成的,之所以前面每次生成的随机数列都相同是因为rand函数默认的种子是常量1,要生成不同的随机数列就得改变种子的值。 那么怎么改变种子的值呢? 改变种子的值:srand函数

函数名:

srand函数

头文件

#include <stdlib.h>

格式

void srand(unsigned seed(种子))

功能

改变rand函数的种子

返回值


例如:srand(10)就是将rand函数的种子改成了10. 我们希望种子的值是变化的,那样rand函数生成的随机数组才是完美的随机数列。 时间不就是在一直变化吗? srand((unsigned)time(NULL));//这样就可以根据时间来改变种子了。 time函数的头文件是#include <time.h> 最后:我们将rand() % 100 + 1就会=得到1到100之间的数了。

2.3 根据难度设置猜测的次数

我们设置难度级别分别为1到3三个级别。 1级三次机会 2级五次机会 3级十次机会 用count(表示机会的次数)作为玩家循环猜测的次数。 当难度不同时,count值不同。

2.4 提示

玩家如果盲目的猜数字也太难了,所以我们在每次玩家猜测过后给出相应提示,让玩家有更好的游戏体验。 比如:告诉玩家较于目标数字是大还是小,玩家还有几次机会。

2.5 结局

当玩家猜对成功后:我们恭喜玩家。 失败了:安慰一下玩家。 到这里我们的加强版猜数字游戏就结束了,如果有什么不理解的地方欢迎大家私信或者评论区指出哦。牛牛会一 一改正的。 下面是完整版的原码:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
	printf("***************************************************\n");
	printf("*********   1.玩游戏      ******      2.不玩*******\n");
	printf("***************************************************\n");
	printf("请选择:\n");
}
void game()
{
	int num = rand() % 100 + 1;//产生一个1到100的随机值
	int guess = 0;//定义一个玩家猜测的数
	int count = 0, i = 0, diffculty = 0;//count表示还剩几次机会,nandu表示游戏难度
	printf("游戏名:猜数字游戏\n");
	printf("游戏规则:系统会自动生成一个1到100之间的数,玩家在有限的机会内猜对。\n");
	printf("请选择游戏难度:1级别=三次机会   2级别=五次机会  3级别=十次机会\n");
	scanf("%d", &diffculty);//让玩家选择难度
	if (diffculty == 1)//难度为a时,次数为3
	{
		count = 3;
	}
	else if (diffculty == 2)//难度为b时,次数为5
	{
		count = 5;
	}
	else if (diffculty == 3)//难度为c时,次数为10
	{
		count = 10;
	}
	for (; count > 0; count--)//根据难度限定循环次数
	{
		printf("您还有%d次机会\n请输入:", count);//告诉玩家自己还有几次机会
		scanf("%d", &guess);//从键盘读取玩家猜测的数字
		if (guess < num)
		{
			printf("牛牛告诉你:您猜小了,往大猜一点。\n");
		}
		else if (guess > num)
		{
			printf("牛牛告诉你:您猜大了,往小猜小一点\n");
		}
		else if (guess == num)
		{
			printf("恭喜您,猜对了,您太厉害了!\n");
			break;
		}
	}
	if (count == 0)//次数用完了
	{
		printf("很遗憾,你失败了,不要灰心,我们再来一次。\n\n");
	}
}
int main()
{
	srand(time(NULL));//根据时间改变种子的值
	int n = 0;
	do
	{
		menu();
		scanf("%d", &n);//让玩家在菜单中选择
		switch (n)
		{
		case 1://代表玩游戏
			game();
			break;
		case 2:
			break;
		default:
			printf("没有这个选项哦。\n");//玩家不小心输错了
			break;
		}
	} while (n - 2);//当玩家选择2时,代表不玩了
	return 0;
}

标签:count,rand,数字,int,玩家,小游戏,随机数,printf,C语言
From: https://blog.51cto.com/u_16029969/7536264

相关文章

  • 企业该如何选择数字化转型工具?_光点科技
    随着科技的不断进步和数字化的浪潮席卷全球,企业数字化转型已经成为了保持竞争力和持续增长的关键因素之一。无论企业规模大小,数字化转型都可以提高效率、降低成本、改善客户体验,从而实现更好的业务结果。然而,要成功进行数字化转型,企业首先需要选择适合自己的数字化工具。1.明确数字......
  • 学习C语言的第六天
    先说下今天的心情吧,今天看的课感觉真的是开始上难度了,有一些逻辑复杂的地方要把视频反复看四五遍才能明白,不知道我这种笨蛋能不能学好C语言。。。还是对自己得有点信心,肯定能学好!下面是今天的内容啦!For循环之前不是很明白for循环和while循环的区别,这两天在chatgpt刨根问底了一下,总......
  • 七天学会C语言-第四天(数组)
    1.定义一维数组在C语言中,一维数组是具有相同数据类型的元素的有序集合。定义一维数组的基本语法如下:data_typearray_name[array_size];其中:data_type 是数组元素的数据类型,可以是整数、浮点数、字符等。array_name 是数组的名称,你可以自定义。array_size 是数组的大小,指定了数......
  • 数字孪生:助力机载软件构型管理
    飞机机载软件具有研发周期长、版本更新频繁、相关工程资料密集等特性。由于各个系统的软件分别由不同供应商开发,其设计保障等级、设计架构、实现方法等方面都各有不同,对机载软件进行高效、规范的构型管理显得尤为重要。Q:什么是构型管理?A:构型指“一个现有的或计划之中的产品或产......
  • C语言 数据类型范围打印
    C语言中的数据类型有不同的范围,这些范围可以通过标准库中的头文件<limits.h>或<float.h>来查看。测试代码:voidlimits_test(void){/*limits.h*//*bit*/printf("%s=\t+%d\n",STR(CHAR_BIT),CHAR_BIT);/*char*/printf("%s=\t%d\n",STR......
  • 素数判定的C语言程序
    ```c#include<stdio.h>intmain(void){  inti,n;  printf("请输入一个数字:");  scanf_s("%d",&n);  for(i=2;i<n;i++)    if(n%i==0)      break;  if(i<n)    printf("%disdivi......
  • 知识付费平台开发技术实践:构建数字学习的未来
    引言知识付费平台的兴起正在塑造着数字学习的未来。本文将介绍一些关键的技术实践,帮助开发者构建强大的知识付费平台,提供出色的数字学习体验。1.选择适当的技术栈在开始知识付费平台的开发之前,首要任务是选择适当的技术栈。这包括后端开发语言、数据库、前端框架等。常用的后端语......
  • 》》》java中文数字日期转为阿拉伯数字日期
    转载:java中文数字日期转为阿拉伯数字日期_java中文日期_小灰灰__的博客-CSDN博客Java本身没有内置直接将中文数字日期转换为阿拉伯数字日期的库。你可能需要使用其他方法来实现这个功能。一种常见的方法是通过自定义映射或正则表达式来实现中文数字到阿拉伯数字的转换。下面是......
  • 空压机数字化管理平台有什么功能?
    空压机是很多行业重要的机械动力设备之一,保持其安全稳定运行对于企业经营管理有重要作用。随着通信技术和自动化控制技术的发展,通过互联网实现对设备运行情况的集中管理和远程监控日益重要。 为实现将分布在各地的空压机集中管理,监控各个空压机设备欸的运行数据,同时提供能耗数据以......
  • 「南凌科技SASE DAY」助力企业数字化转型的挑战和应对实践
    近日,Gartner发布最新的2023网络技术成熟度曲线,可以看出SASE已经走出了最初的炒作期,开始逐步迈向新一轮的实用落地阶段。在此背景下,9月15日南凌科技在上海举办「SASE技术论坛」,邀请到信通院技术与标准研究所的SASE和算网融合领域专家、各行业和企业相关负责人,共同探讨SASE实践中的......