猜数字游戏的简单实现

简介: 猜数字游戏的简单实现

猜数字游戏的实现要求:1.有一个游戏菜单,可供使用者选择是否要玩游戏; 2.可供使用者重复游玩;3.程序每次产生的数字随机;4.所生成的随机数在1-100;5.在每一个使用者输入数字后可以做出判断并给出相应的提示;

设计步骤


一、设计游戏菜单


游戏菜单应有游戏名称;游戏选项;游戏注意事项等。设计代码如下


1. 
2. void mean()//创建函数,输出游戏菜单
3. {
4.  system("cls");
5.  printf("***********猜数字游戏**********\n");
6.  printf("*******************************\n");
7.  printf("******1.玩游戏 0.退出游戏******\n");
8.  printf("*******************************\n");
9.  printf("注意:所猜数字应位于1-100!!!\n");
10. }


system("cls"); 是为了实现在每一次游戏结束后实现清屏操作;需要引入头文件#include<stdlib.h>或#include<windows.h>


二、随机数的产生


1、rand()

此数字游戏实现的最大难点之一就在产生1-100的随机数,这里我们引入一个rand()函数,在使用函数rand()需要引入头文件#include<stdlib.h>

rand()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同

rand()函数原型:int rand(void);

使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100+1;


1.  RAND_MAX;//搭配rand()使用,可产生0-32767的随机数;
2.  //由于rand()每次产生的随机数是固定的所以还需要搭配srand()使用,
3.  rand();
4.  int b = rand() % 100 + 1;//模100+1为了产生1-100的数

2、scrand()

由于rand()产生的是伪随机数,所以还需要引入srand()函数,srand()的头文件依旧是nclude<stdlib.h>   srand()函数原型为 void scrand (usigned int seed);

srand()用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。

使用time时要引用头文件#include<time.h>


1.  srand((unsigned int)time(NULL));//unsigned int为srand()函数原型,这儿为强制类型转换;
2.  //time为一个时间戳,目的是为使srand()返回rand()内为一个随机值
3.  //srand()只需要使用一次就好,如果放入循环中,则每循环一次都会调用一次,循环过快的话,会产生相同的返回值

3、使用rand()和srand()产生指定范围内的随机整数的方法“模除+加法”的方法

因为,对于任意数,0<=rand()%(n-m+1)<=n-m

因此,0+m<=rand()%(n-m+1)+m<=n-m+m

因此,如要产生[m,n]范围内的随机数num,可用:

int num=rand()%(n-m+1)+m;

其中的rand()%(n-m+1)+m算是一个公式,记录一下方便以后查阅。

比如产生10~30的随机整数:

srand(time(0));

int a = rand() % (21)+10;


三、游戏部分的实现


随机数部分已经实现,则接下来需要解决怎样判断用户输入数是否为那个数,并给出相应回应。

实现代码如下


1. void game()
2. {
3.  int c = 1;
4.  int put = 0;
5.  RAND_MAX;//搭配rand()使用,可产生0-32767的随机数;
6.  //由于rand()每次产生的随机数是固定的所以还需要搭配srand()使用,
7.  rand();
8.  int b = rand() % 100 + 1;//模100+1为了产生1-100的数
9.  do {
10.     printf("请输入你猜的数字:>");
11.     scanf("%d", &put);
12.     if (put > b)
13.     {
14.       printf("猜大了\n");
15.     }
16.     if (put < b)
17.     {
18.       printf("猜小了\n");
19.     }
20.     if (put == b)
21.     {
22.       printf("恭喜你,猜对了!!!\n");
23.        c = 0;//为了结束循环
24.     }
25.   }
26.   while (c);
27.   getchar();//为了吃掉所输入最后一个数字后面回车;
28.   getchar();//吃掉一个回车,防止清屏操作太快;
29. }


四、main()函数


该游戏所需要的函数都已实现,则接下来则需要把我们所需要的函数组合起来;

实现代码如下:


1. int main()
2. {
3.  int a = 0;
4.  srand((unsigned int)time(NULL));//unsigned int为srand()函数原型,这儿为强制类型转换;
5.  //time为一个时间戳,目的是为使srand()返回rand()内为一个随机值
6.  //srand()只需要使用一次就好,如果放入循环中,则每循环一次都会调用一次,循环过快的话,会产生相同的返回值;
7.  do {
8.    mean();
9.    scanf("%d", &a);
10.     switch (a)
11.     {
12.     case 1:
13.       game();
14.       break;
15.     case 0:
16.       break;
17.     default: printf("输入错误,请重新输入\n");
18.     }
19.   } while (a);//若a=0,则结束循环,退出游戏;
20.   return 0;
21. 
22. }

至此为止,猜数字游戏已经简单实现了。后附完整代码


1. #define _CRT_SECURE_NO_WARNINGS 1
2. #include<stdio.h>
3. #include<stdlib.h>
4. #include<time.h>
5. 
6. 
7. void mean()//创建函数,输出游戏菜单
8. {
9.  system("cls");
10.   printf("***********猜数字游戏**********\n");
11.   printf("*******************************\n");
12.   printf("******1.玩游戏 0.退出游戏******\n");
13.   printf("*******************************\n");
14.   printf("注意:所猜数字应位于1-100!!!\n");
15. }
16. 
17. void game()
18. {
19.   int c = 1;
20.   int put = 0;
21.   RAND_MAX;//搭配rand()使用,可产生0-32767的随机数;
22.   //由于rand()每次产生的随机数是固定的所以还需要搭配srand()使用,
23.   rand();
24.   int b = rand() % 100 + 1;//模100+1为了产生1-100的数
25.   do {
26.     printf("请输入你猜的数字:>");
27.     scanf("%d", &put);
28.     if (put > b)
29.     {
30.       printf("猜大了\n");
31.     }
32.     if (put < b)
33.     {
34.       printf("猜小了\n");
35.     }
36.     if (put == b)
37.     {
38.       printf("恭喜你,猜对了!!!\n");
39.        c = 0;//为了结束循环
40.     }
41.   }
42.   while (c);
43.   getchar();//为了吃掉所输入最后一个数字后面回车;
44.   getchar();//吃掉一个回车,防止清屏操作太快;
45. }
46. 
47. int main()
48. {
49.   int a = 0;
50.   srand((unsigned int)time(NULL));//unsigned int为srand()函数原型,这儿为强制类型转换;
51.   //time为一个时间戳,目的是为使srand()返回rand()内为一个随机值
52.   //srand()只需要使用一次就好,如果放入循环中,则每循环一次都会调用一次,循环过快的话,会产生相同的返回值;
53.   do {
54.     mean();
55.     scanf("%d", &a);
56.     switch (a)
57.     {
58.     case 1:
59.       game();
60.       break;
61.     case 0:
62.       break;
63.     default: printf("输入错误,请重新输入\n");
64.     }
65.   } while (a);//若a=0,则结束循环,退出游戏;
66.   return 0;
67. 
68. }


相关文章
|
6月前
|
C语言
猜数字游戏(详解+代码)
猜数字游戏(详解+代码)
236 1
扫雷的简单实现
扫雷的简单实现
51 0
|
编译器 C语言
三子棋游戏的简单实现(C语言后附完整代码)(上)
三子棋游戏的简单实现(C语言后附完整代码)(上)
|
Python
Python实现猜数字游戏
Python实现猜数字游戏
135 0
|
Serverless C语言
用代码实现一个简单计算器
用代码实现一个简单计算器
132 0
|
6月前
|
前端开发 JavaScript
html+css+js开发一个猜数字游戏
【1月更文挑战第5天】html+css+js开发一个猜数字游戏
116 1
|
6月前
如何实现九九乘法表:
如何实现九九乘法表:
|
C语言
井字棋的简单实现
井字棋的简单实现
55 0
|
C语言
三子棋游戏的简单实现(C语言后附完整代码)(下)
三子棋游戏的简单实现(C语言后附完整代码)(下)
|
C语言
快来看看扫雷的简单实现(C语言,后附完整代码)(上)
快来看看扫雷的简单实现(C语言,后附完整代码)(上)