今天我们用我们之前学得知识做个小游戏,下面开始我们的学习。
目标
我们要猜数字为1到100之间的数
输入数大时,提示你猜大了
输入数小时,提示你猜小了
上面是我们要实现的结果
步骤1
我们先要开始生成一个菜单
#include<stdio.h> void menu() { printf("******************\n"); printf("******1.play******\n"); printf("******0.exit******\n"); printf("******************\n"); printf("******************\n"); } int main() { menu(); return 0; }
可以看到我们设置了一个基本的菜单,现在我们要做的就是完成设置一个循环来实现我们的猜数字小游戏,猜数字这个小游戏需要用到do while这个循环,下面我们加入循环来进行操作。
#include<stdio.h> void menu() { printf("******************\n"); printf("******1.play******\n"); printf("******0.exit******\n"); printf("******************\n"); printf("******************\n"); } int main() { int input; do { menu(); printf("请选择数字>"); scanf("%d", &input); switch (input)//输入几就是进入case几 { case 1: { printf("进入游戏\n");//这里的代码要改 } case 0: { printf("退出游戏\n"); break; } default: { printf("请重新选择\n"); break;//因为输入的是0和1,当输入其他数字的时候就退出 } } } while (input);//因为输入1的时候就进入,,可以实现玩多次的效果 return 0; }
下面我们开始写猜数字函数的代码
要实现猜数字,首先要生成一个1-100的随机数,然后玩家进行猜数字,如果猜大了输出猜大了,反之猜小了
现在我们要先认识一下上面rand函数
参数是void,说明函数没有参数
这是rand需要包含的头文件
我们可以看到rand函数返回一个随机数,范围是0-RAND_MAX,让我们来看一下RAND_MAX的范围
这是16进制转换为10进制,可以范围是0-32767
void game() { int ret = rand(); printf("%d\n", ret); }
这是我们游戏生成随机数的代码,看下面的两次结果
我们可以看到上的结果是一样的,所以这里又存在问题了,如果玩家多玩几次就找到规律,游戏就失去意义。
我们有发现在这里有个srand函数,我们现在研究一下
void game() { srand(1); int ret = rand(); printf("%d\n", ret); }
void game() { srand(2); int ret = rand(); printf("%d\n", ret); }
我们可以看大当输入不同的数字的时候,产生随机数才会变,这样我们要一个随机数又要输入一个随机数,这不是个更麻烦,所以我们要改进,引进时间戳这个概念
时间戳顾名思义是表示时间的概念,时间戳的单位是秒,每时每刻都在变,单位是秒。
所以我们得加上time函数来每时每刻改变
time函数需要一个指针,但是设计随机数的时候不需要,我们就可以给一个空指针(NULL),其实time_t是long long 经过重命名的值,我们在使用time函数的时候参数是unsigned int的值。
void game() { srand((unsigned int)time(NULL)); int ret = rand(); printf("%d\n", ret); }
但是这样又会出现问题,如果我们输入快的时候,会发现输入值是一样的,所以我们可以把他放在主函数里,这里就避免这个问题。
解决了上面的问题,我们现在要学怎么样生成一个1-100的函数
int ret = rand()%100+1;
取余数之后是0到99的数,加上1的时候就变成1-100的随机数了
猜数字代码实现
void game() { int ret = rand()%100+1; int k = 0; while (1) { printf("猜数字>"); scanf("%d", &k); if (k > ret) { printf("猜大了\n"); } else if (k < ret) { printf("猜小了\n"); } else { printf("猜对了\n"); break; } } }
完整代码
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> void menu() { printf("******************\n"); printf("******1.play******\n"); printf("******0.exit******\n"); printf("******************\n"); printf("******************\n"); } void game() { int ret = rand()%100+1; int k = 0; while (1) { printf("猜数字>"); scanf("%d", &k); if (k > ret) { printf("猜大了\n"); } else if (k < 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; }
上面就是我们的猜数字代码,大家可以尝试着自己写一下
今天的分享到这里就结束了,我会继续更新分享,希望大家多多支持,我们一起进步吧,谢谢大家!!!