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

如何消除文本游戏lootbox逻辑中冗余的if-elseif语句?

优化库存物品添加逻辑,替代冗余的if-elseif语句

问题背景

开发小型文本类游戏时,击败地下城后的lootbox系统中,当前通过逐个检查invitem1至invitem7是否为空来添加物品,导致代码充斥大量重复的if-elseif分支,可读性和维护性差。

解决方案:用集合替代独立变量,通过循环简化逻辑

核心是将分散的invitem1~invitem7替换为数组或List集合,通过遍历集合找到第一个空位,彻底消除冗余分支。

1. 替换独立变量为数组

首先把原来的单个库存变量换成一个固定长度的数组(对应7个库存位):

// 初始化7个空位的库存,初始值为空字符串
string[] inventory = new string[7];

2. 简化物品添加逻辑

通过循环遍历数组,找到第一个空位后添加物品并提示;若遍历结束无空位,则提示库存已满。

优化后的完整代码:

if (whatitem == 1)
{
    string obtainedItem = item5;
    Console.WriteLine($"You got {obtainedItem}(10%)");

    bool added = false;
    for (int i = 0; i < inventory.Length; i++)
    {
        if (string.IsNullOrEmpty(inventory[i]))
        {
            inventory[i] = obtainedItem;
            Console.WriteLine($"The item has been added to your inventory. Added to slot {i + 1}");
            added = true;
            break; // 找到空位后立即终止循环
        }
    }

    if (!added)
    {
        Console.WriteLine("No space, Reward deleted");
    }

    Console.WriteLine("Press ENTER to proceed");
}

3. 进阶优化:封装库存操作方法

如果需要处理多种物品类型(whatitem为2~5的情况),可以将库存添加逻辑封装成独立方法,避免重复代码:

// 封装库存添加逻辑,返回是否添加成功
bool AddItemToInventory(string item, string[] inventory)
{
    for (int i = 0; i < inventory.Length; i++)
    {
        if (string.IsNullOrEmpty(inventory[i]))
        {
            inventory[i] = item;
            Console.WriteLine($"The item has been added to your inventory. Added to slot {i + 1}");
            return true;
        }
    }
    Console.WriteLine("No space, Reward deleted");
    return false;
}

调用示例:

if (whatitem == 1)
{
    string obtainedItem = item5;
    Console.WriteLine($"You got {obtainedItem}(10%)");
    AddItemToInventory(obtainedItem, inventory);
    Console.WriteLine("Press ENTER to proceed");
}

// whatitem为其他值时,直接调用方法即可
if (whatitem == 2)
{
    string obtainedItem = itemX; // 对应其他物品
    Console.WriteLine($"You got {obtainedItem}(XX%)");
    AddItemToInventory(obtainedItem, inventory);
    Console.WriteLine("Press ENTER to proceed");
}

额外优化细节

  • 使用字符串插值($"...")替代字符串拼接,代码更简洁易读
  • 用string.IsNullOrEmpty()替代直接判断== "",更严谨(能处理null的情况)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:40:25