gpt4 book ai didi

c# - 在这里我可以用什么代替(开关)?

转载 作者:行者123 更新时间:2023-12-03 16:22:06 28 4
gpt4 key购买 nike

public int[] Level1Items(int floor)
{
switch (floor)
{
case 0:
case 1:
case 2:
case 3:
case 4: return CreateItems(0, 0, 0, 0, 0, 0);
case 5:
case 6: return CreateItems(1, 0, 0, 0, 0, 0);
case 7:
case 8:
case 9: return CreateItems(1, 1, 0, 0, 0, 0);

}
return generationItems;
}

基本上我有一个关卡生成方法,在某些关卡中,生成会发生变化,并且会出现不同的项目。 0-4 级将没有额外的产卵,5-6 级将有 1 个额外的 X,7-9 级将有 1X 和 1Y 等。

所以在我开始制作案例 10 到 99 之前,有没有更好的方法可以解决这个问题?
也许有一系列的 ifs 只是改变特定楼层的数组?或者有什么我没有想到的完全不同的东西。

任何想法将不胜感激:)

编辑 1:感谢大家的投入,真的帮助我解决了我的问题,也感谢所有的快速回复。

我决定简单地将我的 int[] 保存在我的 GameData 中,并仅在特定楼层使用开关来更改它。再次感谢!

最佳答案

假设 CreateItems 中的六个参数中的每一个call 的值为 01 (取决于 floor 的值),那么您可以通过以下方式确定它们的值:

  • 分割floor通过所需的“截止”级别(整数除法将为低于该级别的任何内容提供零,并为任何等于或高于该级别的内容提供非整数)。
  • 将所有非零值转换为 1 (保持所有零值不变)。

  • 因此,例如,如果我们使用临时变量, p0通过 p5对于参数(您也可以使用数组),然后:

    p0 = (floor / 5 > 0) ? 1 : 0;
    p1 = (floor / 7 > 0) ? 1 : 0;
    //... and so forth for the other 4 parameters/levels
    return CreateItems(p0, p1, p2, p3, p4, p5);

    使用数组会使代码更优雅,您甚至可以将“截止”级别放在另一个数组中,然后使用如下代码循环:

    for (int i = 0; i < 6; i++) p[i] = (floor / cutoff[i] > 0) ? 1 : 0;
    return CreateItems(p[0], p[1], p[2], p[3], p[4], p[5]);

    关于c# - 在这里我可以用什么代替(开关)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60414089/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com