java - Java中的俄罗斯方 block 形状生成算法

标签 java algorithm tetris

我正在使用一些软件设计模式用 Java 构建俄罗斯方 block 游戏。基本上,我创建了一个工厂算法,该算法检索一个字符串,以确定在主游戏循环发出请求时要生成什么类型​​的俄罗斯方 block 对象,请参见代码:

public class TVShapeFactory {

    protected TVShape tvShape = null;
    protected GameContainer gc;

    TVShapeFactory(GameContainer gc) {
        this.gc = gc;
    }

    public TVShape createShape(String shape) {
        if (shape=="TVIShape") {
            tvShape = new TVIShape(gc);
        }
        else if (shape=="TVOShape") {
            tvShape = new TVOShape(gc);
        }
        else if (shape=="TVLShape") {
            tvShape = new TVLShape(gc);
        }
        else if (shape=="TVZShape") {
            tvShape = new TVZShape(gc);
        }
        else if (shape=="TVJShape") {
            tvShape = new TVJShape(gc);
        }
        else if (shape=="TVSShape") {
            tvShape = new TVSShape(gc);
        }
        else if (shape=="TVTShape") {
            tvShape = new TVTShape(gc);
        }
        else {
            System.out.println("Error: invalid type of shape");
        }
        return tvShape;
    }
}

如果您不知道 gc 是什么,它只是 Slick 2D 库的一部分,用于与完整的游戏环境一起工作。 无论如何,我创建了一些其他方法来为游戏随机生成一个形状(这样主游戏循环每次都会收到一个随机形状,但我觉得 RNG 不会削减它,我想让它更难。我注意到有一个著名的俄罗斯方 block 算法称为 Bastet tetris,但它对我来说没有意义。你们对制作硬俄罗斯方 block 形状生成算法有什么建议吗?这是我的简单 RNG 算法:

public TVShape getRandomShape() {

    TVShape[] shapes = new TVShape[7];
    shapes[0] = createShape("TVIShape");
    shapes[1] = createShape("TVOShape");
    shapes[2] = createShape("TVLShape");
    shapes[3] = createShape("TVZShape");
    shapes[4] = createShape("TVJShape");
    shapes[5] = createShape("TVSShape");
    shapes[6] = createShape("TVTShape");

    int index = new Random().nextInt(shapes.length);
    return shapes[index];
}

最佳答案

使用 .equals() 函数代替“==”符号来比较字符串。 == 用于检查两个字符串是否具有相同的引用。 而 .equals() 方法用于检查两个字符串是否具有相同的值。 而不是

(shape=="TVIShape")

使用

(shape.equals("TVIShape")

关于java - Java中的俄罗斯方 block 形状生成算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551450/

相关文章:

java - 如何在没有 JFileChooser 的情况下在 Java Swing 中打开文件

java - 如何使用 dbus 和 NetworkManager 激活连接

algorithm - 最小堆到最大堆,比较

c - 解释使用 xor 在数组中查找两个不重复的整数

java - 在数组上存储 Piece 对象 - java Tetris Tutorial

java - 具有软引用值的 HashMap 实现

java - 如何全局忽略带有 restesy 响应的空字段?

algorithm - 以最少的时间访问图中的 N 条特殊边

algorithm - Tetromino 空间填充 : need to check if it's possible

Java 俄罗斯方 block 旋转