C语言实现猜数字游戏

游戏结构的搭建

为什么用do while来搭建游戏呢

我们都玩过各种电竞游戏吧,如王者荣耀,英雄联盟,金铲铲等游戏吧。我们要玩游戏是不是得先进入游戏页面,才看自己是玩游戏还是退出游戏,如果玩玩一把不过瘾,想再玩一把,就属于一个循环过程。总的来说,这是一个先执行后循环的过程,所以我们选择do while来搭建游戏框架。

                                 do while中switch的作用

玩游戏肯定要点开始游戏,或者玩累了要退出游戏,亦或者既没有选择玩游戏和退出游戏,选择了别的,所以我们这使用switch。

              为什么退出游戏使用的是case 0,而不使用case 2呢?

首先,case后面的break只能跳出switch语句,而不能跳出do while语句,这里我们先跳出switch语句,如果想跳出do while语句,就得让do while(条件)中的条件为假,就能停止循环,所以我们退出游戏使用case 0。

                                            菜单函数

                                    游戏函数的实现

游戏中实现模式选项

我们依然使用switch语句来实现模式的选择

模式选项菜单函数

while(条件)中的条件

因为我们的switch中case后面的常量表达式是1,2,3。

所以default代表处1,2,3之外的其他数,当我们选错是,就能重新选择。

怎么实现随机数的生成

rand函数

生成随机数,我们使用了rand函数,但是rand的随机数是伪随机数,它是根据种子来生成的,而种子是固定的,所以每次生成的随机数都相同。

srand函数

因为rand的种子一样,所以我们使用srand函数来随机生成一个种子,又因为srand需要一个无符号整形的种子参数,所以我们用(unsigned)time(NULL)。

time函数

我们只需要给time函数传空指针NULL,他会给我们返回当前时间的时间戳。这样的话就可以实现时间种子生成随机数。

头文件

使用rand函数和srand函数以及time函数我们都需要引头文件

rand函数与srand函数的头文件是#include<stdlib.h>

time函数的头文件是#include<time.h>

游戏判断大小以及剩余机会

	while (count) {
		printf("请输入你要猜的数字>>");
		scanf("%d", &answer);
		if (answer > 100 || answer < 1)
		{
			printf("请在1到100之间猜\n");
			count--;
			printf("你还剩%d次机会\n", count);
		}
		if (answer > ret)
		{
			printf("     猜大了\n");
			count--;
			if (count == 0)
			{
				printf("正确答案是>>%d\n", ret);
				break;
			}
			printf("你还剩%d次机会\n", count);
		}
		if (answer < ret)
		{
			printf("     猜小了\n");
			count--;
			if (count == 0)
			{
				printf("正确答案是>>%d\n", ret);
				break;
			}
			printf("你还剩%d次机会\n", count);
		}
		if (answer == ret)
		{
			printf("    恭喜你,猜对了\n");
			break;
		}
	}

while(count)中的count来接收上面选择的的游戏模式

三个if分别判断你猜的数字是否在范围内,以及猜大了,猜小了还是猜对了。

每次count--,代表剩余的次数。

游戏代码分享

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void menu()
{
	printf("***************************\n");
	printf("*******1.玩游戏************\n");
	printf("*******0.退出游戏**********\n");
	printf("***************************\n");
}
void difficulty()
{
	printf("***************************\n");
	printf("*******1.简单**************\n");
	printf("*******2.困难**************\n");
	printf("*******3.炼狱**************\n");
	printf("***************************\n");

}
void game()
{
	int ret = rand() % 100 + 1;
	int answer = 0;
	int option = 0;
	int count = 0;
	do {
		difficulty();
		printf("请选择难度>>");
	scanf("%d", &option);
		switch (option)
		{
		case 1:
			count = 15;
			break;
		case 2:
			count = 10;
			break;
		case 3:
			count = 5;
			break;
		default:
			printf("选择错误,请重新选择难度\n");
			break;
		}
	} while (option != 1 && option != 2 && option != 3);
	while (count) {
		printf("请输入你要猜的数字>>");
		scanf("%d", &answer);
		if (answer > 100 || answer < 1)
		{
			printf("请在1到100之间猜\n");
			count--;
			printf("你还剩%d次机会\n", count);
		}
		if (answer > ret)
		{
			printf("     猜大了\n");
			count--;
			if (count == 0)
			{
				printf("正确答案是>>%d\n", ret);
				break;
			}
			printf("你还剩%d次机会\n", count);
		}
		if (answer < ret)
		{
			printf("     猜小了\n");
			count--;
			if (count == 0)
			{
				printf("正确答案是>>%d\n", ret);
				break;
			}
			printf("你还剩%d次机会\n", count);
		}
		if (answer == ret)
		{
			printf("    恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned)time(NULL));
	int input = 0;
	do {
		menu();//菜单函数
		printf("请选择>>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//游戏执行函数
			break;
		case 0:
			printf("欢迎下次来玩\n");
				break;
		default:
			printf("选择错误,请重新选择>>");
			break;
	}
	} while (input);


	return 0;
}

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值