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
相关产品推荐
相关产品推荐

