C语言——猜数字游戏
“猜数字小游戏”游戏规则:由两个人玩(人机),一方出数字,一方猜。计算机随机确定一个数,用户来猜,每猜一次计算机提示猜的数字偏大还是偏小,直到猜对数字结束。
代码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时提示“选择错误,请重新输入”,进入下一循环。
游戏效果图如下↓
上一篇: 基于JAVA每月运势api调用代码实例
下一篇: JavaEE账号注册模拟网站邮箱激活