猜数游戏(实现) 后附源码

🧸欢迎来到dream_ready的博客,📜相信您对这篇博客也感兴趣o (ˉ▽ˉ;)

📜整型在内存中的存储

亲爱的玩家,在初学C语言的阶段,您有没有预想过用C语言来实现一个猜数游戏呢?

如果有,请允许我来打开您的思路。

思路

       1、系统随机生成一个1——100的随机数,并在本轮游戏中不改变大小。

       2、您可以输入您猜测的数,系统会根据您输入数据的大小,来进行如下判断:

           (1)如果数据小了,会给您提示“数小了”,并给予你再次输入的机会;

           (2)如果数据大了,会给您提示“数大了”,并给予您再次输入的机会;

           (3)如果数据相等,即输入正确,会恭喜您输入正确并再开一轮游戏。

      3、游戏可以反复玩。

接下来,便是代码实现。

代码实现大致流程为:

      1、菜单(开始或退出游戏);

      2、生成随机数并在本轮游戏内保持不变;

      3、系统根据您输入数据的大小来给予游戏提示

      4、若输入正确,则回到菜单位置。

代码实现

       1、我们都知道,一个游戏会有开局菜单供你选择开始或退出游戏,那我们不妨把菜单以函数的形式呈现,我们将它命名为 menu

 那么,我们期望的是开局便有选项菜单,因此我们用do while循环(先执行,后判断)。根据输入数据有以下三种情况:

        (1)输入1,开始游戏;

        (2)输入0,退出游戏;

        (3)输入的数不是0也不是1,系统提示您输入错误,并给予您再次输入的机会。

因此控制游戏开局的代码为:

 while括号内判断条件为n不等于1。

如果n不等于1,则循环再次打印出菜单并给您再输入一次数据的机会来选择是否开始游戏;

如果n等于1,则开始猜数环节。

2、生成随机数。

     (1)首先,学习一个名为 rand 的函数,它的作用便是生成一个随机整数(范围在0——32767之间),

              使用这个函数前需要调用srand函数来设置这个函数的生成器,即设置一个随机的起点。

              需引用头文件:stdlib.h

              来,让我们走进代码:

 那么至此随机数就生成了么?

事情没有这么简单,我们再来运行一次程序:

 我们发现,结果还是这样,看似随机了,但每局随机数都一样,那这样的猜数游戏不就无趣了么,后来再玩的时候直接就知道答案了。

我们知道,rand函数生成的随机数是根据srand()括号内的数为随机起点的,那么我们如果让括号内的数据每局都变化呢,那不就是真正的随机了么。

因此,我们来用一下另一个函数,time函数,即引入时间戳,time函数我在这里简单介绍下,就是根据时间来不断变化的一个数据。

time注释:

                 time函数需引用头文件time.h  

                 此外它返回的数据类型是time_t,我们需要把它强制转换为我们的无符号整型(unsighned int)

                 time函数不需要传参,因此我们直接在括号内输入NULL(空)

因此我们将代码改成如下形式:

 让我们再运行一次:

 可以看到,现在每次的随机数完全随机了,但数太大了,我们只要想0到100的数,于是我们利用取余来使数据达到我们的目的:

int ret = rand() % 100 + 1;

那么随机数据与菜单结合起来代码为:

 

 3、输入数据(猜数字)并给予游戏提示

              (1)如果输入数据大了,输出“数大了”并再给一次猜数字(输入)机会;

              (2)如果输入数据小了,输出“数小了”并再给一次猜数字(输入)机会;

              (3)如果猜对了,那么重新回到菜单处,进行下一轮游戏的开始或退出。

代码实现为:

 4、如果输入正确,则回到菜单处。

restart放在main函数开头:

完整代码截图:

 完整源码:

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

void menu();

int main()
{
restart:
	int i = 0;
	srand((unsigned int)time(NULL));
	int ret = rand() % 100 + 1;
	int n = 0;
	do
	{
		menu();
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			printf("请猜数字:");
			break;
		case 0:
			printf("退出游戏\n");
			return 0;
		default:
			printf("输入错误,重新选择\n");
			break;

		}
	} while (n != 1);
	do
	{
		scanf("%d", &i);
		if (i < ret)
			printf("数小了\n");
		else if (i > ret)
			printf("数大了\n");
		else
		{
			printf("恭喜你,猜对了!!!\n");
			goto restart;
		}
	} while (1);

	
	return 0;
}



void menu()
{
	printf("*******************\n");
	printf("****  1. Play  ****\n");
	printf("****  0. Out   ****\n");
	printf("*******************\n");
}

 🧸欢迎您于百忙之中阅读这篇博客,📜希望这篇博客给您带来了一些帮助,祝您生活愉快!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dream_ready

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

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

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

打赏作者

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

抵扣说明:

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

余额充值