猜数字游戏+惩罚

游戏呢,总体思路就是系统随机生成一个数字,然后玩家去猜这个数字,等到如果玩家猜错到一定次数时,可以相应的一些惩罚,比如关机,或者让玩家做一些限定的事情来防止关机。

需要用到的头文件:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<string.h>

首先呢,我们既然做游戏,得有一个菜单,供玩家选择。这是一个函数

第二呢,就是玩家选择开始游戏时,对游戏总思路进行设计的一个函数。

第三,就是惩罚函数,当玩家错误到一定次数时,实行惩罚的一个函数。

我们分别用到如下三个函数。

void meau();
void game();
void punish();

还有一个main主函数

程序从main主函数开始,我们每一次开始都需要调用一下菜单,需要玩家进行输入,然后菜单里每一个数字都对应着一个功能,我们可以用switch函数。而且每一次游戏结束之后都要再调用菜单,所以我们需要do...while函数。具体代码如下:

在此之前,因为我们需要调用菜单,所以先把菜单函数写一下:

void meau()
{
	printf("**********1.PLAY GAME*********\n");
	printf("**********0.   EXIT      *********\n");
}

我们设置菜单中1为开始游戏,0为离开游戏

但是如果用户输入除了0和1之外的数时,我们应该提醒一下对方要重新输入

所以主函数代码如下:      

int main()
{
	int input = 0;//定义变量
	srand((unsigned int)time(NULL));//用来生成随机数的,不必过多了解,会用即可。
	do//循环执行,直至用户输入0时结束,即结束游戏,因为0为假
	{
		meau();
		printf("请输入对应的数字哦\n");
		scanf_s("%d", &input);//用户输入对应的选项
		switch (input)
		{
		case 1://如果用户选择1,那说明开始游戏
		{
			printf("让我们开始游戏吧\n");
			game();//开始游戏,调用对应的游戏函数
			break;
		}
		case 0:
		{
			printf("游戏结束,你一定玩的很愉快吧/偷笑\n");
			break;
		}
		default://如果用户输入了0和1之外的数,提醒用户重新输入
		{
			printf("你能不能按选项选择啊?重新选择\n");
			break;
		}
		}
	} while (input);
	return 0;
}

实现了之后,我们开始写实现游戏的函数 game函数

首先我们需要随机生成一个随机数。然后需要用户输入并与之进行比较,如果输入大于生成的随机数,则提醒用户输入的数较大,反之,提醒用户输入的数较小。如果一致时,则告诉用户猜对数字。

然后呢,我们还需要创建一个计数器,用来计算用户猜错的次数,如果猜错的次数等于10的时候

我们便进行相应的惩罚,实行惩罚punish函数

下面是game函数

void game()
{
	int ret = rand() % 100 + 1;//存放随机数,如果不+1则产生0-99之间的随机数,我们是为了产生1-100之间的随机数
	int guess = 0;//用于用户进行猜测
	int count = 0;//计数器,用来计算用户猜错的次数
	while (1)//每次进行循环,直到猜对执行break跳出为止
	{
		printf("请输入正确的数字,提示:数字在1-100之间哦\n");
		scanf_s("%d", &guess);//用户输入猜测的值
		if (guess > ret)//如果用户猜测的大于正确的数,提醒用户猜大了
		{
			printf("你猜大了,往小里试试,\n");
			count++;//如果执行这条语句,说明用户一定猜错了,则计数器+1.
			if (count == 5)//当用户输错5次时,提醒用户输错10次会受到惩罚
			{
				printf("你已经猜错了5次了,猜错10次会有惩罚哦\n");
			}
			if (count == 10)//当用户输错10次时,执行惩罚函数
			{
				punish();
				count = 0;用户做出正确的抉择后,清空计时器,从0开始再次进行计算
			}
		}
		if (guess < ret)
		{
			printf("哈哈你猜小了,往大里试试\n");
			count++;//执行到这条语句时,用户一定是输入错误,count+1、
			if (count == 5)
			{
				printf(你已经猜错了5次了,猜错10次会有惩罚哦\n");
			}
			if (count == 10)//同样地,如果猜错10次,执行惩罚函数
			{
				punish();
				count = 0;//和上面同样的道理。
			}
		}
		if (guess == ret)
		{
			printf("哇!棒棒,恭喜你猜对了哈哈\n");
			count = 0;//猜中之后,也要清空计时器,避免下一局时继承上一局的错误次数
			break;
		}
	}
}

说了这么多,总算该进行惩罚函数了,该怎么惩罚呢?

我的惩罚措施是这样:

用户将会面临两种选择(此时已经执行关机倒计时60秒):

一.输入guanji立即将电脑关机

二.输入“我是猪”可以将关机命令撤销(如果关系密切,可以让输入"我爱你xxx"才能撤销/偷笑)

输入其他的则提示用户这是无效的

具体punish函数内容如下

void punish()
{
	int input;//用于用户的输入
	char arr[50];//用于用户的输入
	char test1[20] = { "guanji" };//将第一种答案存在test1数组里
	char test2[30] = { "我是猪" };//将第二种答案存在test2数组里
	system("cls");//将之前游戏的文字全部清空
	printf("xxx你已经输入错误十次\n\n");
	printf("现在已经关机进入倒计时60秒\n\n");
	system("shutdown -s -t 60");//进入关机倒计时60秒
	printf("下面是你自己选择:\n\n");
	printf("一.输入guanji立刻关机   二.输入:“我是猪”可以继续进行游戏\n\n");//告诉用户做出选择
	printf("提示一下:你关掉程序也没用哦,而且此时你如果关掉程序的话就没有挽救的机会了\n\n");
	printf("请输入你的选择\n");
	while (1)//循环执行。直到用户做出与选项匹配的答案
	{
		scanf_s("%s", arr, 30);
		if (strcmp(test1, arr) == 0)//如果用户输入guanji,则执行此条程序
		{
			system("shutdown -s -t 1");//将关机时间设置为1秒,即立刻关机
		}
		else if (strcmp(test2, arr) == 0)//如果用户输入我是猪,则取消关机指令,并跳出循环,继续进行游戏
		{
			printf("\n\n\n哇真的吗?你果然是猪\n");
			printf("那你继续玩游戏吧\n我已经帮你停止了关机程序哦嘿嘿\n\n\n\n\n\n\n\n\n\n");
			system("shutdown -a");//取消关机指令
			break;
		}
		else//如果用户输入其他的答案啊,告诉用户这是无效的,继续循环
		{
			printf("没用的,没用的,不要挣扎了哈哈\n");
			continue;
		}
	}
}

至此,我们所有的思路就讲完了,是不是很简单呢?

总代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<string.h>
void punish()
{
	int input;
	char arr[50];
	char test1[20] = { "guanji" };
	char test2[30] = { "我是猪" };
	system("cls");
	printf("你已经输入错误十次\n\n");
	printf("现在已经关机进入倒计时60秒\n\n");
	system("shutdown -s -t 60");
	printf("下面是你自己选择:\n\n");
	printf("一.输入guanji立刻关机   二.输入:“我是猪”可以继续进行游戏\n\n");
	printf("提示一下:你关掉程序也没用哦,而且此时你如果关掉程序的话就没有挽救的机会了\n\n");
	printf("请输入你的选择\n");
	while (1)
	{
		scanf_s("%s", arr, 30);
		if (strcmp(test1, arr) == 0)
		{
			system("shutdown -s -t 1");
		}
		else if (strcmp(test2, arr) == 0)
		{
			printf("\n\n\n哇真的吗?没想到你真是猪啊\n");
			printf("那你继续玩游戏吧\n我已经帮你停止了关机程序哦嘿嘿\n\n\n\n\n\n\n\n\n\n");
			system("shutdown -a");
			break;
		}
		else
		{
			printf("没用的,没用的,不要挣扎了哈哈\n");
			continue;
		}
	}
}
void game()
{
	int ret = rand() % 100 + 1;
	int guess = 0;
	int count = 0;
	while (1)
	{
		printf("请输入正确的数字,提示:数字在1-100之间哦\n");
		scanf_s("%d", &guess);
		if (guess > ret)
		{
			printf("你猜大了,往小里试试\n");
			count++;
			if (count == 5)
			{
				printf("你已经猜错了5次了,猜错10次会有惩罚哦\n");
			}
			if (count == 10)
			{
				punish();
				count = 0;
			}
		}
		if (guess < ret)
		{
			printf("哈哈你猜小了,往大里试试\n");
			count++;
			if (count == 5)
			{
				printf("你已经猜错了5次了,猜错10次会有惩罚哦\n");
			}
			if (count == 10)
			{
				punish();
				count = 0;
			}
		}
		if (guess == ret)
		{
			printf("哇!棒棒,恭喜你猜对了哈哈\n");
			count = 0;
			break;
		}
	}
}
void meau()
{
	printf("**********1.PLAY GAME*********\n");
	printf("**********0.   EXIT      *********\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		meau();
		printf("请输入对应的数字哦\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
		{
			printf("让我们开始游戏吧\n");
			game();
			break;
		}
		case 0:
		{
			printf("游戏结束,你一定玩的很愉快吧/偷笑\n");
			break;
		}
		default:
		{
			printf("你能不能按选项选择啊?\n");
			break;
		}
		}
	} while (input);
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_47257473/article/details/122528009