为什么要创建一个新的对象 - Java Tetris教程

Vis*_*ire 4 java object tetris

我刚接触Java,我发现了这个创建Java Tetris游戏的好教程.

我没有导师或导师帮我这个 - 我一直在寻找一个年龄:(所以目前我自学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;
}
Run Code Online (Sandbox Code Playgroud)

Shape result = new Shape();如果已经可以从pieceShape变量中获取当前片段,为什么我们需要创建一个新的Object ?

Joa*_*uer 5

在本教程中,命名似乎有点误导.调用的类Shape表示单个项目.在Tetrominoes enum似乎说明哪一种是项目(即它的"形"!).

因此,您发布的代码会创建一个新项目并指定其形状.

rotateRight()rotateLeft()方法不改变本身的形状,使tryMove()方法来检查,如果此举是合法的,忽略它,如果它不是(例如,如果你旋转项目入墙).tryMove()Shape允许在不允许移动时保留旧值(包括旧实例).如果rotateLeft()/ rotateRight()修改了Shape那么就必须撤消该操作,这会使代码复杂化.

此外,还有一些使用此代码的挑剔:

  • 我会打电话的TetrominoesTetromino,如enum类型在单数通常命名为(因为你经常引用一个单一的元素:Tetromino.SquareShape.
  • 我将有关每个具体坐标的信息添加Tetromino到其中enum,有效地将该setShape()方法的大部分逻辑放入其中.
  • Board类混合逻辑和表现,它应该分开(使得它更容易测试).

    例如,Board该类可以在没有任何图形的情况下实现所有逻辑(即不从java.awt或引用任何内容javax.swing).然后你会写一个BoardPanel绘制状态Board并与用户交互,调用适当的Board方法.