游戏结构的搭建
为什么用do while来搭建游戏呢
我们都玩过各种电竞游戏吧,如王者荣耀,英雄联盟,金铲铲等游戏吧。我们要玩游戏是不是得先进入游戏页面,才看自己是玩游戏还是退出游戏,如果玩玩一把不过瘾,想再玩一把,就属于一个循环过程。总的来说,这是一个先执行后循环的过程,所以我们选择do while来搭建游戏框架。
do while中switch的作用
玩游戏肯定要点开始游戏,或者玩累了要退出游戏,亦或者既没有选择玩游戏和退出游戏,选择了别的,所以我们这使用switch。
为什么退出游戏使用的是case 0,而不使用case 2呢?
首先,case后面的break只能跳出switch语句,而不能跳出do while语句,这里我们先跳出switch语句,如果想跳出do while语句,就得让do while(条件)中的条件为假,就能停止循环,所以我们退出游戏使用case 0。
菜单函数
游戏函数的实现
游戏中实现模式选项
我们依然使用switch语句来实现模式的选择
模式选项菜单函数
while(条件)中的条件
因为我们的switch中case后面的常量表达式是1,2,3。
所以default代表处1,2,3之外的其他数,当我们选错是,就能重新选择。
怎么实现随机数的生成
rand函数
生成随机数,我们使用了rand函数,但是rand的随机数是伪随机数,它是根据种子来生成的,而种子是固定的,所以每次生成的随机数都相同。
srand函数
因为rand的种子一样,所以我们使用srand函数来随机生成一个种子,又因为srand需要一个无符号整形的种子参数,所以我们用(unsigned)time(NULL)。
time函数
我们只需要给time函数传空指针NULL,他会给我们返回当前时间的时间戳。这样的话就可以实现时间种子生成随机数。
头文件
使用rand函数和srand函数以及time函数我们都需要引头文件
rand函数与srand函数的头文件是#include<stdlib.h>
time函数的头文件是#include<time.h>
游戏判断大小以及剩余机会
while (count) {
printf("请输入你要猜的数字>>");
scanf("%d", &answer);
if (answer > 100 || answer < 1)
{
printf("请在1到100之间猜\n");
count--;
printf("你还剩%d次机会\n", count);
}
if (answer > ret)
{
printf(" 猜大了\n");
count--;
if (count == 0)
{
printf("正确答案是>>%d\n", ret);
break;
}
printf("你还剩%d次机会\n", count);
}
if (answer < ret)
{
printf(" 猜小了\n");
count--;
if (count == 0)
{
printf("正确答案是>>%d\n", ret);
break;
}
printf("你还剩%d次机会\n", count);
}
if (answer == ret)
{
printf(" 恭喜你,猜对了\n");
break;
}
}
while(count)中的count来接收上面选择的的游戏模式
三个if分别判断你猜的数字是否在范围内,以及猜大了,猜小了还是猜对了。
每次count--,代表剩余的次数。
游戏代码分享
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void menu()
{
printf("***************************\n");
printf("*******1.玩游戏************\n");
printf("*******0.退出游戏**********\n");
printf("***************************\n");
}
void difficulty()
{
printf("***************************\n");
printf("*******1.简单**************\n");
printf("*******2.困难**************\n");
printf("*******3.炼狱**************\n");
printf("***************************\n");
}
void game()
{
int ret = rand() % 100 + 1;
int answer = 0;
int option = 0;
int count = 0;
do {
difficulty();
printf("请选择难度>>");
scanf("%d", &option);
switch (option)
{
case 1:
count = 15;
break;
case 2:
count = 10;
break;
case 3:
count = 5;
break;
default:
printf("选择错误,请重新选择难度\n");
break;
}
} while (option != 1 && option != 2 && option != 3);
while (count) {
printf("请输入你要猜的数字>>");
scanf("%d", &answer);
if (answer > 100 || answer < 1)
{
printf("请在1到100之间猜\n");
count--;
printf("你还剩%d次机会\n", count);
}
if (answer > ret)
{
printf(" 猜大了\n");
count--;
if (count == 0)
{
printf("正确答案是>>%d\n", ret);
break;
}
printf("你还剩%d次机会\n", count);
}
if (answer < ret)
{
printf(" 猜小了\n");
count--;
if (count == 0)
{
printf("正确答案是>>%d\n", ret);
break;
}
printf("你还剩%d次机会\n", count);
}
if (answer == ret)
{
printf(" 恭喜你,猜对了\n");
break;
}
}
}
int main()
{
srand((unsigned)time(NULL));
int input = 0;
do {
menu();//菜单函数
printf("请选择>>");
scanf("%d", &input);
switch (input)
{
case 1:
game();//游戏执行函数
break;
case 0:
printf("欢迎下次来玩\n");
break;
default:
printf("选择错误,请重新选择>>");
break;
}
} while (input);
return 0;
}