You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#游戏开发:如何在循环中按数组分块获取对应房间数据?

C#控制台文字游戏房间索引修正方案

问题背景

我正在用C#开发一款简单的控制台文字游戏:

  • 游戏内有一个长度为15的int类型数组rooms,随机填充0-2的整数(0代表敌人房间,1代表疗伤房间,2代表金币房间)
  • 房间分为5个块,每块包含3个房间
  • 数组初始化代码:
int[] rooms = new int[15]; 
Random rand = new Random();

for (int i = 0; i < rooms.Length; i++)
{
    rooms[i] = rand.Next(3);  
}

玩家需要选择当前块的1、2或3号房间,将选择与数组数据关联。但当前循环仅在第一次迭代(i=0)时能正确获取数据,循环代码如下:

//遍历数组中三分之一的房间(对应块数)
for (int i = 0; i < rooms.Length / 3; i++) 
{
   Console.WriteLine($"You enter a block of rooms № {i + 1}!\n\n   Choose which room to enter - 1, 2 или 3?\n");

   int choice = rooms[Convert.ToInt32(Console.ReadLine()) - 1];
}

后续迭代(i=1、2、3...)无法正常工作,需要修正索引计算部分:int choice = rooms[Convert.ToInt32(Console.ReadLine()) - 1 + ???];

修正方案

问题核心是没有根据当前块的位置偏移数组索引。每个块包含3个房间,第i个块的起始索引为i * 3,将其与玩家选择的块内偏移量相加即可得到正确的数组索引。

修改后的代码

直接修正索引计算部分:

int choice = rooms[i * 3 + Convert.ToInt32(Console.ReadLine()) - 1];

或者拆分步骤(更易读):

// 获取玩家选择的房间在块内的偏移(1→0,2→1,3→2)
int roomInBlockIndex = Convert.ToInt32(Console.ReadLine()) - 1;
// 计算数组中的绝对索引:块起始位置 + 块内偏移
int choice = rooms[i * 3 + roomInBlockIndex];

逻辑说明

  • 循环变量i表示当前所在的块(从0开始计数),每个块占3个房间,因此块的起始索引为i * 3
  • 玩家输入的1/2/3对应块内的第0/1/2个位置,需减1转换为数组偏移量
  • 两者相加即可定位到数组中对应的房间数据

示例:

  • 当i=1(第二个块),玩家选1号房间:索引 = 1*3 + 0 = 3,对应数组第4个元素
  • 当i=3(第四个块),玩家选3号房间:索引 = 3*3 + 2 = 11,对应数组第12个元素

内容的提问来源于stack exchange,提问作者Illia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:09:52