Skip to content

Funktionsweise

Paul Jonas edited this page May 4, 2024 · 7 revisions

Eine gute Dokumentation in Scratch zu schreiben ist nicht gerade einfach. Darum wir der größte Teil der Dokumentation hier erscheinen. Insgesamt esistieren drei verschiedene Versionen des Programms.

  • Die mit * gekennzeichneten Blöke und Funktionen sind exklusiv für das CubeSolver Programm.
  • Die mit ** gekennzeinetemn Blöke und Funktionen sind exklusiv für das CubeRandomizer Programm. Programm
  • Die Unterschiede der beiden CubeSolver Variationen werden nicht abgebildet.

Die Fumktionen sind mach ihrer inneren Struktur in Abschniitte eingeteilt Eingabeparameter der Funktionen sind tabelarisch aufgelistet. Um es verständlicher zu halten, werden hier keine Screenshots des Orginalcodes verwendet, sondern ledigleich Flussdiagramme, die diese nachbilden. Das sieht am Beispiel der MainFunction wie folgt aus:

MainFunction

flowchart TB

classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px

A(Start):::yellow
SC[/<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/ScanCube'>ScanCube*</a>/]:::pink
R[<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/Reset_Function'>Reset</a>]:::pink
WCT[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/whitecrosstiny'>WhiteCrossTiny*</a>\]:::pink
WCL[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/whitecrosslarge'>WhiteCrossLarge*</a>\]:::pink
TC[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/TopCorner'>TopCorner*</a>\]:::pink
ME[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/MidEdges'>MidEdges*</a>\]:::pink
YCT[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/YellowCrossTiny'>YellowCrossTiny*</a>\]:::pink
YCL[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/YellowCrossLarge'>YellowCrossLarge*</a>\]:::pink
BC[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/BottomCorners'>BottomCorners*</a>\]:::pink
F(Finished):::yellow
A-->R-->SC-->WCT-->WCL-->TC-->ME-->YCT-->YCL-->BC-->F
Loading

Der Originalcode sieht folgendermaßen aus:

MainFunction

In der MainFunction fliießen alle Prozesse zusammen, die für das Programm relevant sind. Die wird als einzige zu Beginn des Programms ausgeführt. Die MainFunction des Only-firstRow Programms ist lediglich etwas kürtzer und endet mit der TopCorners function. Die MainFunction des RandomizeCube Programms sieht etwas anders aus:

flowchart TB
classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px

S(Start):::yellow
R[<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/Reset_Function'>Reset</a>]:::pink
RD[\<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/Randomize_Function'>Randomize*</a>\]:::pink
F(Finished):::yellow

S-->R-->RD-->F
Loading

Motor Funktionen

Die Motor Funktionen sind der kleinste gemwinsame Nenner aller weiteren Funktionen. Sie beinhalten als einzige dierekte Anweisungen an die Motoren.

RotateCube

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an
prim boolien gibt die Drehrichtung an (TRUE = im Uhrzeigersinn; FALSE = gegen den Uhrzeigersinn)

Die Funktion rotiert den Würfel um die z-Achse.

flowchart TB

classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

M1[\Würfel um 90 im Uhrzeigersinn drehen\]:::blue
!M1[\Würfel um 90° gegen den Uhrzeigersinn drehen\]:::blue
S(Start):::yellow
P{Prim}:::orrange
T{Anzahl <br> Wiederhohlungen <br> < times}:::orrange
F(Finished):::yellow

S-->P
P--True--> M1
P--False-->!M1
M1 & !M1 -->T
T--True-->S
T--False-->F
Loading

TipCube

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an

Die Funktion rotiert den Würfel um die y-Achse. Danach fährt der Arm in seine Ausgangsposition zurück.

flowchart TB

classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

M1[\Arm um 220° im Uhrzeigersinn drehen\]:::blue
M2[\Arm um 220° gegen den Uhrzeigersinn drehen\]:::blue
T{Anzahl <br> Wiederhohlungen <br> < times}:::orrange
S(Start):::yellow
F(Finished):::yellow

S-->M1-->M2-->T
T--True-->S
T--False-->F
Loading

RotateBottom

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an
prim boolien gibt die Drehrichtung an (TRUE = im Uhrzeigersinn; FALSE = gegen den Uhrzeigersinn)

Um die untere Ebene zu rotieren, wird der Arm über die beiden oberen gelegt, sodass sie sich nicht mitdrehen, wenn der Würfel bewegt wird

flowchart TB

classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

M1[\Würfel um 90° im Uhrzeigersinn drehen\]:::blue
!M1[\Würfel um 90° gegen den Uhrzeigersinn drehen\]:::blue
M2[\Arm um 80° im Uhrzeigersinn drehen\]:::blue
!M2[\Arm um 80° gegen den Uhrzeigersinn drehen\]:::blue
S(Start):::yellow
F(Finished):::yellow
P{Prim}:::orrange
T{Anzahl <br> Wiederhohlungen <br> < times}:::orrange

S-->M2-->P
P--True-->M1
P--False-->!M1
M1 & !M1 --> T
T--True-->S
T--False-->!M2-->F
Loading

Grundbewegugen

Die Grundbewegungen sind eine Ebene komplexer, als die Motor Funktionen. Sie sind jewails aus mehreren Motor Funktionen zusammengesetzt.
Obgleich wir die Beiden Arten hier getrennt betrachten, spielt diese Unterscheidung später keine Rolle mehr, da sie in den Algorithmen beide als kleinste gemeinsame Einheit betrachtet werden.

RotateRight

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an
prim boolien gibt die Drehrichtung an (TRUE = im Uhrzeigersinn; FALSE = gegen den Uhrzeigersinn)

Die RotateRight Funktion Rotiert die rechte Seite des Würfels.

flowchart TB
classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

S(Start):::yellow
F(Finished):::yellow
RB[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatebottom'>RotateBottom {times} {prim}</a>"\]:::pink
TC-1[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {1}</a>"\]:::pink
TC-3[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {3}</a>"\]:::pink
RC-1F[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatecube'>RotateCube {1} {False}</a>"\]:::pink
RC-1T[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatecube'>RotateCube {1} {True}</a>"\]:::pink

S-->RC-1T-->TC-1-->RB-->TC-3-->RC-1F-->F
Loading

RotateLeft

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an
prim boolien gibt die Drehrichtung an (TRUE = im Uhrzeigersinn; FALSE = gegen den Uhrzeigersinn)

Die RotateRight Funktion Rotiert die linke Seite des Würfels.

flowchart TB
classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

S(Start):::yellow
F(Finished):::yellow
RB[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatebottom'>RotateBottom {times} {prim}</a>"\]:::pink
TC-1[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {1}</a>"\]:::pink
TC-3[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {3}</a>"\]:::pink
RC-1F[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatecube'>RotateCube {1} {False}</a>"\]:::pink
RC-1T[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatecube'>RotateCube {1} {True}</a>"\]:::pink

S-->RC-1F-->TC-1-->RB-->TC-3-->RC-1T-->F
Loading

RotateTop

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an
prim boolien gibt die Drehrichtung an (TRUE = im Uhrzeigersinn; FALSE = gegen den Uhrzeigersinn)

Die RotateRight Funktion Rotiert die rechte obere des Würfels.

flowchart TB
classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

S(Start):::yellow
F(Finished):::yellow
RB[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatebottom'>RotateBottom {times} {prim}</a>"\]:::pink
TC[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {2}</a>"\]:::pink
TC-2[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {2}</a>"\]:::pink

S-->TC-->RB-->TC-2-->F
Loading

RotateFront

Parameter Datentyp Funktion
times intiger gibt die Anzahl an Umdrehungen an
prim boolien gibt die Drehrichtung an (TRUE = im Uhrzeigersinn; FALSE = gegen den Uhrzeigersinn)

Die RotateRight Funktion Rotiert die vordere Seite des Würfels.

flowchart TB
classDef pink fill:#ff6680,stroke:#ff4463, stroke-width:1.5px
classDef yellow fill:#f5c400,stroke:#c0a51d, stroke-width:1.5px
classDef orrange fill:#ffb515,stroke:#cc9010, stroke-width:1.5px
classDef blue fill:#0090f5,stroke:#0265a9, stroke-width:1.5px

S(Start):::yellow
F(Finished):::yellow
RB[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/rotatebottom'>RotateBottom {times} {prim}</a>"\]:::pink
TC-1[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {1}</a>"\]:::pink
TC-3[\"<a href='https://github.com/RedLion8399/EV3_rubiks_cube-solver/wiki/Funktionsweise/tipcube'>TipCube {3}</a>"\]:::pink

S-->TC-1-->RB-->TC-3-->F
Loading

Basisalgorithmen

Algorithmus Teilfunktionen

WhiteCrossTiny

WhiteCrossLarge

TopCorner

MidEdges

YellowCrossTiny

YellowCrossLarge

BottomCorners

Weitere Funktionen

Reset Function

ScanCube

Randomize Function

<a href=''>\ Ausgabe // Eingabe

Clone this wiki locally