猜数字游戏的实现要求: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. }