我正在使用 Java 自己编写俄罗斯方块游戏。我没有使用任何已经包含代码的教程,因为我想尝试自己分解它,看看我能走多远。
到目前为止,不太好。我偶然发现了 Shapes 上的创作。我的想法是: 1. 将每个基本形状(如 L、立方体、船)作为单独的类扩展或实现 Area 或 Shape,以便我可以将其用作g2.fill(LShape)
. 2. 每个类都有某种描述旋转位置的状态变量,但这是下一个挑战,找出旋转..
所以对于第 1 步,到目前为止,我已经编写了以下 LShape 类的草稿:
草案 a):
public class LShape implements Shape{
private Rectangle[][] poc;
private int rotationState;
public LShape() {
rotationState = 0;
poc = new Rectangle[3][3];
poc[0][0] = new Brick(INITIAL_X - BRICK, INITIAL_Y, BRICK);
poc[1][0] = new Brick(INITIAL_X - BRICK, INITIAL_Y + BRICK, BRICK);
poc[2][0] = new Brick(INITIAL_X - BRICK, INITIAL_Y + 2 * BRICK, BRICK);
poc[2][1] = new Brick(INITIAL_X, INITIAL_Y + 2 * BRICK, BRICK);
}
}
//.....all the Shape's methods which I'm not overriding cause I don't know how
在我调用paint()方法的主类中:
g2.fill(lShape); // where lShape is a LShape object;
问题是抛出了一个关于getPathIterator()
或草案 b):
public class LShape extends Area{
public LShape () {
add(new Area(new Brick(INITIAL_X - BRICK, INITIAL_Y, BRICK)));
exclusiveOr(new Area(new Brick(INITIAL_X - BRICK, INITIAL_Y + BRICK, BRICK)));
exclusiveOr(new Area(new Brick(INITIAL_X - BRICK, INITIAL_Y + 2 * BRICK, BRICK)));
exclusiveOr(new Area(new Brick(INITIAL_X, INITIAL_Y + 2 * BRICK, BRICK)));
}
}
在这种情况下,当我调用时,g2.fill(lShape)
没有异常并且 Shape 被绘制,只是我不知道如何移动它。区域的一部分是矩形的 Brick 对象,所以我可以尝试访问setLocation
区域中每个 Brick 的方法,但我不知道如何访问它。
所以我想我需要帮助来弄清楚如何使俄罗斯方块形状的形状实现不抛出异常,这意味着实现所有必需的方法并实际显示在 JPanel 上......然后我会担心旋转。或者弄清楚如何使俄罗斯方块形状的区域扩展移动。
谢谢,