我只是new Java和我发现了这种良好的教程创建一个Java俄罗斯方块的游戏。

我没有一位导师或辅导,以帮助我这个-我一直在寻找一个为年龄:( 因此目前im自我学习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 然后它就必须撤消这项行动,这将复杂的代码。

此外,有几个nitpicks这个代号:

  • 我会打电话的 TetrominoesTetromino, 如 enum 类型通常是指在单数(因为你经常引用 元件: Tetromino.SquareShape.
  • 我想添加的信息有关的具体坐标的每 Tetromino 到那 enum, 有效地把太多的逻辑 setShape() 法进入。
  • Board 类混合逻辑和显示,应当分离(使它更容易试验)。

    例如的 Board 类可以实现所有的逻辑,没有任何图形(即不准任何从 java.awtjavax.swing).然后你会写 BoardPanel 绘制的状态 Board 和与用户相互作用,呼吁适当 Board 方法。

其他提示

您发布的方法返回左旋转的形状。如果您没有创建新的形状,那么原始形状(即类的字段)将被旋转。

如果正方形在向左旋转时不会更改,则您仍然可以返回原始形状。

没有彻底看教程,我会这么说: Shape 似乎代表单个项目, rotateLeft() 可能是一种实例方法 Shape 可以旋转到位的项目也可以,即不返回旋转副本,而是更改当前形状的块坐标。创建一个新项目要掉落将意味着创建一个新的 Shape 默认方向。

看来作者没有变异 ShaperotateLeft() 因为它可能不会被接受为有效的举动。在 Board 内在 TAdapter 课程通话 tryMove() 并且仅设置电流 Shape (多变的 curShape)如果可以接受。如果在检查之前已突变,则必须在无效时将其放回原处。该方法应该命名 rotatedLeftCopy() 表明它没有改变状态。否则应事先执行检查 rotateLeft() 可以安全更改 Shape 到位。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top