经过一段时间的C语言,现在可以试着写一个简单的小游戏,猜数字游戏
游戏介绍:
1.生成一个1~100随机数,玩家进行猜测,如果猜错了就提示猜大了或猜小了,玩家再次猜测,直到玩家猜对,输出恭喜你猜对了
2.可以重复进行游戏,玩完一次还可以继续玩
1.怎么生成随机数
C语言中提供了 srand() 和 rand() 和两个库函数,要包含头文件<stdlib.h>。
rand()函数可以生成0~32767之间的一个随机数字,如果只是用这个函数,它其实生成的数是伪随机的,不是真正的随机。
如果要做到真正的的随机,那么要配合srand()函数一起使用。srand()的括号内要输入一个值,每个值会生成一系列相同的随机数。所以每次运行程序括号内的值都要不同,这时可以利用计算机上的时间,因为他是不断在变化的。这时要用到time()函数,头文件<time.h>,可以返回一个时间戳,是time_t类型,实质是long long 类型。时间戳是现在的计算机的时间减去1970年1月1日0时0分0秒得到的秒数。这个是不断变化的。
要这样写:srand((unsigned int)time(NULL));
time后NULL的作用是time函数要传入一个指针,可以是空指针NULL。
unsigned int 的作用是强制类型转换。因为srand()函数要传入一个无符号整形unsigned int 的数,所以把time()函数返回的long long 类型强制转换为unsigned int 类型。
srand()函数整个程序调用一次就可以。
2.代码
#include <stdio.h> #include <stdlib.h>//rand srand函数 #include<time.h>//time函数 #include<Windows.h>//system函数 void menu()//打印菜单 { printf("**************************\n"); printf("***** 猜数字游戏 ******\n"); printf("***** 1.play ******\n"); printf("***** 0.exit ******\n"); printf("**************************\n"); } void game()//游戏内容 { int guess = 0; //rand()函数可以生成一个随机数,随机数的范围是0~32767 int goal = rand() % 100 + 1;//生成1到100的随机数 while(1) { printf("请输入你要猜的数字:>"); scanf("%d", &guess); if (goal == guess) { printf("恭喜你猜对了\n"); break;//跳出 } else if (goal < guess) printf("猜大了\n"); else printf("猜小了\n"); } } int main() { int input = 0; //srand初始化随机数生成器,需要传入一个变化的值,类型为unsigned int //计算机上的时间是时刻发生变化的 //现在时间减去1970年1月1日 //time函数可以返回一个时间戳,是time_t类型,也就是long long int //整个程序调用一次就行 srand((unsigned int)time(NULL)); do//利用do while循环实现可以多次游戏 { menu();//调用打印菜单函数 printf("请输入:>"); scanf("%d", &input); switch (input) { case 1: printf("游戏开始\n"); game(); system("pause");//暂停一下按任意键继续 system("cls");//清理屏幕 break; case 0: printf("退出游戏\n"); break; default: printf("选择错误\n"); system("pause"); system("cls"); break; } } while (input);//input为0时循环结束 return 0; }
运行截图: