从零开始的猜数字游戏

目录

游戏要求

一.随机数生成

1.rand函数

2.srand函数

3.time函数

​编辑​编辑4.随机数的范围

二、猜数字游戏实现


游戏要求

        1.系统自动生成一个1~100的随机数

        2.玩家共有5次机会,猜测生成的随机数的值

        3.玩家每猜一个值,系统将自动反馈其与所生成随机数的大小关系

        4.当猜到正确的值或5次机会用光,游戏结束


一.随机数生成

1.rand函数

        rand函数原型:int rand(void);

        功能:生成一个伪随机数作为返回值

        参数:void(无参数)

        返回值:int类型,范围为0~RAND_MAX,其中RAND_MAX的值随编译器而定,大部分编译器上是32767

        头文件:stdlib.h

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

int main()
{
    printf("%d\n", rand());//41
    printf("%d\n", rand());//18467
    printf("%d\n", rand());//6334
    printf("%d\n", rand());//26500
    return 0;
}

       

        由上面结果可以看出,rand生成的值不会发生变化,是一个伪随机数,rand函数是对一个叫“种子”的基准值进行运算生成的随机数。

        rand函数生成随机数的默认种子为1,所以rand生成的随机数实际上是可预测的

2.srand函数

        srand函数原型:void srand(unsigned int seed);

        功能:初始化随机数的生成器,设置rand函数生成随机数时的种子

        参数:unsigned int类型的种子

        返回值:void(无返回值)

        头文件:stdlib.h

        srand函数能设置rand函数的种子,那么只要让种子随机,rand就能生成随机数了。但我们的目的是生成一个随机数,却需要先得到一个随机数作为种子,这样不就矛盾了吗?

3.time函数

        time函数原型:time_t time(time_t* timer);

        功能:计算当前日历时间与1970年1月1日0时0分0秒的差值,单位为秒,并将其作为返回值,即时间戳

        参数:指向time_t类型的指针

        返回值:time_t类型,本质上是32位或64位的整型。如果参数为非NULL,函数将时间戳放在timer指向的内存中带回去;如果函数为NULL(空指针),函数则只返回时间戳

        头文件:time.h

        因为时间时刻在发生变化,所以只需将time函数的返回值作为种子即可

        附:这里不直接将time函数的返回值作为随机数,是因为可以通过看电脑时间,容易算出该值的大小。

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

int main()
{
    printf("%d\n", time(NULL));
    return 0;
}

4.随机数的范围

        生成a~b的方法如下:

rand()%(b-a+1) + a;

二、猜数字游戏实现

        game.c文件

#include"game.h"

void menu(void)
{
	printf("----------------------\n");
	printf("**********************\n");
	printf("******1.开始游戏******\n");
	printf("******0.退出游戏******\n");
	printf("**********************\n");
	printf("----------------------\n");
}

void game(void)
{
	int guess = 0;
	system("cls");
	printf("1--100猜一个数\n");
	int count = 5;
	int num = rand()%100 + 1;
	while (count)
	{
		printf("----------------------\n");
		printf("请输入:>");
		scanf("%d", &guess);
		if (guess > num)
		{
			printf("猜大了\n");
		}
		else if (guess < num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
		count--;
	}
	if (!count)
	{
		printf("----------------------\n");
		printf("哈哈,你输啦\n");
		printf("正确答案是%d\n", num);
	}
	menu();
	printf("再来一把吗:>");
}

        game.h文件

#pragma once


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

void menu(void);
void game(void);

        main.c文件

#include<stdio.h>
#include"game.h"



int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	menu();	
	printf("来一把吗:>");
	do
	{	
		scanf("%d", &input);
		if (input == 1)
		{
			game();
		}
		else if (!input)
		{
			printf("欢迎下次再玩\n");
			break;
		}
		else
		{
			printf("输错了, 请重新输入\n");
		}
	} while (input);
	
	return 0;
}

以上就是猜数字游戏的全部内容,感谢观看!

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值