一个简单的猜数字游戏(附带关机惩罚)

发布于:2023-01-02 ⋅ 阅读:(922) ⋅ 点赞:(0)

作为一个初学C语言的小白,一个简易的C语言小游戏无非是提高了我对这门计算机语言的兴趣。接下来我将从提高自己的角度讲解一下这个简单的猜数字游戏,希望大家多多包涵。

————————————————————————————

游戏介绍

这个程序将实现随机猜测1-100中的任一整型数字,并将猜测结果反馈给玩家。其中玩家具有6次猜数字的机会,若6次机会未猜中相应的数字,系统将会进行2分钟内关机的惩罚,除非输入相应的口令。

代码实现

首先需要向玩家展示游戏菜单,这里使用menu函数实现。

void menu()//向玩家展示游戏菜单
{
	printf("***************************\n");
	printf("********* 1.play **********\n");
	printf("********* 0.exit **********\n");
	printf("***************************\n");
}

接下来是该游戏的主要实现。其中rand() 与 srand()的正确使用为我本次学习到的重点之一。

void game()
{
	int guess = 0;//存放玩家猜测的数
	int count = 1;//计数器,计算猜数字的次数
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("请输入一个值:>");
		scanf("%d", &guess);
		count++;
		if (guess < ret)
		{
			printf("猜小了\n");
			//判断猜测次数是否超出6次
			if (count > 6)
			{
				printf("错误次数过多,惩罚开始\n");
				Shutdown();//自定义关机函数
				break;
			}
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
			if (count > 6)
			{
				printf("惩罚\n");
				Shutdown();
				break;
			}
		}
		else if(guess == ret)
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}
}

接下来是当玩家超出限制次数时会执行的定时关机程序。

int Shutdown()
{
	char input[20] = { 0 };
	//system()执行window系统的命令,此处为定时关机
	system("shutdown -s -t 120");
again:
	printf("你的电脑将在2分钟之内关机,输入“我是猪”,取消关机\n");
	scanf("%s", input);
	//运用strcmp判断输入字符是否为指定指令
	if (strcmp(input, "我是猪") == 0)
	{
	//此处为取消关机
		system("shutdown -a");
		printf("已取消关机,感谢游玩!\n");
	}
	else
	{
		goto again;//运用goto语句实现迭代
	}
}

在主函数中也是为了实现真正的随机而引用了时间戳的概念。

什么是时间戳?

一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

时间戳的计算方法

格林威治时间(1970年01月01日00时00分00秒)起至现在的总秒数。

根据时间戳的概念,可以看出每时每刻的时间戳都是独一无二的,因此配合函数可以实现真正意义上的随机

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
void menu()
{
	printf("***************************\n");
	printf("********* 1.play **********\n");
	printf("********* 0.exit **********\n");
	printf("***************************\n");
}
void game()
{
	int guess = 0;
	int count = 1;
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("请输入一个值:>");
		scanf("%d", &guess);
		count++;
		if (guess < ret)
		{
			printf("猜小了\n");
			if (count > 6)
			{
				printf("错误次数过多,惩罚开始\n");
				Shutdown();
				break;
			}
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
			if (count > 6)
			{
				printf("惩罚\n");
				Shutdown();
				break;
			}
		}
		else if(guess == ret)
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}
}
int Shutdown()
{
	char input[20] = { 0 };
	system("shutdown -s -t 120");
again:
	printf("你的电脑将在2分钟之内关机,输入“我是猪”,取消关机\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
		printf("已取消关机,感谢游玩!\n");
	}
	else
	{
		goto again;
	}
}
int main()
{
//time()为引用当前时间的时间戳,以达到真正的随机。
	srand((unsigned int)time(NULL));
	   //主函数中运用srand函数以防止生成的随机数在短时间内相同。
	int input = 0;

	do
	{
		menu();
		printf("请输入:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}

	} while (input);
	return 0;
}

以上即为本次任务的全部代码实现,其中还有很多需要改正的地方,例如关机惩罚的口令可以更加复杂,猜数字次数的判断可创建函数等,希望各位可以给予宝贵的建议,同时我也希望在未来我可以逐步的提高自己,提高自己的技术水平与更新博客的能力。谢谢大家观看!

本文含有隐藏内容,请 开通VIP 后查看