写一个猜数字小游戏:
游戏要求:
1.电脑生成1~100的随机数
2.玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,知道猜对,游戏结束。
1.随机数生成:
要想完成猜数字游戏,首先得生成随机数,怎么生成随机数呢?
1.1 rand
c语言提供了一个函数rand,是可以生成随机数的。
int rand(void);
rand函数会返回一个随机值。随机值的范围是在RAND_MAX之间。(RAND_MAX大小大部分在32767之间)
rand函数的使用需要包含一个头文件<stdlib.h>
先运行一次,看看结果。
我们发现两次数值一样,说明rand函数生成的是伪随机的数。
伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数是无法预测下一个数是多少的
rand函数是对一个叫“种子”的基准值进行运算生成的随机数。之所以一样是因为rand函数生成随机数的默认种子是1.如果要生成不同的随机数,就要让种子是变化的。
1.2 srand(程序中只调用一次)
c语言又提供了一个函数叫srand。来初始化随机数生成器。srand的原型为:
void srand=(unsigned int seed);
程序中在调用rand函数之前要先调用srand函数,通过srand的参数seed来设置rand函数生成随机数的种子
1.3 time
在程序中一般以程序运行的时间作为种子。因为时间在时刻变化。
time_t time(time_t* timer)
time_t==int /long long
time函数的使用需要包含一个头文件**<time.h>**
//让time函数返回时间戳
time(NULL);
真正生成随机数:
srand((unsigned int )time(NULL));
1.4设置随机数的范围
如果要生成0-99的随机数 方法如下
printf("%d\n", rand()%100);
如果要生成1-100之间的随机数 方法如下
printf("%d\n", rand()%100+1);
如果要生成100-200之间的随机数 方法如下
printf("%d\n", 100+rand()%(200-100+1);
如果要生成a-b之间的随机数,方法如下
a+rand()%(b-a+1)
2.实现一个猜数字游戏
用do while循环实现猜数字
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu(){
printf("***********************\n");
printf("******* 1.play ********\n");
printf("******* 2.exit ********\n");
printf("***********************\n");
}
void game() {
//1.生成随机数
int guess = 0;
int r = rand() % 100 + 1;
//2.猜数字
while (1) { //死循环
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > r) {
printf("猜大了\n");
}
else if (guess < r)
printf("猜小了\n");
else
printf("恭喜你 猜中了!\n");
break;
}
}
int main() {
srand((unsigned int)time(NULL));
int input = 0;
do {
//打印菜单
menu();
printf("请选择>:\n");
scanf("%d", &input);
switch (input)
{case 1:
game();
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
猜数字代码优化(完整版代码)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void menu(){
printf("***********************\n");
printf("******* 1.play ********\n");
printf("******* 2.exit ********\n");
printf("***********************\n");
}
void game() {
//1.生成随机数
int guess = 0;
int r = rand() % 100 + 1;
//2.猜数字
int count = 5;
while (count)
{ //死循环
printf("你还有%d次机会\n", count);
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > r) {
printf("猜大了\n");
}
else if (guess < r) {
printf("猜小了\n");
}
else {
printf("恭喜你 猜中了!\n");
break;
}
count--;
}
if (count == 0) {
printf("你失败了 正确的值是%d\n",r);
}
}
int main() {
srand((unsigned int)time(NULL));
int input = 0;
do {
//打印菜单
menu();
printf("请选择>:\n");
scanf("%d", &input);
switch (input)
{case 1:
game();
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}