我是靠谱客的博主 平常狗,这篇文章主要介绍C语言猜数字游戏实现1.整体框架2.简易菜单3.游戏逻辑4.最终成果展示,现在分享给大家,希望可以做个参考。

欢迎来到 Claffic 的博客 ????????????

前言: 

猜数字是一项简单的小游戏,跟着C看看如何从无到有,有逻辑地把这项小游戏用C语言写出来吧。

初学C语言的小伙伴放心食用~~~

目录

❤️1.整体框架

????2.简易菜单

????3.游戏逻辑

3.1随机数字的生成

3.2猜数字

????4.最终成果展示


猜数字游戏的要求:

1.生成1~100之间的随机数;

2.猜数字:

   1>猜小了,程序会告诉你猜小了,继续猜;

   2>猜大了,程序会告诉你猜大了,继续猜;

   3>才对了,程序会告诉:恭喜你猜对了!!!,游戏结束。

3.游戏可以反复玩。


1.整体框架

进入程序,输入1开始猜数字,输入0退出游戏,此处可用switch-case执行分支;

要使游戏至少能进行一次,可以使用do  while循环;

这样可以先写出整体框架

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h> int main() { int input = 0;//要作为循环判断条件,所以初始化在循环体系外 do { //打印菜单 menu(); //选择入口 printf("请选择:"); scanf("%d", &input); switch (input) { case 1: printf("猜数字n"); //游戏逻辑 geme(); break; case 0: //退出 printf("退出游戏n"); break; default: printf("选择错误,请重新输入"); break; } } while (input);//input是0时为假,是1时为真,可以作为判断标志 return 0; }

2.简易菜单

打印一个简易菜单,创建一个菜单函数:

复制代码
1
2
3
4
5
6
7
8
void menu() { printf("****************n"); printf("* 1.play *n"); printf("* 0.exit *n"); printf("****************n"); }

到这里游戏的基本框架就有了

运行:


3.游戏逻辑

3.1随机数字的生成

在C语言中,有专门生成随机整数的函数,那就是rand函数

C/C++资源网站

rand函数返回的是0~RNAD_MAX之间的整数值

转到定义,可以看到RAND_MAX代表的十六进制数字 7fff

转换为十进制就是32767

那就明白了:

rand()随机生成0~32767之间的整数

按照思路创建game函数:

复制代码
1
2
3
4
5
6
void game() { int ret = rand(); printf("%dn", ret); }

运行几次:

 

发现每次生成的数字都是相同的,

每次生成的数字是相同的?那可没意思,

怎么解决这个问题呢?

其实rand函数并不是这么使用的,我们忽视了一个关键点:

那就是在使用rand函数之前要调用srand函数来设置随机数的生成器

要调用srand函数,找到关于srand函数的信息

应用srand要返回一个整数值

下面随机给srand一个整数并运行程序:

诶?

如果给srand的值是固定的,那生成的数也是固定的

反过来想,如果给srand的值不是固定的,那生成的数不就不是固定的了吗?也就是实现了随机数的生成

问题又来了,有没有随时变化的值?

没错,那就是时间

于是我们引入一个概念:时间戳

恰好 C语言中,time函数会返回时间戳

time_t本质上就是整形,这里不做过多阐述

需要注意的是time函数需要的是time_t* ,也就是指针

而我们对返回的值没有确界要求,只要让time返回一个数就可以了

那我们给空指针NULL

复制代码
1
srand(time(NULL));

此时出现了警告:

解决方法很简单,把time强制转化成unsigned int就好

于是就有了:

复制代码
1
srand((unsigned int)time(NULL));

 加入game函数:

复制代码
1
2
3
4
5
6
void game() { srand((unsigned int)time(NULL)); int ret = rand(); printf("%dn", ret); }

运行几次:

问题双来了:

每次生成的数字都很接近,尤其是前后选择时间较短的时候

原因是每次选择都会调用一次srand函数,相当于每次进行游戏都会重置起点

其实srand函数只要调用一次就行了,不需要频繁调用

通过把srand函数放到main函数开头就可以解决这个问题了

最后,我们需要的是1~100的整数

只需要把rand返回的值模100并+1就ok

复制代码
1
2
3
4
5
void game() { int ret = rand()%100+1; printf("%dn", ret); }

3.2猜数字

常规思路

输入并判断:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
printf("猜一个吧"); scanf("&d", &num); if (num > ret) { printf("猜大了"); } else if (num < ret) { printf("猜小了"); } else { printf("恭喜你猜对了!!!"); }

 猜大和猜小都需要重新猜,知道猜对为止

所以while循环给死,猜对跳出

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void game() { int ret = rand()%100+1; int num = 0; //printf("%dn", ret); while (1) { printf("猜一个吧:"); scanf("%d", &num); if (num > ret) { printf("猜大了n"); } else if (num < ret) { printf("猜小了n"); } else { printf("恭喜你猜对了!!!n"); break; } } }

4.最终成果展示

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h>//包含rand和srand函数 #include<time.h>//包含time函数 void menu() { printf("****************n"); printf("* 1.play *n"); printf("* 0.exit *n"); printf("****************n"); } void game() { int ret = rand()%100+1; int num = 0; //printf("%dn", ret); while (1) { printf("猜一个吧:"); scanf("%d", &num); if (num > ret) { printf("猜大了n"); } else if (num < ret) { printf("猜小了n"); } else { printf("恭喜你猜对了!!!n"); break; } } } int main() { srand((unsigned int)time(NULL)); int input = 0; do { //打印菜单 menu(); //选择入口 printf("请选择:"); scanf("%d", &input); switch (input) { case 1: //游戏逻辑 game(); break; case 0: //退出 printf("退出游戏n"); break; default: printf("选择错误,请重新输入"); break; } } while (input); return 0; }

这游戏我能玩一天!!! 


如果你觉得这篇文章还不错并且对你有帮助,不妨动动手指点赞收藏加转发,给一个大大的关注

你们的每一次支持都将转化为我前进的动力!!!????????????

最后

以上就是平常狗最近收集整理的关于C语言猜数字游戏实现1.整体框架2.简易菜单3.游戏逻辑4.最终成果展示的全部内容,更多相关C语言猜数字游戏实现1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(107)

评论列表共有 0 条评论

立即
投稿
返回
顶部