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

标签 java

我正在制作游戏,该游戏是基于整数的打乱的 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/

相关文章:

java - 是否有用于 Eclipse AST 解析器的 Java 字节码?

java - JPA xml 映射找不到字段

java - 使用 Java 中的 IBM Cloud Conversation Service 无法解析 MessageRequest().Builder()

java - 如何在从目标目录执行 Maven 安装(构建)时删除文件

java - 达到一定字符数后如何换行

java - 尽管使用了正确的 Java 版本,但仍不受支持的主要版本和次要版本

java - JButton .doClick() 不做任何事情?

java - 有没有其他类似的实现,比如 commons-chain?

java - 使用 MSI 通过 AAD 访问 Azure Web 应用程序 Web 服务

java - ENUM 和单选按钮 Java