猜数字游戏实现
电脑随机生成一个1-100之间的数,输入你所猜测的数字,如果猜小了,则告诉你猜小了;如果猜大了,则告诉你猜大了;如果猜对了,则恭喜你猜对了。
首先游戏应该有一个游戏菜单,最简单的功能应该包括开始和结束游戏。
void menu()
{
printf("*********************\n");
printf("***** 1.play *****\n");
printf("***** 0.exit *****\n");
printf("*********************\n");
}
然后在主函数中,我们可以用一个do while函数实现游戏循环玩下去,通过switch case语句的配合进行模式的选择,输入1时开始游戏,输入0时退出游戏。
int n = 0;
do
{
menu();
printf("请选择\n");
scanf("%d",&n);
switch (n)
{
case 1:
printf("操作成功,开始游戏!\n");
break;
case 0:
printf("操作成功,退出游戏!\n");
break;
default:
printf("选择错误,重新输入!\n");
break;
}
} while (n);
接着就是随机数的生成,在C语言中有一个rand()函数可以生成一个随机数。
void game()
{
//生成随机数
int ret = rand();
}
但是rand函数生成的是伪随机数。rand函数其原理是在使用前调用srand函数设置随机数生成器,srand()函数输入一个种子则会输出一个随机数,但是如果种子相同则输出的随机数也相同。
例如
srand(1);
int ret=rand();
printf("%d",ret);
输出结果为ret=41恒不变那么就遇到一个问题,想要输出一个随机数则需要一个随机数,陷入到一个无解的循环中。
其实不然,我们只需要输入一个不断变化的数就可以生成不断变化的随机数了。通过time函数可以生成一个时间戳,时间戳代表的含义是当前机器的时间与计算机起始时间的差值。
并且我们只需要设置一次srand函数后,每次rand函数调用srand函数都会生成一个真随机数。
srand((unsigned int)time(NULL));
由于只需要设置一次,所以只要在使用rand函数前使用一次就可以了,不用放入到循环中。因此我们可以选择将其放入主函数中。
int main()
{
int n = 0;
srand((unsigned int)time(NULL));
return 0;
}
rand函数生成随机数的范围是0-RAND_MAX(32767),题目要求我们生成1-100的随机数,那么我们只需要对rand生成的随机数%100,就可以得到0-99,那么
int ret = rand()%100+1;
就可以得到1-100的随机数了。
接下来就是随机数的判断了,我们也可以把判断这一部分写到game函数里面,简化主函数。
int guess,i=0;
while (i<10)
{
printf("请输入猜测的数字\n");
scanf("%d", &guess);
if (guess > ret)
{
system("cls");
printf("%d", guess);
printf("猜大了\n");
printf("剩余机会%d\n", 9 - i);
i++;
}
else if (guess < ret)
{
system("cls");
printf("%d", guess);
printf("猜小了\n");
printf("剩余机会%d\n", 9 - i);
i++;
}
else
{
system("cls");
printf("%d", guess);
printf("恭喜你猜对了!\n");
printf("所用次数%d\n", i);
break;
}
}
if (i == 10)
{
system("cls");
printf("正确数字是%d\n", ret);
printf("次数用光了,请下次努力!\n");
}
在这里我给了玩家10次猜测的机会,如果都没有猜对的话就会结束游戏,开始下一局。
可以通过switch case进行难度设计,比如练习模式不设置次数上限,简单模式给二十次机会等等,都可以根据自身的想法去开发。
system("cls");是清屏函数,可以让屏幕看着更整洁。
代码如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game ();
void menu ();
int main()
{
int n = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择\n");
scanf("%d",&n);
switch (n)
{
case 1:
printf("操作成功,开始游戏!\n");
game();
break;
case 0:
printf("操作成功,退出游戏!\n");
break;
default:
printf("选择错误,重新输入!\n");
break;
}
} while (n);
return 0;
}
运行结果如下