用C语言来写一些小游戏,比如猜字谜游戏。我们要模块化来写这个游戏,而不是把全部的功能堆在主函数(main)上,使代码看起来杂乱。我们由电脑产生随机数但不打印来猜数字。
首先,我们需要打印一个游戏菜单以及选择操作,如选择1则继续,选择0则退出,若选择了其他的数字,提示错误。这个时候要用到do...while语句。它的特点是先实行一次语句,再判断。当输入的值为0(也就是假)的时候,退出循环。然后,我们用switch语句来调用相应的函数。我们定义menu函数用来打印菜单,如下。
void menu()
{
printf("********************n");
printf("***** 1. play ******n");
printf("***** 0. exit ******n");
printf("********************n");
}
switch部分的代码如下:
//do...while循环内的语句
menu();
printf("请选择:>");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出n");
break;
default:
printf("error!n");
break;
}
接下来就是游戏的主体部分:随机数的生成。随机数的产生需要用到rand函数。rand函数的用法简单介绍如下:
头文件为: #include
函数原型为: int rand(void);表示产生0~RAND_MAX之间的随机整数(RAND_MAX = 32767)
如 int r = rand() % 100 + 1;他表示随机产生1~100之间的随机数。若要产生其他范围的随机数,则需要“模除+加法”的方法 。公式如下:
产生[m,n]范围内的随机数num:int num=rand()%(n-m+1)+m;
要注意的是rand产生的并不是随机的值,而是伪随机值。当你重复运行程序的时候,你可能会看见rand函数产生的值是一样的。因此在调用rand()函数之前,可以使用srand()函数设置随机数种子。srand函数的用法简单介绍如下:
头文件为:
函数原型:void srand (usigned int seed);用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。
感兴趣的可以改变()中的值来查看rand函数产生随机值的变化。
time()为时间戳,头文件为:#include
srand((unsigned int)time(NULL)); int r = rand() % 100 + 1;
不过要注意的是将srand函数放在主函数之中。没必要每一次都重新随机生成。
完整代码如下。
//Guessing #include#include #include void game() { //过程 //生成随机数 int guess = 0; int r = rand() % 100 + 1; //printf(" %dn", r); //猜数字 while(1) { printf("猜数字:>"); scanf("%d", &guess); if(guess < r) { printf("小了!n"); } else if(guess > r) { printf("大了!n"); } else { printf("你猜对了!n"); break; } } } void menu() { printf("********************n"); printf("***** 1. play ******n"); printf("***** 0. exit ******n"); printf("********************n"); } int main(void) { int input = 0; srand((unsigned int)time(NULL));//设置游戏的生成器 do { //menu menu(); printf("请选择:>"); scanf("%d", &input); switch(input) { case 1: game(); break; case 0: printf("退出n"); break; default: printf("error!n"); break; } }while(input); return 0; }
结果如下图



