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 ?
在本教程中,命名似乎有点误导.调用的类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方法.
| 归档时间: |
|
| 查看次数: |
5305 次 |
| 最近记录: |