首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【编程趣味游戏】:基于分支循环语句的猜数字、关机程序

【编程趣味游戏】:基于分支循环语句的猜数字、关机程序

作者头像
晨非辰Tong
发布2025-12-23 15:05:32
发布2025-12-23 15:05:32
00
举报
文章被收录于专栏:C++C++

前言:学习掌握了前面的分支循环语句的知识,接下来进行综合运用写一个有趣的代码。

1. 游戏1--猜数字

--游戏要求:

--电脑自动生成1~100的随机数;

--玩家猜数字的过程中,程序根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束;

-在进行编写游时,根据要求先来补充一点知识——如何产生随机数?

1.1 rand函数

--C语⾔提供了⼀个函数叫 rand,这函数用来做生成随机数,原型如下:

代码语言:javascript
复制
int rand(void);

--当然,并不是完全的随机数,称之为"伪随机数",数值范围在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是在大部分编译器上是32767。

--rand函数包含头文件-<stdlib.h>。

--在测试函数时,多运行几次法发现生成的随机数都是一样的(伪),是因为rand函数是对一个叫“种子”(默认1)的基准值进行运算生成的随机数,则像生成真正的随机数就要改变"种子值"。

--如何解决,请继续往下看!

1.2 srand函数

--C语言还提供了函数叫srand,用来初始化随机数的生成器的,scrand的原型如下:

代码语言:javascript
复制
void srand(unsigned int seed);

--在调用rand函数前,先调用srand函数,通过参数seed设置rand生成随机数的"种子值",改变了种子,"伪随机数"也就真正随机了。

--那也就意味着,要生成随机的seed就有需要随机数,这就很矛盾;为了解决矛盾,引入了time函数。

1.3 time函数

--在程序中一般使用程序运行时间作为种子,因为时间时刻变化。

--在c语言中函数叫time,就可以获得这个时间,time函数原型如下:

代码语言:javascript
复制
1.time_t time(time_t* timer);

--对于时间函数,会返回当前的日历时间,返回类型time_t。

--如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

--在使用函数时,包含头文件<time.h>;返回时间戳这样写:

代码语言:javascript
复制
1.time(NULL);//调用time函数返回时间戳,这里没有接收返回值

--生成随机数代码(srand函数不要频繁调用,一次运行的程序中调用一次;):

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    //使用time函数返回时设置种子
    //srand类型为unsigned,将time返回时强转
    srand((unsigned int) time(NULL));
    printf("%d\n", rand());
    printf("%d\n", rand());
    printf("%d\n", rand());
    return 0;
}

--这样运行后生成的数值就是随机的了。

1.4 设置随机数范围

--生成a~b间的随机数;

代码语言:javascript
复制
a + rand() % (b-a+1);

1.5 整合实现猜数字游戏

--最终整合-这里涉及到函数定义和调用,不懂的请移步作者另一篇博客.

代码语言:javascript
复制
#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 r = rand() % 100 + 1;
	//输入的数值
	int num = 0;
	//设置游戏次数
	int count = 5;

	printf("猜数字游戏正式开始\n");
	
	while (count)//count == 0后结束
	{
		printf("\n你还有%d次机会\n", count);
		printf("请输入数字:");
		scanf("%d", &num);
		
		if (num < r)
		{
			printf("猜小了\n");
		}
		else if (num > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;//次数减一
	}
	if (count == 0)
	{
		printf("你的机会用完了,正确答案是:%d\n", r);
	}
return 0;
}

//整合
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	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;
}

2. 游戏2--关机程序

代码语言:javascript
复制
int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");//关机指令;-s设置,-t设计时间
	while (1)
	{
		printf("你的电脑将在一分钟后关机,输入:我是猪,可以取消关机\n");
		scanf("%s", input);//数组名不用取地址,数组名本身就是地址;
		if (strcmp(input, "我是猪") == 0)
		{
			system("shutdown -a");//取消关机指令
			printf("关机程序已关闭\n");
			break;
		}
	}
	return 0;
}

--strcmp 函数是用来比较两个字符串是否相等的。strcmp 函数的原型如下:

代码语言:javascript
复制
int strcmp(const char *s1, const char *s2);

--如果两个字符串相等,就返回 0;要是 s1 按字典序小于 s2,返回一个小于 0 的值;若 s1 按字典序大于 s2,则返回一个大于 0 的值。

结语:本篇文章旨在分享利用所学知识设计简单的趣味游戏,喜欢的朋友,给个三连白~,欢迎评论关注,一起来学习吧!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 游戏1--猜数字
    • 1.1 rand函数
    • 1.2 srand函数
    • 1.3 time函数
    • 1.4 设置随机数范围
    • 1.5 整合实现猜数字游戏
  • 2. 游戏2--关机程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档