教你如何用C语言设计一个有趣的猜数字小游戏

前言

好久不见,今天我要跟大家分享一个C语言猜数字小游戏,无聊的时候玩一玩这种小游戏,怡怡情,给自己的生活整天一点乐趣,哈哈~
话不多说,开干
在这里插入图片描述

猜数字游戏

打印菜单

一个游戏嘛,首先我们得打印一个菜单让玩家看到菜单栏,可以提供选择,代码如下:

void menu()
{
	printf("********************************\n");
	printf("*******欢迎来到猜数字游戏********\n");
	printf("************请选择>:************\n");
	printf("******1.play        0.exit******\n");
	printf("********************************\n");	
}

用户输入1就是开始游戏,输入0就是退出游戏。
效果如下:
在这里插入图片描述

处理玩家选择的操作

根据玩家的选择,我们要对他们的玩家进行相应的处理,提供给玩家想要执行的操作,这就要用到一个选择语句,看代码:

//初始化用户输入值
		int input = 0;
		//接受用户输入值
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			三子棋游戏(一些代码)
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}

这个游戏让玩家只玩一把多不好,万一玩家觉得不过瘾,得让他们多玩几把呀,为了满足广大游戏玩家的需求,我们得让这个有游戏一直可以玩下去,直到玩家知己不想玩退出为止,这就要用到循环语句,我们先看看实际是如何操作的:

//初始化用户输入值
	int input = 0;
	do
	{
		//打印游戏菜单
		menu();
		//接受用户输入值
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			三子棋游戏(一些代码)
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);

根据玩家的选择,玩家如果输入1,那么游戏将一直可以玩下去,输入0则跳出循环,终止游戏。

编写猜数字游戏函数

用户选择1,则进入游戏,我们得正式开始编写一个游戏函数。

游戏中要猜数字从哪来?(配置随机数生成器)

猜数字游戏,数字从何而来,这是一个值得我们思考的问题。仔细思考,想到了库函数里面有一个随机数生成函数rand

Returns a pseudo-random integral number in the range between 0 and RAND_MAX.
This number is generated by an algorithm that returns a sequence of apparently non-related >numbers each time it is called. This algorithm uses a seed to generate the series, which should >be initialized to some distinctive value using function srand.

这是我摘录rand函数的介绍内容。这个函数可以生成0-RAND_MAX的随机数,使用之前要初始化随机数生成器srand,否则会导致每次打开程序生成的随机数与上次一样,这就会让玩家很没有体验感。所以我们先来看一下srand函数:

void srand (unsigned int seed);

函数返回类型是void,形参是unsigned int类型的,seed这个变量也要是随机数,这就麻烦了,本来我们就是要配置随机数生成器,然后又有找一个随机数,这就麻烦了,这随机数上哪找呀,能不能找到一个随时都在变的数呢?

时间戳

时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。(来源:百度百科
回到srand函数,我们发现:

In order to generate random-like numbers, srand is usually initialized to some distinctive runtime value, like the value returned by function time (declared in header ). This is distinctive enough for most trivial randomization needs.

时间是在不断变化的,这样我们就获取这样一个随机数,那这个问题就解决了
这里有一个time函数,可以获取当前日历时间,该由于函数返回类型是long long,srand函数要随机值,就得将time返回值强制类型转换一下,所以初始化随机数生成器如下:

srand((unsigned int)time(NULL));

配置好随机数生成器我们就要开始使用了。

开始生成随机数

生成1-100的随机数就可以这样写了:

//生成1~100的随机数
	int rand_num = rand() % 100 + 1;

game函数内部编写

根据上述条件,我们可以开始编写一个game函数了,如下:

void game()
{
	//生成1~100的随机数
	int rand_num = rand() % 100 + 1;
	//初始化玩家输入数字
	int chess_num = 0;
	//记录猜数字猜的次数
	int count = 0;
	//猜数字游戏
	while (1)
	{
		printf("请输入猜的数字的大小(1-100)>:\n");
		scanf("%d", &chess_num);
		count++;
		if (chess_num > rand_num)
		{
			printf("猜大了\n");
		}
		else if (chess_num < rand_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了\n");
			print_score(count);
			break;
		}		
	}
}

每猜一次,系统都会提示猜到了小了,直到猜对了为止。
根据猜的次数的多少,我们可以给一个评价,如下:

void print_score(int count)
{
	if (1 == count)
	{
		printf("猜数字小达人\n");
	}
	else if (count >= 2 && count <= 4)
	{
		printf("相当不错,就被你猜到了\n");
	}
	else if (count >= 5 && count <= 8)
	{
		printf("水平一般般,不行呀\n");
	}
	else
	{
		printf("没有发挥你的全部实力,运气有点差,再来一局吧\n");
	}
}

完整代码

根据分析,我们就可以把这样一个游戏编写完了。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
//猜数字小游戏
void print_score(int count)
{
	if (1 == count)
	{
		printf("猜数字小达人\n");
	}
	else if (count >= 2 && count <= 4)
	{
		printf("相当不错,就被你猜到了\n");
	}
	else if (count >= 5 && count <= 8)
	{
		printf("水平一般般,不行呀\n");
	}
	else
	{
		printf("没有发挥你的全部实力,运气有点差,再来一局吧\n");
	}
}
void menu()
{
	printf("********************************\n");
	printf("*******欢迎来到猜数字游戏*******\n");
	printf("************请选择>:************\n");
	printf("******1.play        0.exit******\n");
	printf("********************************\n");	
}
void game()
{
	//生成1~100的随机数
	int rand_num = rand() % 100 + 1;
	//初始化玩家输入数字
	int chess_num = 0;
	//记录猜数字猜的次数
	int count = 0;
	//猜数字游戏
	while (1)
	{
		printf("请输入猜的数字的大小(1-100)>:\n");
		scanf("%d", &chess_num);
		count++;
		if (chess_num > rand_num)
		{
			printf("猜大了\n");
		}
		else if (chess_num < rand_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了\n");
			print_score(count);
			break;
		}		
	}
}
int main()
{
	//初始化随机数生成器
	srand((unsigned int)time(NULL));
	//初始化用户输入值
	int input = 0;
	do
	{
		//打印游戏菜单
		menu();
		//接受用户输入值
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			Sleep(1000);
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

总结

今天这个小游戏主要用到了选择语句和循环语句,以及一些简单的函数编写,其中还提到了随机函数如何传产生的,讲到这里,大家的是不是想要赶快尝试一下,去吧,留下你的评论和小赞一枚,哈哈~

感谢感谢今天的分享就到这里了,感谢大家的点赞支持与指正~
在这里插入图片描述

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆兽学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值