一、先完成游戏主体部分
#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; }
运行结果: