前言
嗨,亲爱的读者们!我是艾老虎尤,今天我们将探讨一款经典游戏——猜数字!
无论你是一位年轻的编程新手,还是一位经验丰富的代码大师,这篇博客都将为你带来乐趣和启发。
我们将从头开始创建一个简单的猜数字游戏,使用C语言编写代码。无需担心,即使你是个新手,我们将提供易于理解的指导,带你一步一步完成这个项目。同时,如果你是个经验丰富的开发者,也可以在游戏的基础上添加自己的创意和改进。
一、游戏规则:
- 程序会生成1到100的随机数
- 猜大了,程序会告诉你猜大了,继续猜。
猜小了,程序会告诉你猜小了,继续猜。
猜对了,程序会告诉你猜对了
二、编程步骤
1.目录
首先我们需要一个目录,提示玩家如何开始游戏,我们先从main函数开始,利用do while循环和一个自定义函数把目录编辑出来,再使用switch语句选择是开始游戏还是退出游戏,我们再定义一个变量,是输入值,如果选择1,就开始游戏,如果选择0,就退出游戏,如果既不是0也不是1,就重新选择。
代码如下(示例):
#include <stdio.h>
void dirictory()//目录
{
printf("******************\n");
printf("*** 1.play ***\n");
printf("*** 0.exit ***\n");
printf("******************\n");
}
int main()
{
int input = 0;
do
{
dirictory();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜数字游戏开始!\n");
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新选择!\n");
}
} while (input);
return 0;
}
效果演示
这里有三个点要注意:
第一,我们使用了库函数scanf和printf,所以我们要包含头文件#include<stdio.h>
第二,这里就非常巧妙的一个点就是input既可以当作do while循环的判断部分,也可以当作switch语句的整形常量表达式,如果input是0,则退出do while循环,如果是0,在switch语句中则选择退出游戏。
第三,input要定义在mian函数里面,不能`定义在do while或者是switch里面,因为定义在里面的话,在while循环判断部分,这个变量是不能使用的。
2.猜数字游戏逻辑实现
接下来我们就来写一个game函数来实现猜数字游戏的整个逻辑。
代码如下(示例):
void game()
{
//实现猜数字游戏的整个逻辑
}
int main()
{
int input = 0;
do
{
dirictory();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新选择!\n");
}
} while (input);
return 0;
}
2.1 生成随机数
首先我们需要在逻辑中完成生成随机数,C语言中有一个库函数叫
rand
,是专门用来生成随机数的,点击生成随机数即可跳转到函数的介绍,rand函数返回的是一个整形,是0到RAND_MAX
之间的一个随机数。
使用这个函数要包含头文件#include<stdlib.h>
#include <stdio.h>
#include<stdlib.h>
void dirictory()
{
printf("******************\n");
printf("*** 1.play ***\n");
printf("*** 0.exit ***\n");
printf("******************\n");
}
void game()
{
//实现猜数字游戏的整个逻辑
//1.生成随机数
int ret = rand();
printf("%d\n", ret);//返回的值放到ret里面我们打印看看
}
int main()
{
int input = 0;
do
{
dirictory();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新选择!\n");
}
} while (input);
return 0;
}
效果展示
可这样就会有一个问题,如果再运行一遍程序,他生成的随机数是一样的,可以复制我的代码多运行即便看看效果。
如果每次生成的数字是一样的,那这个游戏就没啥好玩的,我们要生成的是随机数,实际上rand函数在使用前要使用
srand
函数,来设置随机数的生成器,srand需要一个整形参数,假设我们给它一个0。
效果演示
但是我们又发现每次生成的数字是一样的,因为srand函数参数固定了,我们需要一个随机数,这里我们就要用到另外一个知识,叫做
时间戳
。
2.2 时间戳
时间戳就是这个时间点到1975年一月一日之间的一个时间差值,单位是秒。
这里想使用时间戳的话,我们要使用time函数
time函数返回的是一个整形,只不过被重命名成time_t了,他需要一个指针,我们传一个空指针NULL
然后把参数给函数srand
这里要包含头文件#include<time.h>
效果展示
我们发现,如果按的很快的话,随机生成的数字会非常相近,甚至相同,原因是srand函数只需要调用一次就行,我们把它放到main函数里面即可。
效果展示:
题目的要求是生成1到100的数字,可是我们生成的数字太大了,想要解决这个问题,我们直接
%100+1
即可,因为任何数%100+1
只能是1到100的数字,假设1234%100+1=35
效果展示:
到这里我们的生成随机数部分的代码已经完成了,就可以继续下一步了。
3.猜数字
这里就比较简单了,我们ret是随机值,我们只需要输入一个值然后用循环和它比较即可。
完整代码
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
void dirictory()
{
printf("******************\n");
printf("*** 1.play ***\n");
printf("*** 0.exit ***\n");
printf("******************\n");
}
void game()
{
int num = 0;
//实现猜数字游戏的整个逻辑
//1.生成随机数
int ret = rand()%100+1;
//2.猜数字
while (1)
{
printf("请开始猜数字游戏!");
scanf("%d", &num);
if (ret > num)
{
printf("您猜的数字太小了\n");
}
else if (ret < num)
{
printf("您猜的数字太大了\n");
}
else
{
printf("恭喜您!猜对了!\n");
break;
}
}
}
int main()
{
int input = 0;
srand(time(NULL));
do
{
dirictory();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新选择!\n");
}
} while (input);
return 0;
}
运行效果:
总结
在本博客中,我们成功地创建了一个有趣的猜数字游戏,并用C语言编写了相应的代码。我们一起探讨了如何生成随机数字、接受用户输入、检查猜测是否正确系统。通过这个项目,你不仅学到了如何编写代码来实现一个小游戏,还加深了对基本编程概念的理解,如条件语句和循环。
这个游戏是一个很好的起点,你可以在此基础上进一步扩展和改进,例如增加难度级别、美化用户界面或与朋友分享。不管你是想练习编程技能还是寻找一些有趣的挑战,这个猜数字游戏都是一个很好的选择。
希望你在本博客中有所收获,也希望你能在未来的项目中充分发挥你的创造力和编程技能。谢谢你的阅读,愿你在编程世界中获得更多的成功和乐趣!