一、先完成游戏主体部分
#include<stdio.h>
int main()
{
//游戏菜单
menu();
//选择1 开始游戏 选择0 退出
//可重复
int input = 0;
do
{
scanf("%d", &input);
switch (input)
{
case 1:
//实现游戏的细节
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
二、游戏细节
1)菜单部分
void menu()
{
printf("*******************\n");
printf("**1.play 0.exit**\n");
printf("*******************\n");
}
//无需返回值,menu函数的返回值类型为 void
其效果为:
menu部分要与函数主体相对应:
do
{
scanf("%d",&input);
//...
}while(intput);
先完成 do{ } 部分内容,再判断 input 是否符合 while 的循环条件。符合,则继续运行;否则,结束循环。
2)游戏细节的实现
既然是猜数字游戏,那必然需要程序自动生成随机数;
这里要介绍三个函数: rand() , srand() , time()
1. rand函数能在 0 和 RAND_MAX 之间生成一个随机数。
2. 使用rand函数之前要使用srand函数
3. 使用rand函数前,需要引头文件 "stdlib.h"
1. 使用srand函数可以预期在随后的调用中生成不同的随机值
2. 需要引用头文件 "stdlib.h"
3. 为了生成类似随机数的数字,通常初始化为一些独特的运行时值,例如函数返回的值
(这里用time函数为srand进行初始化)
在这里介绍一个时间戳的概念 :
也就是,计算现在时刻与1970年1月1日之间的时间差(以 s 为单位);
这样在不同时刻调用 time函数 就能得到一个不同的值,可以帮助 srand函数 完成初始化
#include<stdlib.h>
#include<time.h>
void game()
{
//生成随机数
srand(time(NULL));
int ret = rand() % 10 + 1;
//...
}
//则 ret 为一个 1~10 的随机值
继续完善 猜数字过程 的细节:
#include<stdlib.h>
#include<time.h>
void game()
{
//生成随机数
srand(time(NULL));
int ret = rand() % 10 + 1;
int s = 0;
while (1)
{
printf("请猜数字:> ");
scanf("%d", &s);
if (s > ret)
printf("猜大了,");
else if(s<ret)
printf("猜小了,");
else
{
printf("猜对了!\n");
break;
}
}
}
三、 游戏整体
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*******************\n");
printf("**1.play 0.exit**\n");
printf("*******************\n");
}
void game()
{
srand(time(NULL));
int ret = rand() % 10 + 1;
int s = 0;
while (1)
{
printf("请猜数字:> ");
scanf("%d", &s);
if (s > ret)
printf("猜大了,");
else if(s<ret)
printf("猜小了,");
else
{
printf("猜对了!\n");
break;
}
}
}
int main()
{
menu();
int input = 0;
do
{
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
运行结果: