gpt4 book ai didi

java - 如何制作在行数可变的选项卡上运行的方法?

转载 作者:行者123 更新时间:2023-11-30 06:15:59 25 4
gpt4 key购买 nike

我正在制作游戏,该游戏是基于整数的打乱的 tab[] 。游戏的每个级别都采用具有不同参数的数组(数字范围正在变化)和一个整数(比如说级别的长度)。现在,我创建了 arrayFatory 类,它使数组具有给定的参数。

在代码中,有 6 个级别,它们由 6 个分配给 currentArray 的 arrayFactory 对象表示。 currentArray 是通过 switch case 选择为“该级别的当前”的数组。案例是决定级别长度的整数。

array1 = new RandomArrayFactory(3, 100);
array2 = new RandomArrayFactory(101, 200);
array3 = new RandomArrayFactory(201, 310);
array4 = new RandomArrayFactory(396, 720);
array5 = new RandomArrayFactory(721, 999);
array5 = new RandomArrayFactory(1000, 1310);
array6 = new RandomArrayFactory(1396, 2000);

switch (scoreCount) {
case 0:
progressScope = 13;
currentArray = array1.getNumbertab();
break;
case 13:
progressScope = 31;
currentArray = array2.getNumbertab();
break;
case 44:
progressScope = 56;
currentArray = array3.getNumbertab();
break;
case 100:
progressScope = 106;
currentArray = array4.getNumbertab();
break;
case 206:
progressScope = 214;
currentArray = array5.getNumbertab();
break;
case 420:
progressScope = currentArray.length;
currentArray = array6.getNumbertab();
break;
}
正如您所看到的,有很多硬编码变量,这就是我想要更改的内容。我想要一种带有构造函数的类,该类带有每个级别的范围和“progressScope”int 的选项卡,我可以在 currentArray 正在执行其工作的地方使用它。

只有当级别达到最终数量时,我才有可能将 switch 语句复制到我的新类中并返回 tab 和 int。但我希望能够以尽可能简单的方式定义新级别,我相信最简单的方法是采用 tab[][][] 参数的构造函数,第一个是 arrayScope 的值,第二个是 ProgressScope 的值。

但是如何使方法体如此灵活以承载可变数量的级别来创建?或者也许我的想法完全错误,我应该让它完全不同?我不是在寻找具体的答案,而是在寻找一些技巧或概念

最佳答案

为了能够添加/删除任何新级别,您应该替换 switch通过带有 Collection 的循环来硬编码值。

实际上,您根据分数计数选择级别,并将一些信息与您的级别相关联( progressScopenumberTab )。
这种方法似乎有一个缺点。它假设实际分数恰好达到与每个级别相关的分数。但是如果当前分数超过了某个级别对应的分数又不等于的话怎么处理?
所以一个switch执行完美匹配(等于),因此可能不是更合适的解决方案。

作为替代方案,我建议您定义一个 Level 列表按分数降序排列,其中 Level将包含代表 Level 的所有信息(核心级数据,但也有辅助但有用的信息,如 progressScopenumberTabrequiredScore )。

您可以通过这种方式创建关卡:

List<Level> levels = new ArrayList<>();
levels.add(new Level(3, 100, 0, 13));
levels.add(new Level(201, 310, 13, 31));

并引入一种方法来检索 Level “匹配”到分数:

public Level findLevel(List<Level> levels, int score) {
for (Level level : levels) {
if (score >= level.getRequiredScore()) {
return level;
}
}
throw new RuntimeException("should not come here !");
}

现在您可以调用它:

Level currentLevel = findLevel(levels, currentScore);
progressScope = currentLevel.getProgressScope();
currentArray = currentLevel.getCurrentArray();

关于java - 如何制作在行数可变的选项卡上运行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182887/

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