猜数字游戏详解———内附源码

前言

嗨嗨嗨,今天第二更啦。
来分享一下大部分编程人的第一个小游戏——"猜数字”的思路,逻辑和代码。
将对每一个部分,每一行代码详细分析,让大家能够学明白猜数字游戏。


—、思路

1.首先我们想想平时玩游戏时打开游戏,第一眼看到什么?
回想一下,是“菜单”,对吧。
所以,我们第一步需要制作一个菜单
2.再接着想一想,玩猜数字游戏,我们得有一个目标数字,所以得产生一个目标数字,对吧,我们姑且称之为炸弹。
3,有了炸弹我们得猜数字对吧,所以得有一个输入
4除此之外,我们还得判断输赢对吧。

综合以上四点,我们开始设计程序

二、分割板块

1.菜单

菜单要包括开始游戏和退出游戏,我们分别以play和exit替代
设定选择1为选择play,选择0为选择exit
于是写出一个菜单如下:

void main()
{
printf("#####################\n");
printf("########1.play#######\n");
printf("########0.exit#######\n");
printf("#####################\n");
}

ok .菜单写完了。

2.游戏部分

首先得要一个随机数
讲到这里就得牵引一个库函数

(1)rand()

rand函数的作用是产生一个随机数。
我们创建一个int类型变量k来接收这个随机数
在这里插入图片描述
可以看到两点:
1.rand括号中为void,意味着括号中空置就行,不用存放东西
2.rand的头文件为<stdlib.h>

(2)确定范围

但是我们猜数字,也不可能乱猜啊,所以必须给这个随机数限定一个范围
限定范围,你想到什么了。
哈哈,我第一次啥都没想到。
解开谜底,使用取余数来确定范围
在这里插入图片描述
大家想一想a/b时的到的余数是不是一定在0到b-1之间
所以我们以rand()作为被除数,b作为除数
假设我们需要的范围是1~100(本次以1到100作为游戏范围)
所以我们用rand()%100获取范围,这是得到的余数的范围是0到99,所以我们需要加1

因此,我们将k = rand() % 100 +1作为随机数。

(3)srand()

需要注意的是在使用rand()前,必须要使用srand()
srand是啥呢?
哈哈,又是一个库函数。
是用来设置随机数生成器的。
在这里插入图片描述
可以看到srand在使用时需要在括号内放入一个无符号整型(unsigned int)。
此外还可以看到
在这里插入图片描述
srand的头文件也是<stdlib.h>

为了让电脑生成得数字够随机,我们必须找到一个随时都在变化的东西
此时,我们可以想到,时间是在无时无刻不发生变化的东西
在此,引入一个概念——时间戳

(4)时间戳

定义:时间戳是计算机科学中常见的术语,是指一种记录时间的方式,通常用于记录某个事件的发生时间或者文件的创建、修改时间等信息。简单的说,时间戳就是一串数字,表示从某个固定时间点开始到现在的时间长度,通常以秒为单位计算。

于是我们把时间戳给放到srand的括号中去

在使用时间戳时,需要使用time()
头文件为<time.h>
time这么使用的
在这里插入图片描述

看不懂吧,这个讲起来有点麻烦,涉及到指针,现阶段,只需记住
可以这么使用time(NULL)。
NULL是一个空指针
所以用作srand((unsigned int ) time (NULL)
作为随机数生成器;

ok随机数终于搞定了。

接下来,给予提示和判断输赢

(5)判断输赢,给予提示

我们设置一个变量i来存储我们猜的数字,进行循环

  • 在每一次猜数字的过程中,可能成功与失败
  • 如果成功,则提示“游戏获胜”,并使用break跳出循环;
  • 如果失败就要给予提示,猜大了,提示“猜大了”,如果猜小了,提示“猜小了”
    之后根据提示重新进行猜数字。

3.主函数部分

  • 既然我们需要先打印菜单,那么可以使用do while循环
    先打印菜单,再做出判断我们菜单中1表示play,0表示exit。

  • 因此需要设置一个变量接受选择,我们将其命名为input

  • 1, 0,以及其他,可以构成一个分支语句,我们选择使用switch语句

  • case1:进入游戏

  • case0:退出游戏

  • default:重新选择

之后,由while接受input判断是否重新进入循环
比如输入input=1或者其他,则重新进入循环;
如果input=0,则退出循环。

ok到这里,程序的各个部分大致讲完了

接下来展示一下源码,并进行效果演示。

三、源码及运行效果演示。

#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 i = 0;
	int ret = rand() % 100 + 1;

	while (1)
	{
		printf("请猜数字\n");
		scanf("%d", &i);

		if (i > ret)
		{
			printf("猜大了\n");
		}
		else if (i < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("游戏胜利\n");
			break;
		}
	}
}
int main()
{
	int input = 0;

	srand((unsigned int)time(NULL));

	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch(input)
		{ 
		case 1:
			printf("游戏开始\n");
			game();
			break;
		case 0:
			printf("安全退出\n");
			break;
		default:
			printf("选择错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
ok,正文到这里就结束了,希望大家能够喜欢!
!!!!!!!!!!!!点点关注吧!!!!!!!!!!!!

ps :小小补充一下。

  • 关于文中出现的多个库函数,这里推荐两个方式去查询

  • a.网站cplusplus

  • b.软件MSDN

  • 另外关于void的介绍,可以参照这篇文章


!!!!!!!!!!!!!!给个关注吧!!!!!!!!!!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值