首页 > 其他分享 >C语言练习之猜数字游戏

C语言练习之猜数字游戏

时间:2024-10-20 12:18:40浏览次数:3  
标签:rand 练习 游戏 int time C语言 种子 printf 输入

一 游戏规则:

1.在电脑上生成1-100的随机数

2.玩家可以输入所猜数字,电脑根据输入数字做出猜大、猜小、猜对的反馈

二 游戏的实现:

1.随机数的生成:

1.1 rand

 C语言的库函数提供了一个rand函数,它的头文件是stdlib.h,rand函数可以根据一个种子随机生成0-RAND_MAX(最少是32767)

但是在调用rand函数的时候我们发现随机数好像并不随机,都是那么几个数

这是因为如果不设置种子的值的话他会有一个默认值,就像你在一栋宿舍楼,里面的每间宿舍都按照编号排了特定的同学,你调用rand函数的时候本质就是在你种子设定好的房间号里面依次从1、2、3、4...往外叫同学。那么如果你不指定一个不同房间号的话,每次叫出来的同学不是一样的吗??

结论:需要给rand设置一个种子并且要随时变化。

1.2 time

我们知道时间是每时每刻都在变化的,因此我们可以用time函数来设置这个种子,它的头文件是time.h。

它的功能是返回一个time_t类型的值,通常返回的值代表自1970年1月1日00:00 UTC(即当前Unix时间戳)以来的秒数 以及 通过参数timer指向的位置中存储的值。

通过上面的描述我们知道time会返回两个值,但是我们只用一个时间戳就可以了,NULL这个空指针 就可以很好的帮助到我们。

1.3 srand

现在我们就可以利用srand函数进行种子的设定了

可以看到srand里面的参数类型是unsigned int,而time返回值类型为time_t,因此需要强制类型转换

srand((unsigned int) time(NULL))

2. 代码的实现 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>


void menu()
{
	printf("**********************\n");
	printf("***1.PLAY    0.EXIT***\n");
	printf("**********************\n");


}
void game()
{
	char i[] = {0};
	int num = 5;
	int ret = rand() % 100 + 1;
	int geuss = 0;
	printf("游戏开始\n");
	while (num)
	{
		printf("还剩%d次机会\n",num);
		printf("猜数字\n");
		scanf("%d", &geuss);
		if (geuss > ret)
		{
			printf("猜大了\n");


		}
		else if (geuss < ret)
		{
			printf("猜小了\n");


		}
		else
		{
			printf("猜对了,正确答案是%d\n", ret);
			break;
		}
		num--;
		}


	if (num == 0)
	{
		printf("所有次数已经用完,电脑即将关机\n");
		system("shutdown -s -t 60");
		printf("电脑即将关机,输入我是猪即可停止\n");
		scanf("%s", &i);
		if ((strcmp(i, "我是猪")) == 0)
		{
			system("shutdown -a");
		}


	}


}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请输入开始游戏\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出成功\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
		
	} while (input);
}

1.首先不管什么我么总要玩一次,所以用do while循环.

2.然后设置种子(注意运行一次猜数字游戏只需要设置一次种子,否则随机数都是每个种子的第一个数,这样会使得随机数并不随机)

3.打印一个菜单,提示我们选择什么开始游戏

4.用input接受玩家输入的信息(根据输入的特点可以直接作为do while里面的判断部分)

5.对玩家输入信息分类处理,用switch case语句()

6.game函数的主体设计:生成随机数;玩家猜数字;进行两者的判断,并给出反馈;猜对了退出,没猜对就继续猜。这样整体架构就设计完了

7.当然也可以适当的优化一点功能:比如设置猜的次数;在规定次数内猜不到牌会有惩罚等等,这就靠大家自己发挥了

标签:rand,练习,游戏,int,time,C语言,种子,printf,输入
From: https://blog.csdn.net/2403_87718362/article/details/143088869

相关文章

  • C语言小白 记录自己对一些概念的理解 若有错误 多包涵 若能指正 万分感激
    当你想将输入和判断输入一起做时可以用while((数组名[i]=getchar())!='\n')记得拿括号括起来辅助在写!=CG平台使用输入重定向输入测试数据,需要使用(ch=getchar())!=EOF判断字符串输入结束,如果使用(ch=getchar())!='\n'上传到CG平台后可能会超时。写oj的时候如......
  • 用C++编写一个简单的游戏引擎:从游戏循环到物理与渲染的全面解析
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界构建一个基础的2D游戏引擎是一项富有挑战性但极具学习价值的任务。本文将通过从零开始的方式,逐步讲解如何使用C++开发一个简单的游戏引擎。内容涵盖了游戏引擎的核心架构设计,包括游戏循环、物理引擎和图形渲染等......
  • [Python手撕]游戏中弱角色的数量
    你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击和防御。给你一个二维整数数组properties,其中properties[i]=[attacki,defensei]表示游戏中第i个角色的属性。如果存在一个其他角色的攻击和防御等级都严格高于该角色的攻击和防御等级,则认为该角色为弱角色......
  • C语言中的段错误(Segmentation Fault):底层原理及解决方法
    引言在C语言编程中,“段错误”(通常由操作系统信号SIGSEGV触发)是一种常见的异常情况,它表明程序试图访问不受保护的内存区域。本文将深入探讨段错误的原因、底层原理、常见情况以及如何调试和解决这类错误。段错误的定义段错误是一种运行时错误,通常由以下几种情况触发:访......
  • 数组练习1018
    假设班级有8名学生,录入8名学生的java成绩,成绩类型是小数,并输出平均分,最高分,最低分publicclassClassDemo2{publicstaticvoidmain(String[]args){//假设班级有8名学生,录入8名学生的java成绩,成绩类型是小数,并输出平均分,最高分,最低分studentSc......
  • C语言_通讯录
    引言:当我们C语言语法大部分都学习完的情况下,可以尝试一些项目来提升自己,比如下面的这个通讯录。玩法介绍:我们需要对通讯录里面的个人信息进行增删查改以及排序等操作技能要求:学习完大部分的C语言语法知识。接下来我将创建三个文件:具备函数声明、宏定义、所需库函数的头......
  • 【趣学C语言和数据结构100例】
    【趣学C语言和数据结构100例】问题描述在带头结点的单链表中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。试编写在带头结点的单链表中寻找一个最小值结点的高效算法(假设该结点唯一)设在一个带表头结点的单链表中,所有结点......
  • QD1-P45 JS 练习、以及document对象
    title:QD1-P45JS练习、以及document对象description:本节学习:1、JavaScript简单练习。2、了解document对象。video:[https://www.bilibili.com/video/BV1n64y1U7oj?p=45](https://www.bilibili.com/video/BV1n64y1U7oj?p=45)subject:前端学习笔记1‍‍......
  • 数据结构C语言|队列相关
    队列普通队列与循环队列:结构体初始化队列判断队空入队出队检查队满循环队列链式队列:链式队列链式队列结构初始化判断是否为空入队出队遍历全部代码展示结构体typedefintElemType;#defineMaxSize10typedefstruct{ ElemTypedata[MaxSize]; //用静态......
  • C语言解决约瑟夫环(PTA链表)
    题意:就是N个人围成一个圈(想到循环),开始报数,报到一个指定的数p,则这个人出局,后延,比如本题的样例,第三个人报了3,则第四个人继续从1开始报数,一直循环下去,第七个人报完之后,再到第一个人,直到只剩下一个人,那么下一个出局的只剩下这个人。解题思路:我们看到,最后一个人报数之后,又回到了......