Class Tetromino

java.lang.Object
tetris.tetrominos.Tetromino

public abstract class Tetromino extends Object
Ein Tetromino ist ein Spielstein in Form von vier Blöcken.
Author:
Josef Friedrich
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Block[]
     
    protected Grid
     
    protected String
     
    static String[]
    Die Reihenfolge der Tetrominos wurde so übernommen, wie sie für den damaligen Zufallsgenerator des ursprünglichen Gameboys aufgereiht wurden.
    int
    Die Rotation des Tetrominos.
    protected Scene
    Eine Referenz auf die Szene, in der der Tetromino erstellt wurde.
    protected int
    Die x-Koordinate des Tetrominos entspricht der Lage des ersten Blocks, also dem Block mit der Indexnummer 0 im Blockfeld.
    protected int
    Die y-Koordinate des Tetrominos entspricht der Lage des ersten Blocks, also dem Block mit der Indexnummer 0 im Blockfeld.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Tetromino(Scene scene, Grid grid, String name, int x, int y)
    Erzeugt ein Tetromino durch Angabe des Names.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    addBlock(int index, int x, int y)
    Fügt einen Block ein.
    protected void
    Fügt alle Blöcke des Tetrominos in das Blockgitter ein.
    void
    addGrid(Grid grid)
    Diese Methode wird benötigt, um Tetrominos außerhalb des Grids zu rotieren und dann in die gewünschte Endposition zu bringen.
    protected boolean
     
    protected boolean
     
    protected boolean
     
    static Tetromino
    create(Scene scene, Grid grid, int number, int x, int y)
    Erzeugt ein Tetromino durch Angabe einer Nummer.
    static Tetromino
    create(Scene scene, Grid grid, String name, int x, int y)
    Erzeugt ein Tetromino durch Angabe des Names.
    protected abstract void
    Führt die eigentliche Rotation des Tetrominos durch, d. h. sie bewegt einzelnen Blöcke an neue Positionen.
    int
    Gibt die x-Koordinate des Tetrominos zurück.
    int
    Gibt die y-Koordinate des Tetrominos zurück.
    protected boolean
    isGridTaken(int x, int y)
    Überprüft, ob die gegebene Koordinate im Blockgitter besetzt ist.
    boolean
    isOwnBlockPosition(int x, int y)
    Überprüft, ob die gegebene Koordinate mit einem der vier eigenen Blöcke des Tetrominos übereinstimmt.
    protected void
    moveBlock(int index, int dX, int dY)
    Bewegt einen Block an eine neue Position durch Angabe eines relativen Vectors.
    boolean
    Bewegt das Tetromino um eine Reihe nach unten.
    boolean
    Bewegt das Tetromino um eine Spalte nach links.
    boolean
    Bewegt das Tetromino um eine Spalte nach rechts.
    void
    Entfernt das Tetromino aus der Szene, d. h. alle Block werden sowohl aus der Szene als auch aus dem Blockgitter entfernt.
    protected void
    Entfernt alle Blöcke des Tetrominos aus dem Blockgitter.
    boolean
    Führt eine Rechtsdrehung durch.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • names

      public static String[] names
      Die Reihenfolge der Tetrominos wurde so übernommen, wie sie für den damaligen Zufallsgenerator des ursprünglichen Gameboys aufgereiht wurden.
    • scene

      protected Scene scene
      Eine Referenz auf die Szene, in der der Tetromino erstellt wurde. Diese Referenz wird an die Block-Klasse weitergereicht.
    • grid

      protected Grid grid
    • name

      protected String name
    • x

      protected int x
      Die x-Koordinate des Tetrominos entspricht der Lage des ersten Blocks, also dem Block mit der Indexnummer 0 im Blockfeld.
    • y

      protected int y
      Die y-Koordinate des Tetrominos entspricht der Lage des ersten Blocks, also dem Block mit der Indexnummer 0 im Blockfeld.
    • blocks

      protected Block[] blocks
    • rotation

      public int rotation
      Die Rotation des Tetrominos.
  • Constructor Details

    • Tetromino

      public Tetromino(Scene scene, Grid grid, String name, int x, int y)
      Erzeugt ein Tetromino durch Angabe des Names.
      Parameters:
      scene - Die Szene, in der das Tetromino eingefügt werden soll.
      grid - Das Blockgitter, in das das Tetromino eingefügt werden soll.
      name - Der Name des Tetrominos, zum Beispiel J, L, etc. Die Tetrominos sind nach Großbuchstaben benannt.
      x - Die x-Koordinate (entspricht der Koordinate des 0-ten Blocks), an der das Tetromino eingefügt werden soll.
      y - Die y-Koordinate (entspricht der Koordinate des 0-ten Blocks), an der das Tetromino eingefügt werden soll.
  • Method Details

    • getX

      public int getX()
      Gibt die x-Koordinate des Tetrominos zurück.
      Returns:
      Die x-Koordinate des Tetrominos entspricht der Lage des ersten Blocks, also dem Block mit der Indexnummer 0 im Blockfeld.
    • getY

      public int getY()
      Gibt die y-Koordinate des Tetrominos zurück.
      Returns:
      Die y-Koordinate des Tetrominos entspricht der Lage des ersten Blocks, also dem Block mit der Indexnummer 0 im Blockfeld.
    • addBlock

      protected void addBlock(int index, int x, int y)
      Fügt einen Block ein.
      Parameters:
      index - Die Indexnummer im Blockfeld.
      x - Die x-Koordinate, an der der Block eingefügt werden soll.
      y - Die y-Koordinate, an der der Block eingefügt werden soll.
    • moveBlock

      protected void moveBlock(int index, int dX, int dY)
      Bewegt einen Block an eine neue Position durch Angabe eines relativen Vectors.
      Parameters:
      index - Die Indexnummer, die angibt, welcher Block verschoben werden soll.
      dX - Delta-Wert der Bewegung in x-Richtung.
      dY - Delta-Wert der Bewegung in y-Richtung.
    • isOwnBlockPosition

      public boolean isOwnBlockPosition(int x, int y)
      Überprüft, ob die gegebene Koordinate mit einem der vier eigenen Blöcke des Tetrominos übereinstimmt.
    • isGridTaken

      protected boolean isGridTaken(int x, int y)
      Überprüft, ob die gegebene Koordinate im Blockgitter besetzt ist. Dabei wird ein eigener Block ignoriert.
    • addGrid

      public void addGrid(Grid grid)
      Diese Methode wird benötigt, um Tetrominos außerhalb des Grids zu rotieren und dann in die gewünschte Endposition zu bringen. So können wir ein vorbelegtes Gitter erzeugen, um den Algorithmus zu testen, wie ausgefüllte Reihen aus dem Gitter gelöscht werden. Die Tetrominos werden zunächst ohne Gitter erzeugt (grid = null), dann rotiert und an die gewünschte Position geschoben und schließlich wird diese Methode aufgerufen und die Blöcke werden dem Gitter hinzugefügt.
      Parameters:
      grid - Ein Blockgitter.
    • addBlocksToGrid

      protected void addBlocksToGrid()
      Fügt alle Blöcke des Tetrominos in das Blockgitter ein.

      Die Blöcke können nicht einzeln im Gitter verschoben werden, da sie sich sonst gegenseitig überschreiben würden.

      See Also:
    • removeBlocksFromGrid

      protected void removeBlocksFromGrid()
      Entfernt alle Blöcke des Tetrominos aus dem Blockgitter.

      Die Blöcke können nicht einzeln im Gitter verschoben werden, da sie sich sonst gegenseitig überschreiben würden.

      See Also:
    • checkLeft

      protected boolean checkLeft()
    • moveLeft

      public boolean moveLeft()
      Bewegt das Tetromino um eine Spalte nach links.
      Returns:
      Wahr, wenn sich das Tetromino bewegen konnte, sonst falsch.
    • checkRight

      protected boolean checkRight()
    • moveRight

      public boolean moveRight()
      Bewegt das Tetromino um eine Spalte nach rechts.
      Returns:
      Wahr, wenn sich das Tetromino bewegen konnte, sonst falsch.
    • checkDown

      protected boolean checkDown()
    • moveDown

      public boolean moveDown()
      Bewegt das Tetromino um eine Reihe nach unten.
      Returns:
      Wahr, wenn sich das Tetromino bewegen konnte, sonst falsch.
    • doRotation

      protected abstract void doRotation()
      Führt die eigentliche Rotation des Tetrominos durch, d. h. sie bewegt einzelnen Blöcke an neue Positionen.

      Es handelt sich um eine abstrakte Einschubmethode, die nach dem Schablonen-Methode-Entwurfsmuster (englisch template method) von den Unterklassen - den einzelnen Tetrominos - implementiert werden müssen.

      See Also:
    • rotate

      public boolean rotate()
      Führt eine Rechtsdrehung durch.

      Es handelt sich um eine Schablonen-Methode (englisch template method) nach dem gleichnamigen Entwurfsmuster. Diese Methode ruft die abstrakte Methoden doRotation() auf, die erst in den Unterklassen der einzelnen Tetrominos definiert werden.

      Returns:
      Gibt wahr zurück, wenn sind das Tetromino drehen konnte, sonst falsch.
      See Also:
    • remove

      public void remove()
      Entfernt das Tetromino aus der Szene, d. h. alle Block werden sowohl aus der Szene als auch aus dem Blockgitter entfernt.
    • create

      public static Tetromino create(Scene scene, Grid grid, String name, int x, int y)
      Erzeugt ein Tetromino durch Angabe des Names.
      Parameters:
      scene - Die Szene, in der das Tetromino eingefügt werden soll.
      grid - Das Blockgitter, in das das Tetromino eingefügt werden soll.
      name - Der Name des Tetrominos, zum Beispiel J, L, etc. Die Tetrominos sind nach Großbuchstaben benannt.
      x - Die x-Koordinate (entspricht der Koordinate des 0-ten Blocks), an der das Tetromino eingefügt werden soll.
      y - Die y-Koordinate (entspricht der Koordinate des 0-ten Blocks), an der das Tetromino eingefügt werden soll.
      Returns:
      Das erzeugte Tetromino.
    • create

      public static Tetromino create(Scene scene, Grid grid, int number, int x, int y)
      Erzeugt ein Tetromino durch Angabe einer Nummer.
      Parameters:
      scene - Die Szene, in der das Tetromino eingefügt werden soll.
      grid - Das Blockgitter, in das das Tetromino eingefügt werden soll.
      number - Die Nummer des Tetrominos, 0 ist zum Beispiel das L-Tetromino, 6 das T-Tetromino.
      x - Die x-Koordinate (entspricht der Koordinate des 0-ten Blocks), an der das Tetromino eingefügt werden soll.
      y - Die y-Koordinate (entspricht der Koordinate des 0-ten Blocks), an der das Tetromino eingefügt werden soll.
      Returns:
      Das erzeugte Tetromino.