• 猜数字小游戏(加强版)它来了


    学了也有几周c语言了,我们能不能用c语言实现一个小游戏玩一玩? 今天牛牛给大家分享一个猜数字小游戏,希望大家能够喜欢。

    一、游戏设计思路

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

    二、代码的实现

    2.1 菜单

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

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

    2.2 随机数rand函数

    函数名:rand函数
    头文件#include
    格式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);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    函数名:srand函数
    头文件#include
    格式void srand(unsigned seed(种子))
    功能改变rand函数的种子
    返回值

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

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

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

    2.4 提示

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

    2.5 结局

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

    #include 
    #include 
    #include 
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    读取图片输出字符图案:用字符输出足球的图案
    C++前缀和算法:生成数组原理、源码及测试用例
    2023年10月小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案
    Springboot面向会员体系的电商平台an5y9计算机毕业设计-课程设计-期末作业-毕设程序代做
    欧姆龙plc梯形图T_T
    python接口自动化之ConfigParser配置文件的使用
    SLAM从入门到精通(参数处理)
    Git在VSCode中的使用
    Acwing 3208. Z字形扫描 偏移量+扩展图
    java基于springboot+vue的园区入驻停车管理系统
  • 原文地址:https://blog.csdn.net/qq_67276605/article/details/127570677