当前位置:网站首页>C语言实现简单猜数字游戏
C语言实现简单猜数字游戏
2022-08-05 02:12:00 【宗介@bit】
前言
猜数字游戏,程序随机生成数字,玩家输入数字,程序提示玩家输入的数字与生成的随机数相比是猜大了,还是猜小了。直到猜中,游戏结束。
一、大致思路
1.产生随机数,同时注意随机数应该控制在一定的范围内,如果数字过大会难以猜中,影响游戏体验。
2.判断逻辑,因为大概率不会一次猜中所以应该采用循环的方式来实现判断是否猜中数字环节。
3.设计简易的菜单,提示玩家是否进入游戏。所以是应该至少进入游戏一次在决定是否开始游戏,可以采用do while循环来实现
二、具体实现
1.利用打印函数简单设计游戏菜单:
void meau()
{
printf("******************\n");
printf("*****1 play*******\n");
printf("*****0 exit*******\n");
}
关于将开始开始游戏设置成0退出游戏设置成1这一点有个很明显的好处,先前分析过进入游戏采取do while 循环的方式,如果将输入选择数字 1或0设置成循环条件的话,很自然的过渡到输入1进入游戏直到玩完游戏退出,输入0跳出循环,刚好满足退出游戏的这一设定,整个大体逻辑就有了。因为进入循环后又要面临着选择,所以循环内部采用switch语句来实现选择逻辑。基于以上思考便有了以下的代码
int main()
{
int input = 0;
do
{
meau();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
while (input);
return 0;
}
由于游戏主体猜数字逻辑较多,可以将其封装成game函数来设计它。关于这个游戏的实先首先是要生成随机数。可以利用rand函数来实现随机数的生成。但通过输入数据测试发现一个问题,每次生成的随机数都不随机
所以为了解决这问题,我们利用srand初始化随机数生成器,为了使得每次初始化的值都有所不同,可以用时间戳来生成不同的随机数。因为电脑的时间是随时变化的。如果将随机数生成放在game函数中的,当我们进入游戏每次间隔很短的话随机数可能会相同,因此可将随机数生成放在main函数中因为main每次只调用一次,srand调用一次就可以一直使用。
int main()
{
srand((unsigned int)time(NULL));//设置随机数生成器
.............................
...............................
..............................
}
有了随机数就只剩判断逻辑了,设置一个变量接收随机数,然后玩家猜测的的数字与该变量相比较。如果大了提示玩家输入的数字大了,反之亦然。如果相等提示玩家猜对了。由于猜数字大概率不是一次就对所以用循环实现,当猜对时除了提醒玩家猜对还应该跳出循环。为了避免随机数过大,将产生的随机数限定在100的范围内。将产生的随机数对100取余加1即可。
代码如下:
/rand生成随机数 0~32767
//返回一个0~32767;
void game()
{
system("cls");//清理屏幕
printf("恭喜进入游戏\n");
//1.生成随机数
// 2.猜数字
//srand初始化随机数生成器
//时间戳
int ret = rand()%100+1;//0~100的数字
while (1)
{
printf("请猜数字\n");
int guess = 0;
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜猜对了\n");
break;
}
}
}
总结
1.源码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void meau()
{
printf("******************\n");
printf("*****1 play*******\n");
printf("*****0 exit*******\n");
}
//rand生成随机数 0~32767
//返回一个0~32767;
void game()
{
system("cls");//清理屏幕
printf("恭喜进入游戏\n");
//1.生成随机数
// 2.猜数字
//srand初始化随机数生成器
//时间戳
int ret = rand()%100+1;//0~100的数字
while (1)
{
printf("请猜数字\n");
int guess = 0;
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜猜对了\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));//设置随机数生成器
int input = 0;
do
{
meau();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
while (input);
return 0;
}
本人能力有限代码实现较为简单。以上便是我对猜数字游戏简单介绍,如有错误,欢迎指出!
边栏推荐
- 【MySQL系列】- LIKE查询 以%开头一定会让索引失效吗
- 释放技术创新引擎,英特尔携手生态合作伙伴推动智慧零售蓬勃发展
- PHP技能评测
- 记录谷歌gn编译时碰到的一个错误“I could not find a “.gn“ file ...”
- AI+PROTAC|dx/tx完成500万美元种子轮融资
- Xunrui cms website cannot be displayed normally after relocation and server change
- 编译预处理等细节
- 线性表的查找
- 领域驱动设计——MDD
- ExcelPatternTool: Excel table-database mutual import tool
猜你喜欢

《.NET物联网从零开始》系列

HOG特征学习笔记

DAY22:sqli-labs 靶场通关wp(Less01~~Less20)

迁移学习——Joint Geometrical and Statistical Alignment for Visual Domain Adaptation
![[Unity Entry Plan] Handling of Occlusion Problems in 2D Games & Pseudo Perspective](/img/de/944b31c68cc5b9ffa6a585530e7be9.png)
[Unity Entry Plan] Handling of Occlusion Problems in 2D Games & Pseudo Perspective

线性表的查找

如何基于OpenVINO POT工具简单实现对模型的量化压缩

多线程(2)

Flink 1.15.1 集群搭建(StandaloneSession)

.Net C# Console Create a window using Win32 API
随机推荐
如何模拟后台API调用场景,很细!
SuperMap支持的国产环境汇总
C学生管理系统 指定位置插入学生节点
Greenplum数据库故障分析——能对数据库base文件夹进行软连接嘛?
如何看待自己的羞愧感
Object.defineProperty实时监听数据变化并更新页面
EBS uses virtual columns and hint hints to optimize sql case
在这个超连接的世界里,你的数据安全吗
How to create an rpm package
Greenplum数据库故障分析——版本升级后gpstart -a为何返回失败
为什么他们选择和AI恋爱?
Intel XDC 2022 Wonderful Review: Build an Open Ecosystem and Unleash the Potential of "Infrastructure"
Short domain name bypass and xss related knowledge
Live playback including PPT download | Build Online Deep Learning based on Flink & DeepRec
The difference between a process in user mode and kernel mode [exclusive analysis]
EBS利用虚拟列及hint 提示优化sql案例一则
原生js实现多选框全部选中和取消效果
释放技术创新引擎,英特尔携手生态合作伙伴推动智慧零售蓬勃发展
短域名绕过及xss相关知识
Residential water problems
