猜数字游戏

前言

对于初学C语言的同学,如果学习了(顺序、选择和循环),那么根据所学写一个猜数字游戏也是很有意思的。

游戏内容

顾名思义,猜数字就是系统给你一个随机数字(这里我们让系统给出随机的1-100的数字便于猜测),让你去猜正确与否,直到猜对为止。

思路

1:构建一个菜单列表 1.play   0.exit 输入1则开始游戏,输入0则退出游戏                                        2:利用循环语句使玩家可以多次进行游戏,直到主动选择退出游戏                                                3:   让系统输入一个随机数,玩家输入猜测数字进行比较。

游戏开始前我们需要先介绍几个函数:

Sleep函数

功能: 执行挂起一段时间,也就是等待一段时间在继续执行

用法:Sleep(时间)

头文件:Windows下为--> windows.h

              Linux 下为 --> unistd.h

注意:(1)Sleep是区分大小写的,有的编译器是大写,有的是小写。

   (2)Sleep括号里的时间,在windows下是已毫秒为单位,而Linux是以秒为单位

使用Sleep函数我们可以做登录页面或起始欢迎页面,效果如下

void enroll()
{
	char arr[] = "***********************************";
	char brr[] = "*******welcome to the game*********";
	int left = 0;
	int right = strlen(arr) - 1;
	while (left <= right)
	{
		arr[left] = brr[left];
		arr[right] = brr[right];
		printf("%s", arr);
		Sleep(100);   //休息0.1s
		system("cls");//清屏 头文件stdlib.h
		left++;
		right--;
	}
	printf("*******welcome to the game*********\n\n");
}

 生成随机数的方法

 单单使用rand() 函数来生成随机数是不行的,因为它每玩一次生成的随机数都是相同的,即随机数不随机,所以要通过srand()函数,种下一个随机种子,来产生随机数。根据时间每时每刻都是变化的,可以用time()时间函数来产生种子。

 

 这里time_t的类型就是 在C语言中被定义为长整型,而srand()函数的参数类型为unsigned int (无符号整形),所以使用时要强制类型转换,而且**time()**函数,不需要设置参数,故用NULL代替。需要引用头文件time.h

代码实现

1.菜单界面:

void meau()
{
	printf("***********************************\n");
	printf("*********1.play     0.exit*********\n");
	printf("***********************************\n");
}

 效果展示:

2.主函数框架,do while游戏至少刚开始进去一次 ,switch控制进行游戏或退出游戏

int main()
{
	enroll();
	int input = 0;
	srand((unsigned int)time(NULL));//用时间戳来设置随机数的生成起点
	do
	{
		meau();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();//猜数字游戏
				break;	
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,请重新选择\n");
				break;
		}	
	} while (input);
	return 0;
}

 3.猜数字

void game()
{
	//1.生成一个随机数
	int ret = 0;
	
	//用时间戳来设置随机数的生成起点
	//time_t time(time_t *time)
	//ret = rand(); 生成随机数
	ret = rand() % 100 + 1; //生成1-100随机数
	//printf("%d\n", ret);
	//猜数字
	int guess_num;
	while (1)
	{
		printf("请猜数字>:");
		scanf("%d", &guess_num);
		if (guess_num > ret)
		{
			printf("猜大了\n");
		}
		else if (guess_num < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}
}

游戏演示 :

 源码:

#define _CRT_SECURE_NO_WARNINGS    //vs2019下 使用scanf函数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<windows.h>

void enroll()
{
	char arr[] = "***********************************";
	char brr[] = "*******welcome to the game*********";
	int left = 0;
	int right = strlen(arr) - 1;
	while (left <= right)
	{
		arr[left] = brr[left];
		arr[right] = brr[right];
		printf("%s", arr);
		Sleep(100);   //休息0.1s
		system("cls");//清屏
		left++;
		right--;
	}
	printf("*******welcome to the game*********\n\n");
}
void meau()
{
	printf("***********************************\n");
	printf("*********1.play     0.exit*********\n");
	printf("***********************************\n");
}
void game()
{
	//1.生成一个随机数
	int ret = 0;
	
	//用时间戳来设置随机数的生成起点
	//time_t time(time_t *time)
	//ret = rand(); 生成随机数
	ret = rand() % 100 + 1; //生成1-100随机数
	//printf("%d\n", ret);
	//猜数字
	int guess_num;
	while (1)
	{
		printf("请猜数字>:");
		scanf("%d", &guess_num);
		if (guess_num > ret)
		{
			printf("猜大了\n");
		}
		else if (guess_num < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}
}

int main()
{
	enroll();
	int input = 0;
	srand((unsigned int)time(NULL));//用时间戳来设置随机数的生成起点
	do
	{
		meau();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();//猜数字游戏
				break;	
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,请重新选择\n");
				break;
		}	
	} while (input);
	return 0;
}

这样就写完了,非常适合初学者写一写玩一玩。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BearPot

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

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

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

打赏作者

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

抵扣说明:

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

余额充值