“猜数字小游戏”游戏规则:由两个人玩(人机),一方出数字,一方猜。计算机随机确定一个数,用户来猜,每猜一次计算机提示猜的数字偏大还是偏小,直到猜对数字结束。
代码1:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int count = 0; int flag = 0; //为0表示猜错 int mynum = 0; int yournum = 0; srand((unsigned)time(NULL));//利用时间设置随机种子,Time(0)是得到当前时间值 mynum = rand() % 100 + 1;//rand函数返回随机数(在1~100之间的) while (count<7) //最多猜7次 { printf("请输入猜的数字>:\n"); scanf("%d", &yournum); count++; if (yournum == mynum)//答对 { printf("YES!"); flag = 1; break; } else//答错 { if (yournum > mynum) printf("TOO BIG!\n"); else printf("TOO SMILE!\n"); } } if (flag == 0) printf("\nGAMEOVER!!"); return 0; }
代码1详解:定义count变量来记录猜的次数,在while的判断表达式中判断count的值(此代码设置最多猜7次,count<7时执行循环体),当7次都未猜中时GAME OVER!
※产生随机数的过程:void srand(unsigned seed)函数是随机数发生器的初始化函数,需要的头文件<stdlib.h>。srand和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,那么每次调用rand函数生成的伪随机数序列都是一样的。这时,就需要用到srand(unsigned seed)通过参数seed改变系统提供的种子值,从而使rand函数生成不同的伪随机数序列,实现真正意义上的随机。一般通过系统时间来改变系统的种子值,即srand( time(NULL) ),为rand函数提供不同的种子值。time函数(需要的头文件<time.h>)来获取当前的系统时间(机器日历时间),其值表示从CUT时间1970年1月1日00:00:00到当前时刻的秒数,然后将此time_t型数据转化为unsigned型再传给srand函数,即srand( (unsigned) time(NULL) ),直接传入一个空指针(因为这里不需要经过参数获得的数据)。如果随机数的范围很大,那么猜对的难度会很大,而若我们设定一个较小的范围,难度就大大降低。rand()%100,随机数对100取余,限制产生随机数的范围为0~99,那么rand()%100+1表示随机数的范围为0~100。
计算机产生随机数后,在while循环体中,每次①用户输入猜的数字②判断猜对猜错③若猜对则打印“YES!”跳出循环;若猜错提示猜大了还是猜小了,继续循环体。直到猜对或次数用完,游戏结束。
代码2:
#include <stdio.h> #include <stdlib.h> #include <time.h> void menu() { printf("**********************************\n"); printf("*********** 1、play ***************\n"); printf("*********** 0、exit ***************\n"); printf("**********************************\n"); } void game() { int random_num = rand() % 100 + 1; int input = 0; while (1) { printf("请输入猜的数字>:"); scanf("%d",&input); if (input > random_num){ printf("猜大了!\n"); } else if (input < random_num){ printf("猜小了!\n"); } else{ printf("恭喜你!猜对了!\n"); break; } } } int main() { int input = 0; srand((unsigned)time(NULL)); do{ menu(); printf("请选择>:"); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: break; default: printf("选择错误,请重新输入!\n"); break; } } while (input); return 0; }
过程:①产生一个随机数(产生过程同上)②用户输入猜的数字 ③判断猜对猜错,若猜对则打印“恭喜你猜对了!”跳出循环;若猜错提示猜大了还是猜小了,继续循环体。直到猜对游戏结束(没有设计猜的次数),再进入下一次游戏。此段代码还加入了一个简易菜单,可以选择(1、play 0、exit)。在主函数中用switch(input)和while(input)来实现,选择1则开始游戏;选择0时,此时while(0),所以跳出循环,不进入游戏;输入非0非1时提示“选择错误,请重新输入”,进入下一循环。
游戏效果图如下↓