欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言——猜数字游戏

程序员文章站 2024-03-12 20:53:32
...

“猜数字小游戏”游戏规则:由两个人玩(人机),一方出数字,一方猜。计算机随机确定一个数,用户来猜,每猜一次计算机提示猜的数字偏大还是偏小,直到猜对数字结束。

代码1:

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

int main()
{
	int count = 0;
	int flag = 0; //为0表示猜错
	int mynum = 0;
	int yournum = 0;
	srand((unsigned)time(NULL));//利用时间设置随机种子,Time(0)是得到当前时间值 
	mynum = rand() % 100 + 1;//rand函数返回随机数(在1~100之间的)

	while (count<7) //最多猜7次 
	{
		printf("请输入猜的数字>:\n");
		scanf("%d", &yournum);
		count++;
        if (yournum == mynum)//答对 
		{
			printf("YES!");
			flag = 1;
			break;
		}
		else//答错 
		{
			if (yournum > mynum)
				printf("TOO BIG!\n");
			else
				printf("TOO SMILE!\n");
		}
	}
	if (flag == 0)
		printf("\nGAMEOVER!!");
	return 0;
}

代码1详解:定义count变量来记录猜的次数,在while的判断表达式中判断count的值(此代码设置最多猜7次,count<7时执行循环体),当7次都未猜中时GAME OVER!

※产生随机数的过程:void srand(unsigned seed)函数是随机数发生器的初始化函数,需要的头文件<stdlib.h>srandrand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,那么每次调用rand函数生成的伪随机数序列都是一样的。这时,就需要用到srand(unsigned seed)通过参数seed改变系统提供的种子值,从而使rand函数生成不同的伪随机数序列,实现真正意义上的随机。一般通过系统时间来改变系统的种子值,即srand( time(NULL) ),为rand函数提供不同的种子值。time函数(需要的头文件<time.h>)来获取当前的系统时间(机器日历时间),其值表示从CUT时间1970年1月1日00:00:00到当前时刻的秒数,然后将此time_t型数据转化为unsigned型再传给srand函数,即srand( (unsigned) time(NULL) ),直接传入一个空指针(因为这里不需要经过参数获得的数据)。如果随机数的范围很大,那么猜对的难度会很大,而若我们设定一个较小的范围,难度就大大降低。rand()%100,随机数对100取余,限制产生随机数的范围为0~99,那么rand()%100+1表示随机数的范围为0~100。

计算机产生随机数后,在while循环体中,每次①用户输入猜的数字②判断猜对猜错③若猜对则打印“YES!”跳出循环;若猜错提示猜大了还是猜小了,继续循环体。直到猜对或次数用完,游戏结束。

代码2:

#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 random_num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d",&input);
		if (input > random_num){
			printf("猜大了!\n");
		}
		else if (input < random_num){
			printf("猜小了!\n");
		}
		else{
			printf("恭喜你!猜对了!\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do{
		menu();
		printf("请选择>:");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

过程:①产生一个随机数(产生过程同上)用户输入猜的数字 ③判断猜对猜错,若猜对则打印“恭喜你猜对了!”跳出循环;若猜错提示猜大了还是猜小了,继续循环体。直到猜对游戏结束(没有设计猜的次数),再进入下一次游戏。此段代码还加入了一个简易菜单,可以选择(1、play   0、exit)。在主函数中用switch(input)和while(input)来实现,选择1则开始游戏;选择0时,此时while(0),所以跳出循环,不进入游戏;输入非0非1时提示“选择错误,请重新输入”,进入下一循环。

游戏效果图如下↓

C语言——猜数字游戏