-
Notifications
You must be signed in to change notification settings - Fork 0
Funktionsweise
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:
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
Der Originalcode sieht folgendermaßen aus:
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
Die Motor Funktionen sind der kleinste gemwinsame Nenner aller weiteren Funktionen. Sie beinhalten als einzige dierekte Anweisungen an die Motoren.
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
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
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
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.
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
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
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
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