猜数字(升级版)

  1. 允许玩家选择游戏的难度,比如简单、中等和困难,其中难度会影响目标数字的范围,玩家可以自定义随机数字区间范围。
  2. 如果玩家连续多次猜错,可以提供一个提示(例如“太大了”或“太小了”之后,再给一个更接近或更远离的提示)。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  int is_playing = 1;         // 游戏是否继续的标志
  int target_number;          // 计算机生成的目标数字
  int guess;                  // 玩家的猜测
  int attempts = 0;           // 玩家猜测的次数
  int min_number, max_number; // 猜测数字的范围
  char difficulty;            // 游戏难度
  double elapsed_time;        // 总用时
  int hints_given = 0;        // 提示次数

  // 游戏头部
  printf("==========================\n");
  printf("=   猜数字游戏v3.0版本     =\n");
  printf("==========================\n");

  // 选择难度或自定义范围
  printf("请选择游戏难度或输入'C'自定义范围:[E]简单 (1-20) [M]中等 (1-50) [H]困难 (1-100) [C]自定义:");
  scanf(" %c", &difficulty); // 注意%c前的空格,用于消耗可能存在的换行符

  if (difficulty == 'C' || difficulty == 'c')
  {
    printf("请输入最小数字:");
    scanf("%d", &min_number);
    printf("请输入最大数字:");
    scanf("%d", &max_number);
    if (min_number > max_number)
    {
      int temp = min_number;
      min_number = max_number;
      max_number = temp;
    }
  }
  else
  {
    switch (difficulty)
    {
    case 'E':
    case 'e':
      min_number = 1;
      max_number = 20;
      break;
    case 'M':
    case 'm':
      min_number = 1;
      max_number = 50;
      break;
    case 'H':
    case 'h':
      min_number = 1;
      max_number = 100;
      break;
    default:
      printf("无效的难度选择。默认为困难模式 (1-100)。\n");
      min_number = 1;
      max_number = 100;
    }
  }

  while (is_playing)
  {
    // 生成目标数字
    srand((unsigned)time(NULL));                                         // 设置随机数种子(注意:这里应该放在循环外,但为保持原样暂不改动)
    target_number = rand() % (max_number - min_number + 1) + min_number; // 生成指定范围内的随机数

    do
    {
      // 提示玩家输入猜测的数字
      printf("请输入一个%d到%d之间的数字:", min_number, max_number);
      scanf("%d", &guess);

      attempts++; // 增加猜测次数

      // 检查猜测是否正确
      if (guess > target_number)
      {
        printf("太大了!再试一次。\n");
        if (hints_given < 3 && (guess - target_number) > (max_number - min_number) / 4)
        {
          printf("提示:您的猜测远超过了目标数字。\n");
          hints_given++;
        }
      }
      else if (guess < target_number)
      {
        printf("太小了!再试一次。\n");
        if (hints_given < 3 && (target_number - guess) > (max_number - min_number) / 4)
        {
          printf("提示:您的猜测远低于目标数字。\n");
          hints_given++;
        }
      }
      else
      {
        // 猜测正确
        // 记录结束时间并计算用时

        printf("恭喜您!您猜中了数字%d,并且只用了%d次机会。\n", target_number, attempts);

        // 询问玩家是否继续游戏
        char continue_game;
        printf("您想再玩一次吗?[Y/N]:");
        scanf(" %c", &continue_game); // 注意%c前的空格,用于消耗可能存在的换行符

        if (continue_game == 'Y' || continue_game == 'y')
        {
          // 重置猜测次数、提示次数和计时器(通过重新进入while循环实现)
          attempts = 0;
          hints_given = 0;
        }
        else
        {
          // 退出游戏
          is_playing = 0;
          printf("游戏结束。谢谢参与!\n");
        }
        break; // 退出do-while循环,因为游戏可能已经结束
      }
    } while (1); // 这里的do-while循环实际上只执行一次,因为break语句在内部控制退出
  }

  return 0;
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值