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

新手开发者求助:小游戏中foreach循环方法的数组修改与打印问题

问题解答

1. 数组修改的核心结论

你当前的Stickor方法仅负责打印,完全没有修改数组的逻辑,所以它无法在游戏过程中修改sticks数组的值。不过C#中数组属于引用类型,你可以单独编写修改数组的方法,方法内对数组元素的修改会直接作用到原数组上。

2. 修正你的打印方法

原Stickor方法存在逻辑错误:内层循环用array.Length(固定为3)控制打印数量,不管每堆实际木棍数是多少,都会打印3个|,和数组存储的数量不匹配。以下是修正后的打印方法,能更直观地展示每堆木棍的数量:

static void PrintSticks(int[] array)
{
    // 找到最多的木棍数,确定打印的行数
    int maxSticks = array.Max();
    
    // 从顶部到底部逐行打印木棍
    for (int row = maxSticks; row > 0; row--)
    {
        foreach (var count in array)
        {
            // 当前行号小于等于堆的木棍数时打印|,否则打印空格占位
            Console.Write(row <= count ? " | " : "   ");
        }
        Console.WriteLine();
    }
    
    // 打印堆的分隔线
    foreach (var _ in array)
    {
        Console.Write("---");
    }
    Console.WriteLine();
    
    // 打印每堆的剩余木棍数量
    foreach (var count in array)
    {
        Console.Write($" {count} ");
    }
    Console.WriteLine();
}

3. 编写数组修改方法

需要单独写一个修改数组的方法,同时加入合法性校验,避免无效操作:

// 返回值表示修改是否成功
static bool TakeSticks(int[] array, int pileIndex, int takeCount)
{
    // 校验堆索引是否合法、拿走数量是否合规
    if (pileIndex < 0 || pileIndex >= array.Length || takeCount <= 0 || takeCount > array[pileIndex])
    {
        Console.WriteLine("操作无效,请重新输入!");
        return false;
    }
    
    array[pileIndex] -= takeCount;
    return true;
}

4. 方法整合示例

在主逻辑中可以这样把打印和修改方法整合起来:

static void Main()
{
    int[] sticks = {5, 5, 5};
    
    while (true)
    {
        Console.Clear();
        PrintSticks(sticks);
        
        // 获取玩家输入(可根据需求优化输入校验)
        Console.Write("请输入要操作的堆编号(0/1/2):");
        int pile = int.Parse(Console.ReadLine());
        Console.Write("请输入要拿走的木棍数量:");
        int count = int.Parse(Console.ReadLine());
        
        if (TakeSticks(sticks, pile, count))
        {
            // 判断游戏是否结束(所有堆木棍数为0)
            if (sticks.All(x => x == 0))
            {
                Console.WriteLine("游戏结束!");
                break;
            }
        }
        
        Console.WriteLine("按任意键继续...");
        Console.ReadKey();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:20:37