实现目标:
首先要出现一个选择页面,输入1.play或者0.exit选择进入游戏或者退出游戏,如果选择1.play的话进入游戏,跳入游戏阶段,开始输入你要猜的数字,如果猜的数字大了,则显示“猜大了”,相反则显示“猜小了”,然后开始输入下一个要猜的数字。接下来设置一个循环,表示你一共有几次选择的机会,机会用完,挑战失败,然后开始下一轮的游戏。
实现条件:
1. 电脑⾃动⽣成1~100的随机数。
2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束。
要实现代码,我们要首先引入随机数的概念。
C语⾔提供了⼀个函数叫 rand,需要包含⼀个头⽂件是:#include<stdlib.h>。这函数是可以⽣成随机数的rand函数的使⽤,rand函数会返回⼀个伪随机数,这个随机数的范围是在0~32767之间的。我们来用代码演示一遍。随机生成几个随机数:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
但是,当我们多次尝试过后会发现每一次生成的“随机数”都是相同的,这是因为rand函数返回的是一个伪随机数。那么就不能保证我们每一次生成的随机数是一个不同的数字。这时,我们就需要再次引入一个srand函数。
srand函数⽤来初始化随机数的⽣成器的,程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数来设置rand函数⽣成随机数的时候的“种子”,只要“种子”变化,每次⽣成的随机数序列也就变化起来了。
相信玩过《我的世界》的朋友对“种子”这个概念并不陌生,只要种子不一样,生成的地图也就不一样。
那么,我们只要找到一个不断变化的数字,就可以生成不同的“种子”。这时,我们需要引入一个time函数的概念:
在C语⾔中有⼀个函数叫 time ,需要包含的一个头文件是:#include<time.h>,time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。这段时间差通常也被叫做:时间戳,时间戳用time(NULL)来表示。
让我们结合time,strand,rand来生成几个个随机数,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));
//seand中包含的是种子,种子不同生成的随机数不同
//srand中所包含的类型是unsigned int,(unsigned int)表示强制类型转换
//time(NULL)表示时间戳
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
实现思路:
menu函数:出现在游戏的初始页面为玩家提供选项。
game函数:游戏阶段,开始猜数字游戏。
main函数:游戏的通道,控制游戏的进入和退出。
整体代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
void menu();
void game();
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)//游戏通道
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");//输出0为假,直接跳出循环,相当于退出游戏
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}
void menu()
{
printf("*********************\n");
printf("*** 1.play ***\n");
printf("*** 0.exit ***\n");
printf("*********************\n");
}
void game()
{
srand((unsigned int)time(NULL));
int guess = 0;
int ret = rand() % 100 + 1;//为随机数指定1-100的范围
int count = 5;
while (count)//设置挑战次数,当count为0时,直接跳出循环,挑战失败
{
printf("请输入要猜的数字:>");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了,数字是%d\n", ret);
break;
}
count--;
}
if (count == 0)
{
printf("很遗憾,五次机会使用完,挑战失败\n");
}
}