2. turn()

Das Drehen einer der 6 Seiten des Würfels verändert die Anordnung der Elemente im Array.

Um das Drehen der verschiedenen Seiten zu beschreiben, verwende ich im Code ein Enum (Enumeration):

Mit clockwise meine ich dabei jeweils eine Drehung der Seite um 90° im Uhrzeigersinn, mit counterclockwise eine Drehung um 90° gegen den Uhrzeigersinn.

Ich muss insgesamt also zwischen 12 verschiedenen Fällen unterscheiden, die das Array auch alle wirklich auf unterschiedliche Weise neu anordnen.

Der Würfel hat im Dreidimensionalen die Eigenschaft, dass das Drehen der Seiten auf die gleiche Art beschrieben werden kann, da der Würfel selbst gedreht werden kann.

Dadurch, dass wir den Würfel hier aber als Würfelnetz darstellen und ich die Seiten fest mit front, up, right, back, left und down bezeichne, kann ich diese Eigenschaft in meinem Programm nicht ausnutzen.

Eine Drehung gegen den Uhrzeigersinn könnte außerdem auch durch das dreifache Drehen der Seite im Uhrzeigersinn erreicht werden. Da der Würfel aber mit möglichst wenig Schritten gelöst werden soll, ist es sinnvoll, zu jeder Drehung im Uhrzeigersinn auch noch die Drehung gegen den Uhrzeigersinn zu programmieren, die die Drehung im Uhrzeigersinn rückgängig macht.

Die nachfolgenden Bilder zeigen die Drehungen frontClockwise, upClockwise, rightClockwise, backClockwise, leftClockwise und downClockwise und wie ich diese im Code umgesetzt habe.

Die anderen Drehungen funktionieren vom Prinzip her genau so.

 

Vor dem Drehen

F (frontClockwise)

U (upClockwise)

R (rightClockwise)

B (backClockwise)

L (leftClockwise)

D (downClockwise)

Ich habe für diesen Teil des Programms viele der Methoden verwenden können, die ich vorher schon für die Ausgabe geschrieben habe. Zusätzlich brauchte ich noch eine Methode rotateFace(), die die Elemente auf einer Seite bei einer Drehung um 90° neu anordnet.

In Swift gibt es schon eine Methode reversed(), die ein Array umkehrt. Als ich das Programm später in Java umgeschrieben habe, musste ich eine solche Methode selber schreiben: