C语言实现简单的猜数字游戏【快来看看你会吗~~】

前言

相信许多同学和我一样,刚接触c语言一段时间后,觉得c语言特别特别有趣,迫不及待的想要自己写出一些有意思的代码来,尤其羡慕那些能够制作小游戏的大佬。今天,小书就给大家展示一下自己最近学到的一个小游戏代码,和大家分享分享我的编写思路~~

游戏描述

猜数字游戏的描述:
1、程序会生成一个1~100之间的随机数
2、猜数字
1)猜小了,程序提示猜小了,继续猜
2)猜大了,程序提示猜大了,继续猜
3)猜对了,程序提示猜对了,结束
3、游戏可以反复玩

思路

第一步,生成菜单

我们需要一个游戏菜单界面,来提示我们开始游戏或者退出游戏,考虑到可能会多次调用,就把菜单代码放在一个叫menu的函数里。

void menu()
{
	printf("***************************\n");
	printf("*******  1 . play  ********\n");
	printf("*******  0 . exit  ********\n");
	printf("***************************\n");
	printf("您是否想要开始(或继续)游戏?请输入1开始或者0退出:\n");
}
第二步,编写外部循环——反复玩

游戏要求我们可以反复玩,因此必须需要循环了。思考一下,游戏至少会进行一次,即用do…while…语句就非常适合(do while语句至少先执行一次,再进行判断)

	do
	{
		menu();//打印菜单

	} while ();

由菜单要求的输入1开始游戏或0退出游戏,我们不难想到,用switch语句刚好合适,当case : 1则开始我们的游戏,当case : 0则退出循环

	do
	{
		menu();//打印菜单
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//game是游戏的整个逻辑
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (input);

如上代码,游戏的整个逻辑我们同样可以放在一个叫做game的函数里。
当然,变量input要在do while循环外声明,如果在循环内部声明,input就变成一个局部变量,它的作用域是在循环里,就不能填在while()内作为参数了。
关于为什么用1表示开始,0表示退出,因为输入0时刚好可以退出循环,这个思路很巧妙!

第三步,编写游戏代码

游戏逻辑的具体编写
首先我们分析一下,游戏的代码可以分为如下两部分:
1、生成一个随机数
2、猜数字

1、生成一个随机数
在c语言中,rand函数的作用是生成一个随机的数,需引头文件<stdlib.h>。
但是单纯使用rand函数是无法满足我们的要求的。
如图:
在这里插入图片描述
分析:看似是生成了随机数,但是,当我下一次运行这个程序,生成的11个随机数还是这11个,也就是说,我每次运行猜数字游戏,程序给我的随机数是固定不变的,也就是说每次玩的时候要猜的数是固定的,这当然不是我们的目的,我们要求的是每次玩都是要猜不一样的数。这原理就是rand每次生成随机数的起点是固定不变的,我们就需要设置它,让程序每次运行都有不一样的起点。
于是我们需要另一个函数srand。
srand函数可以设置产生一系列伪随机数发生器的起始点,也就是设置rand函数产生随机数的第一个数。使用srand,就能让rand函数生成随机数的起点不同,就能获得满足游戏要求的随机数了。而使用srand函数,需要一个参数,该参数就是rand函数的起点。我们需要的是每次运行都有不同的起点,也就是要有一个随时变化的参数值传进来,这貌似进入了死循环,单time函数可以满足我们。
time函数是时间戳,时间戳即是随时间而变的。time函数需要引头文件<time.h>。
于是,生成随机数的问题就解决了。

void game()
{
	//1、生成随机数
	int num = rand() % 100 + 1;
	//2、猜数字
	
}
int main()
{
	srand(time(NULL));
	int input = 0;
	do
	{
		menu();//打印菜单
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//game是游戏的整个逻辑
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

srand设置起始点,代码运行一次只需要设置一次就够了,于是把这句代码放在了main函数里。
time函数需要接收的参数是指针类型,我们给空指针就可以了。
而rand生成随机数,是每次游戏都要进行一次的,于是需要放在game函数内部。

2、猜数字
一次游戏需要猜很多次,直到猜对为止,于是需要一个循环。
只有当猜到了正确答案,循环才会停止,游戏才结束。

//2、猜数字
	int x = 0;
	while (1)
	{
		printf("请猜数字:\n");
		scanf("%d", &x);
		if (x > num)
		{
			printf("猜大了!\n");
		}
		else if (x < num)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}

综上,整个游戏的代码如下:

//猜数字游戏
//描述:
// 1)程序会生成一个1~100之间的随机数
// 2)猜数字
//		1 > 猜小了,程序提示猜小了,继续猜
//		2 > 猜大了,程序提示猜大了,继续踩
//		3 > 猜对了,程序提示猜对了,结束
// 3)游戏可以反复玩
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("***************************\n");
	printf("*******  1 . play  ********\n");
	printf("*******  0 . exit  ********\n");
	printf("***************************\n");
	printf("您是否想要开始(或继续)游戏?请输入1开始或者0退出:\n");
}

void game()
{
	//1、生成随机数
	int num = rand()%100+1;
	//2、猜数字
	int x = 0;
	while (1)
	{
		printf("请猜数字:\n");
		scanf("%d", &x);
		if (x > num)
		{
			printf("猜大了!\n");
		}
		else if (x < num)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}
}
int main()
{
	srand(time(NULL));
	int input = 0;
	do
	{
		menu();//打印菜单
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();//game是游戏的整个逻辑
				break;
			case 0:
				printf("游戏结束\n");
				break;
			default :
				printf("输入错误,请重新输入!\n");
				break;
		}
	} while (input);
	return 0;
}

游戏虽然简单,但是也还是挺有趣的,无聊的时候可以和小伙伴玩上几把~~
目前还只能写出黑框框里的东西,以后学得更多了,我会把这个代码转化成一个真正的游戏,虽简单,但也是第一步,很好玩捏~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值