c语言轻松实现猜数字小游戏
作者:马桶上看算法 发布时间:2021-10-21 23:42:13
标签:c语言,猜数字,游戏
一、前言
在学习了循环、分支、和函数之后,可以写一些简单的小游戏来给自己的编程之路增添一份乐趣。不仅提升了编码能力,还可以边学边玩,简直妙哉妙哉!
二、游戏逻辑
1.打印选择菜单(1.play、0.exit)
2.调用rand()函数生成随机数
3.设置随机数范围
4.猜数字
5.判断猜的大小
三、思维导图
四、游戏过程
五、代码分析
1.生成随机数的方法
仅仅使用rand() 函数来生成随机数是不行的,因为它每玩一次生成的随机数都是相同的,即随机数不随机,所以要通过srand()函数,种下一个随机种子,来产生随机数。根据时间每时每刻都是变化的,可以用time()时间函数来产生种子。
这里time_t的类型就是 在C语言中被定义为长整型,而srand()函数的参数类型为unsigned int (无符号整形),所以使用时要强制类型转换,而且**time()**函数,不需要设置参数,故用NULL代替。
2.设置随机数范围的方法
我们已经让系统随机生成了一个随机数,因为系统生成的随机数范围太大,猜起来比较耗时,我们先确定一个随机数的范围,在0–100之间。rand()%100+1,就可以得到0-100之间的随机数。rand()%100得到的是1~99之间的随机数,再加上1就是1~100之间的随机数了。
六、完整代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("**************************\n");
printf("******* 1.play *******\n");
printf("******* 2.exit *******\n");
printf("**************************\n");
}
void game()
{
//猜数字游戏的实现
//1.生成随机数
//rand函数返回了一个0-32767之间的随机值
//时间- 时间戳
int ret = rand() % 100 + 1;
//%100的余数是0-99,然后+1,范围就是1-100
//printf("%d\n",ret);
//2.猜数字
int guess = 0;
while (1)
{
printf("请猜数字:");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
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;
}
来源:https://blog.csdn.net/m0_63033419/article/details/124311980


猜你喜欢
- 在使用JDBC的时候,数据库据连接是非常宝贵的资源。为了复用这些资源,可以将连接保存在一个队列中。当需要的时候可以从队列中取出未使用的连接。
- centos下搭建GitLab+Jenkins持续集成环境,供大家参考,具体内容如下1、安装JDKyum install -y java2、
- OpenGL ES是 OpenGL三维图形API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。 Ophone目前支持OpenGL
- 差不多一年前在自己的项目中用过这效果,虽然很简单,但还是写写。1、首先在你的res目录下新建anim子目录,并在anim目录下新建两个文件:
- Java基础面试题及答案集锦(基础题122道,代码题19道),具体详情如下所示:1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中
- 本文实例讲述了Java中计算时间差的方法。分享给大家供大家参考。具体如下:假设现在是2004-03-26 13:31:40过去是:2004-
- 在实际项目中,在处理较大的文件时,常常将文件拆分为多个子文件进行处理,最后再合并这些子文件。下面就为各位介绍下Java中合并多个文件的方法。
- Android 媒体库数据更新方法总结在项目中,我们经常要创建个自己的目录,里面存放一些图片啊文件之类,比如:我在SD卡中刚创建了一个文件夹
- 概述递归:指在当前方法内调用自己的这种现象。递归的分类:递归分为两种,直接递归和间接递归。直接递归称为方法自身调用自己。间接递归可以A方法调
- foreach嵌套使用if标签对象取值问题最近做项目过程中,涉及到需要在 Mybatis 中 使用 foreach 进行循环读取传入的查询条
- 面向接口编程接口的定义及功能这里从java介入吧,在java中,接口是一种特殊的类,接口里面的量都是常量,接口的方法只有定义而没有实现,换句
- 单例模式是23种设计模式之一,是比较简单的一种设计模式,它的目的是无论调用多少次,都返回同一个对象,它的特点是构造器私有化。它分为两种结构,
- 本文实例为大家分享了Spring AOP实现记录操作日志的具体代码,供大家参考,具体内容如下1 添加maven依赖<dependenc
- 前言Exchange(交换器)顾名思义,它是用来实现两个线程间的数据交换的,它诞生于 JDK 1.5,它有两个核心方法:exchange(V
- 本文实例分析了Android中ListView用法。分享给大家供大家参考,具体如下:通过在Layout中添加ListView Widget可
- 本文记录刚接触Android开发搭建环境后新建工程各种可能的报错,并亲身经历漫长的解决过程(╥╯^╰╥),寻找各种偏方,避免大家采坑,希望能
- 碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示。Fragment的出现,如微信的额主界面包含多个Fragment,使得微信
- 一、前言 做过系统参数设置的同学们,肯定遇到过要提供一系列具有相同特点的选项供用户选择。
- 通过这篇文章通过实例代码向大家介绍了Spring实例化bean的几种方法,接下来看看具体内容吧。1.使用类构造器实现实例化(bean的自身构
- 1、CountDownLatch:一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。2、ThreadPoolE