基于C语言的分支和循环结构来制作一款小游戏~

前言

前面我给大家介绍了选择/分支语句循环语句~ 今天我将基于这两种语句来制作并讲解这个小游戏的设计思路和实现方法。

游戏说明

规则:
1.电脑会随机生成1~100之间的数字
2.玩家要猜数字,在猜数字的过程中,电脑会根据玩家猜的数字进行相应的反馈
3.玩家一共有5次机会,在五次以内猜对就胜利,否则就失败

思路

1.游戏菜单
2.随机数的生成
3.判断数的大小
4.胜利

1 游戏菜单

1.先设置游戏的菜单,当程序启动时,菜单自动弹出 —》 do while循环
2.玩家输入1开始游戏,输入0退出游戏
3 输入其他数时反馈输入错误 —》 switch函数

代码演示如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
	printf("************************\n");
	printf("*****    1.play    *****\n");
	printf("*****    0.exit    *****\n");
	printf("************************\n");
}
void game()//此为游戏内容的实现部分
{
}
int main()
{
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;//在这个switch函数里,其实是不用加break函数的,但是为了代码的美观性,还是建议大家加上
		}
	}while (input);//当input的值为0时,先执行case 0 再回到while()判断,为0为假,不会再循环了
	return 0;
}

演示如下
Alt

2 随机数的生成

这里我们用一个陌生的函数,rand() 函数

2.1 rand()函数

1.所要包含的头文件为 <stdlib.h>
2.在C语言百科(cplusplus)这样写道 Returns a pseudo-random integral number in the range between 0 and RAND_MAX.
3.这句话的意思是rand函数会返回一个伪随机(假的随机)的整型值,这个整型值的范围在 0~RAND_MAX 之间
4.rand的伪随机值是通过算法算出来的
5.RAND_MAX是一个常量 在不同的情况下,RAND_MAX的默认值会有所差异,但至少是 32767 及以上
6.int rand( void ); void表示rand的()里不需要填值,返回值是 int ,也就是那个伪随机数

具体代码如下

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = rand();
	printf("a = %d\n", a);
	return 0;
}

运行如下
在这里插入图片描述

2.2 srand()函数

接下来我们对上面的代码进行一点修改

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = rand();
	printf("a = %d\n", a);
	printf("a = %d\n", a);
	return 0;
}

运行结果如下
在这里插入图片描述
可以看到这和第一次的运行结果是一样的,那我们做什么可以改变这个值呢
那就该使用srand()函数了

srand

1.所要包含的头文件和rand函数一样,都是 <stdlib.h>
2.在C语言百科(msdn)写道 Sets a random starting point
3.意思是设置随机数的起点,就类似与游戏Minecraft中的地图种子,可以类比为rand的种子
4.void srand (unsigned int seed); unsigned int seed 无符号的种子,viod 代表srand没有返回值

代码演示

这里修改上一版的代码就能看到作用

#include<stdio.h>
#include<stdlib.h>
int main()
{
	srand(1);
	int a = rand();
	printf("a = %d\n", a);
	printf("a = %d\n", a);
	return 0;
}

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
int main()
{
	srand(2);
	int a = rand();
	printf("a = %d\n", a);
	printf("a = %d\n", a);
	return 0;
}

在这里插入图片描述

2.3 time()函数

在知道如何让rand函数的开始变化后,那我们就该想如何让 srand函数 的“种子”能时刻变化呢?
这就可以用time() 函数

1.time函数所要包含的头文件为 <time.h>
2.time()函数的书写形式为time_t time(time_t *seconds)
3.time()函数的seconds为空时返回值通常表示自 1970 年 1 月 1 日 00:00 时(世界协调时)起,到现在的秒数
4.time_t time(time_t *seconds)中的time_t 表示无符号整型

小结

我们已经知道如何生成随机数了,我们与前面的菜单结合起来看看吧
代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("************************\n");
	printf("*****    1.play    *****\n");
	printf("*****    0.exit    *****\n");
	printf("************************\n");
}
void game()//此为游戏内容的实现部分
{
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//NULL表示空值
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;//在这个switch函数里,其实是不用加break函数的,但是为了代码的美观性,还是建议大家加上
		}
	} while (input);//当input的值为0时,先执行case 0 再回到while()判断,为0为假,不会再循环了
	return 0;
}

3 判断数的大小以及实现胜利

首先我们先生成1~100之间的数,在进行猜数字,猜错一次,可用次数减一,次数用完,判断玩家输掉游戏并告诉随机数是什么。

代码如下

void game()//此为游戏内容的实现部分
{
	int guess = 0;//玩家猜的数
	int ret = rand() % 100 + 1;//电脑生成的随机数
	//               % 100 表示取0~99之间的余数
	//               + 1 就成了1~100之间的数
	int count = 5;
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("请输入要猜的数字:>");
		scanf("%d", &guess);
		if (guess > ret)
			printf("数字猜大了\n");
		else if (guess < ret)
			printf("数字猜小了\n");
		else//之前讲解的,控制多条语句要用大括号{}阔起来
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("很遗憾,你输了,被猜数是%d\n", ret);
	}
}

完整代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("************************\n");
	printf("*****    1.play    *****\n");
	printf("*****    0.exit    *****\n");
	printf("************************\n");
}
void game()//此为游戏内容的实现部分
{
	int guess = 0;//玩家猜的数
	int ret = rand() % 100 + 1;//电脑生成的随机数
	//               % 100 表示取0~99之间的余数
	//               + 1 就成了1~100之间的数
	int count = 5;
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("请输入要猜的数字:>");
		scanf("%d", &guess);
		if (guess > ret)
			printf("数字猜大了\n");
		else if (guess < ret)
			printf("数字猜小了\n");
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("很遗憾,你输了,被猜数是%d\n", ret);
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;//在这个switch函数里,其实是不用加break函数的,但是为了代码的美观性,还是建议大家加上
		}
	} while (input);//当input的值为0时,先执行case 0 再回到while()判断,为0为假,不会再循环了
	return 0;
}

最后

快叫上你的好盆友玩吧~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值