Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rubik's Cube - Wie speichern? (https://www.delphipraxis.net/130347-rubiks-cube-wie-speichern.html)

Fussball-Robby 6. Mär 2009 20:26


Rubik's Cube - Wie speichern?
 
Hey,

ich möchte ein Programm zur Simulation eines Rubik's Cube schreiben.
Jetzt frage ich mich, wie ich die Stellung der einzelnen "Steine" speichern soll. Also nicht das Speichern in eine Datei, sondern im Programm. Als erstes dachte ich, nehme ich einfach ein dreidimensionales Array, das ist aber mehr oder weniger Quatsch. Die Farben jeder Seite einzeln zu speichern finde ich jetzt auch nicht so gut, da ich nachher eventuell prüfen muss (bei Benutzereingabe), ob jeder Stein einmal verwendet wurde, dass wäre dann relativ unpraktisch.
Also, was würdet ihr mir vorschlagen? Zu berücksichtigen ist, dass die Drehungen der einzelnen Seiten und die dadurch entstehende Verschiebung der Steine nachher am besten einfach zu berechnen sein soll.

Vielen Dank für die Hilfe!

quendolineDD 6. Mär 2009 20:37

Re: Rubik's Cube - Wie speichern?
 
Mal im Ansatz mathematisch anzugehen, könntest du dir ja die Grundvoraussetzungen ja anschauen.

Ein Stein hat folgende Farben: rot, orange, blau, grün, weiß, gelb.
Von jeder Farbe gibt es 3² = 9 Steine.
Es gibt 6 Seiten.

Somit wäre ein Array doch ein Lösungsweg.

Ein Array mit 6 Feldern, wobei jedes Feld ein 2-dimensionales Array repäsentiert, welches den Stein(seine Position auf der Seite) und seine Farbe repräsentiert.

Was anderes fällt mir eben nicht ein, obwohl es da bestimmt bessere mathematische konzepte gibt. Eventuell googlest du mal, da wird es mit Sicherheit einige Ansätze geben ...


Zitat:

Zitat von fLaSh11
Zitat:

Zitat von quendolineDD
Von jeder Farbe gibt es 3³ = 9 Steine.

:wall:
am besten korrigieren :zwinker:

Es gibt Zeiten in denen Mann einfach nicht denken sollte ;)

Fussball-Robby 6. Mär 2009 20:41

Re: Rubik's Cube - Wie speichern?
 
Zitat:

Zitat von quendolineDD
Ein Array mit 6 Feldern, wobei jedes Feld ein 2-dimensionales Array repäsentiert, welches den Stein(seine Position auf der Seite) und seine Farbe repräsentiert.

Erstmal danke für die Hilfe. So könnte ich es natürlich machen. Aber was passiert, wenn ich jetzt die Rote seite drehe? Bei dieser Lösung müsste ich dann wohl jeden Stein einzeln zuordnen. Und gerade das will ich möglichst nicht, ich suche eine Lösung, bei der die Seiten in irgendeiner Weise "zusammenhängen", damit Drehungen leichter zu berechnen sind.

Namenloser 6. Mär 2009 21:32

Re: Rubik's Cube - Wie speichern?
 
Dann nimm doch das dreidimensionale Array. Mit dem ungenutzten Feld in der Mitte kann man ja leben...

fLaSh11 6. Mär 2009 22:57

Re: Rubik's Cube - Wie speichern?
 
Zitat:

Zitat von quendolineDD
Von jeder Farbe gibt es 3³ = 9 Steine.

:wall:
am besten korrigieren :zwinker:

Satty67 6. Mär 2009 23:35

Re: Rubik's Cube - Wie speichern?
 
Eine zweidimensionale Tabelle reicht auch (mit mehr Leer-Zellen).

Die Verschiebungen/Drehungen werden dadurch nicht weniger, aber evtl einfacher zu durchschauen:
Code:
.
      1 1 1
      1 1 1
      1 1 1
5 5 5 2 2 2 6 6 6
5 5 5 2 2 2 6 6 6
5 5 5 2 2 2 6 6 6
      3 3 3
      3 3 3
      3 3 3
      4 4 4
      4 4 4
      4 4 4

Corpsman 7. Mär 2009 08:11

Re: Rubik's Cube - Wie speichern?
 
Wenn es dir eine Hilfe für deine Entscheidung ist.

Ich habe in meinem Rubik Programm ein 3-Deimensionales Array genommen. Das schien mir die "realistischte" Darstellung und hat auch wunderbar funktioniert.

Namenloser 7. Mär 2009 16:01

Re: Rubik's Cube - Wie speichern?
 
Zitat:

Zitat von Satty67
Eine zweidimensionale Tabelle reicht auch (mit mehr Leer-Zellen).

Die Verschiebungen/Drehungen werden dadurch nicht weniger, aber evtl einfacher zu durchschauen:
Code:
.
      1 1 1
      1 1 1
      1 1 1
5 5 5 2 2 2 6 6 6
5 5 5 2 2 2 6 6 6
5 5 5 2 2 2 6 6 6
      3 3 3
      3 3 3
      3 3 3
      4 4 4
      4 4 4
      4 4 4

Also bei dem Teil muss ich lange nachdenken, an welchen Stellen ich das Teil verändern muss, wenn ich es um eine Achse drehe...

quendolineDD 7. Mär 2009 16:41

Re: Rubik's Cube - Wie speichern?
 
Code:
\ 1 2 3 4 5 6 7 8 9
1       1 1 1
2       1 1 1
3       1 1 1
4 5 5 5 2 2 2 6 6 6
5 5 5 5 2 2 2 6 6 6
6 5 5 5 2 2 2 6 6 6
7       3 3 3
8       3 3 3
9       3 3 3
10      4 4 4
11      4 4 4
12      4 4 4

Drehe ich jetzt zum Beispiel die oberste Zeile horizontal einmal sieht das dann so aus

Code:
\ 1 2 3 4 5 6 7 8 9
1       1 1 1
2       1 1 1
3       1 1 1
4 2 2 2 6 6 6 4 4 4
5 5 5 5 2 2 2 6 6 6
6 5 5 5 2 2 2 6 6 6
7       3 3 3
8       3 3 3
9       3 3 3
10      5 5 5
11      4 4 4
12      4 4 4
Wer findet denmathematischen Ansatz?

himitsu 7. Mär 2009 16:57

Re: Rubik's Cube - Wie speichern?
 
wenn man sich den "4." Teil nochmal an anderer Stelle vorstellt, dann wird es wohl einfacher.

man muß also beim Drehen einfach nur alles in einer Linie verschieben
Code:
\ 1 2 3 4 5 6 7 8 9 . . .
1       1 1 1
2       1 1 1
3       1 1 1
4 2 2 2 6 6 6 4 4 4 [color=gray]5 5 5[/color]
5 5 5 5 2 2 2 6 6 6 [color=gray]4 4 4[/color]
6 5 5 5 2 2 2 6 6 6 [color=gray]4 4 4[/color]
7       3 3 3
8       3 3 3
9       3 3 3
10      4 4 4
11      4 4 4
12      5 5 5
wobei quendolineDD einen Fehler hat ... der 4. ist spiegelverkehrt (klapp ihn mal nach hinten rum)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz