当前位置:网站首页>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;
}
本人能力有限代码实现较为简单。以上便是我对猜数字游戏简单介绍,如有错误,欢迎指出!
边栏推荐
- KingbaseES V8 GIS数据迁移方案(2. Kingbase GIS能力介绍)
- 树形查找(二叉查找树)
- 用@Mapper查询oracle的分区情况报错
- js中try...catch和finally的用法
- Advanced Numbers_Review_Chapter 1: Functions, Limits, Continuity
- 释放技术创新引擎,英特尔携手生态合作伙伴推动智慧零售蓬勃发展
- [Word] #() error occurs after Word formula is exported to PDF
- Domain Driven Design - MDD
- 意识形态的机制
- 如何基于OpenVINO POT工具简单实现对模型的量化压缩
猜你喜欢
iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?
优化Feed流遭遇拦路虎,是谁帮百度打破了“内存墙”?
ExcelPatternTool: Excel表格-数据库互导工具
Hypervisor related knowledge points
【genius_platform软件平台开发】第七十六讲:vs预处理器定义的牛逼写法!!!!(其他组牛逼conding人员告知这么配置来取消宏定义)
海量服务实例动态化管理
【MySQL series】- Does LIKE query start with % will make the index invalid?
How do programmers without objects spend the Chinese Valentine's Day
浅谈数据安全治理与隐私计算
直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning
随机推荐
释放技术创新引擎,英特尔携手生态合作伙伴推动智慧零售蓬勃发展
关于#sql shell#的问题,如何解决?
Jincang database KingbaseES V8 GIS data migration solution (3. Data migration based on ArcGIS platform to KES)
使用SuperMap iDesktopX数据迁移工具迁移ArcGIS数据
Leetcode brushing questions - 22. Bracket generation
直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning
Three handshake and four wave in tcp
编译预处理等细节
高数_复习_第1章:函数、极限、连续
刷爆朋友圈,Alibaba出品亿级并发设计速成笔记太香了
How do programmers without objects spend the Chinese Valentine's Day
MySQL3
基于OpenVINO工具套件简单实现YOLOv7预训练模型的部署
oracle将restful接口封装到视图中
英特尔 XDC 2022 精彩回顾:共建开放生态,释放“基建”潜能
iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?
leetcode-另一棵树的子树
[Word] #() error occurs after Word formula is exported to PDF
Tree search (bintree)
如何逐步执行数据风险评估