我是 Java 的新手,我发现了这个关于创建 Java 俄罗斯方 block 游戏的好教程。
我没有导师或家庭教师来帮助我 - 我一直在寻找一个人 :( 所以目前我正在自学 Java 和 PHP :)
无论如何,这是我找到的网站:http://zetcode.com/tutorials/javagamestutorial/tetris/
我没有在 Shape.java
类中获取程序的一个方法:
public Shape rotateLeft()
{
if (pieceShape == Tetrominoes.SquareShape)
return this;
Shape result = new Shape();
result.pieceShape = pieceShape;
for (int i = 0; i < 4; ++i) {
result.setX(i, y(i));
result.setY(i, -x(i));
}
return result;
}
为什么我们需要创建一个新对象 Shape result = new Shape();
如果已经可以从 pieceShape
变量中获取当前片段?
最佳答案
本教程中的命名似乎有点误导。名为 Shape
的类表示掉落的单个项目。 Tetrominoes
enum
似乎在描述它是哪种 项目(即它是“形状”!)。
所以您发布的代码创建了一个新的项目并指定了它的形状。
rotateRight()
和 rotateLeft()
方法不修改形状本身以允许 tryMove()
方法检查是否该移动是合法的,如果不合法则忽略它(例如,如果您将一个项目旋转到墙上)。 tryMove()
在不允许移动时仅保留旧值(包括旧的 Shape
实例)。如果 rotateLeft()
/rotateRight()
修改了 Shape
,则它必须撤消该操作,这会使代码复杂化。
此外,这段代码还有一些问题:
我将
Tetrominoes
类称为Tetromino
,因为enum
类型通常以单数形式命名(因为您经常引用单个元素:Tetromino.SquareShape
。我会将关于每个
Tetromino
的具体坐标的信息添加到那个enum
中,有效地将来自setShape( )
方法。Board
类混合了逻辑和表示,应该分开(这样更容易测试)。例如
Board
类可以在没有任何图形的情况下实现所有逻辑(即不引用java.awt
或javax.swing 中的任何内容
)。然后,您将编写一个BoardPanel
来绘制Board
的状态并与用户交互,调用适当的Board
方法。
关于java - 为什么要创建一个新对象 - Java 俄罗斯方 block 教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5310019/