作为一名C语言的初学者,目前也没有能力开发出逻辑或功能较为复杂的游戏,在生活中的一次聚会玩到了一个名为“数字炸弹”的游戏,因为其逻辑简单,没有比较难以实现的部分,所以就尝试将其通过C语言实现。
先简单的介绍一下规则,首先需要一个随机数,假设这个数是69,接着一个玩家在1-100(也可以是其他范围)中报其中一个数字,假设报的数是50,那么就将1-100分为两个区间1-50与50-100.
因为69(即随机数)落在50-100这个区间的范围内,因此此时会有提示——炸弹落在50-100的范围内,接着继续报数,假设报的数是75,那么继续分为50-75,75-100两个区间,容易知道此时会提示炸弹落在50-75区间内。如此反复进行,直到在游戏过程中有人报数时报到了那个炸弹数(在此例子中即69),那么游戏就结束。
那么倘若需要将此游戏通过C语言的方式实现,那么需要处理以下几个关键点
1.生成随机数。仅需通过rand函数即可(调用rand函数前需要先调用srand函数)生成,通过在srand函数内调用time函数去不断变换srand函数内参数的值,使得rand不断生成随机数。
2.处理好区间变换的过程。我在这利用了数组,通过不断的移动下标的方式,来模拟区间的不断变换。
3.处理好不正确输入的解决方式。不正确输入的情况有输入数超出一开始所定义的区间范围(即若区间初始时定义在1-100,输入为101,即视为错误输入)、输入不在系统所提示的炸弹所在范围(即若游戏过程中系统提示炸弹在50-70中,玩家输入为49或71时,视为错误输入)。其实第一种情况是被第二种情况所包含的,因此我们只需处理第二种情况就好了。解决这个问题并不难,只需要通过判断语句,若为错误输入,则提示玩家错误输入,然后再次指令跳到输入语句即可。
以下为源代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game(int arr[])
{
int ret = rand()%100+1;//用来生成1-100的随机数,当然也可以生成任意一个区间的随机数
int x;//储存报数
int left = 0;//数组左下标,即为区间左边的数
int right = 99;//数组右下标,即为区间右边的数
while (1)
{
printf("请输入你猜的数字:");
scanf("%d", &x);
if (x > arr[right] || x < arr[left])
{
printf("输入数不在炸弹所在区间内,请重新输入\n");
continue;
} // 处理错误输入的情况
if (x < ret)
{
left = x - 1;//移动下标达到区间变动的效果
printf("炸弹在%d到%d之间\n", arr[left], arr[right]);
}
if (x > ret)
{
right = x - 1;//同上
printf("炸弹在%d到%d之间\n", arr[left], arr[right]);
}
if (x == ret)
{
printf("触发炸弹!!!");
break;
}
}
}
void menu()
{
printf(" 欢迎来到数字炸弹游戏\n");
printf("开始游戏请选择1,退出游戏请选择0\n");
}
int main()
{
srand((unsigned int)time(NULL));
int arr[100];
int i;
int n = 0;
menu();
while (1)
{
scanf("%d", &n);
if (n == 1)
{
for (i = 0; i < 100; i++)
{
arr[i] = i + 1;
}
game(arr);
break;
}
else if (n == 0)
{
break;
}
else
{
printf("选择错误,请重新选择\n");
}
}
return 0;
}