一个简单的小游戏——“数字炸弹”的实现

作为一名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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值