[C#] [OpenSource] [Beta 0.9.5] RubiksCubeSolver

    • Beta
    • Open Source

    Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Switcherlapp97.

      [C#] [OpenSource] [Beta 0.9.5] RubiksCubeSolver


      Mit RubiksCubeSolver hat das ungelöste Dasein eurer Zauberwürfel ein Ende. RubiksCubeSolver liefert Ihnen die Lösung für ungelöste Rubik's Cubes in jeder der 43,2 Trillionen Anfangsstellungen.


      Name des Programms:
      RubiksCubeSolver

      Beschreibung:
      RubiksCubeSolver besteht aus einem Renderer, der aus diesem Thread entstanden ist und dem eigentlichen Solver, der jeden ungelösten Rubik's Cube lösen kann und dem Benutzer die Lösungsschritte ausgibt. Neben der 3D Darstellung des Zauberwürfels kann der Renderer auch animierte Drehbewegungen durchführen.

      Verwendung
      Der Umgang mit dem 3D-Model ist anfangs nicht ganz einfach. Deshalb ist es hilfreich, wenn man sich hier mal eine kurze Beschreibung zur korrekten Verwendung der 3D-Darstellung durchliest:
      - Der Würfel kann mit der Rechten oder Mittleren Maustaste gedrückt rotiert werden.
      - Die Knöpfe und das Hauptmenü sollten relativ selbsterklärend sein, der Knopf neben dem Schichtenselektor gibt die Drehrichtung an.
      - Zum Bewegen einer Schicht mit der Maus wählt man zunächst eine Fläche aus (Linksklick), und dann eine zweite (Linksklick). Dabei müssen die beiden Markierung auf einer Würfelseite sein.
      - Die durch die beiden Markierungen eindeutig bestimmte Schicht wird nun automatisch gedreht, und zwar so als würde die zweite Markierung die Schicht "drücken".
      - Bei Fehlern hilft euch auch die untere Statusleiste.
      - ESC oder ENTF heben die aktuelle Auswahl auf.
      - Die obere Statusleiste zeigt die momentan gehoverte Fläche an.
      - Die Farbe eines Feldes kann man mit der gedrückten Shift-Taste und einem Klick auf ein Feld verändert werden. Mit der linken Maustaste kann man die Farbe um eins weiterschalten (Weiß-Gelb-Orange-usw.) und mit der rechten Maustaste öffnet sich ein Auswahlmenü mit den vorhandenen Farben.
      - Der aktuell ausgewählte Zug in der ListBox kann mit der Leertaste ausgeführt werden. Nach einem durchgeführten Lösungsschritt wird der nächste Listbox-Eintrag selektiert.

      Statistik:
      RubiksCubeSolver benötigt zwischen 100 und 170 Lösungsschritte, um den Zauberwürfel zu lösen. Ich verwende für das Lösen die Anfänger-Methode, die wie der Name schon sagt, die einfachste und auch langsamste Methode ist, um das Kultspielzeug zu lösen. Die Anzahl der Züge habe ich allerdings schon mit einer intelligenten Lösungsreihenfolge der einzelnen Steine in den ersten beiden Ebenen verringert. Ich werde versuchen die Fridrich-Methode ebenfalls umsetzen, die vor allem in der letzten Ebene mit den ganzen fertigen Algorithmen eine Menge Züge spart.

      Screenshots:


      Video:


      Changelog

      RubiksCubeSolver befindet sich aktuell noch einer Beta-Version, da die Eingabe von ungelösten Cubes noch nicht implementiert ist.

      Version RubiksCubeSolver v0.9 (27.01.2014)
      Erste Beta-Version
      3D-Darstellung des Rubik's Cubes
      Maussteuerung für die 3D-Ansicht
      Animierte Rotationen
      Lösung für verdrehte Würfel berechnen und ausgeben

      RubiksCubeSolver v0.9.1 (01.02.2014)
      Anzahl der Lösungsschritte verringert
      Manuelle Änderung der Farbe der Felder
      Unlösbare Farbeingaben erkennen und melden

      RubiksCubeSolver v0.9.2 (03.02.2014)
      Lösungsschritte einzeln durchführen, um mit dem eigenen Würfel mitmachen zu können

      RubiksCubeSolver v0.9.3 (04.02.2014)
      Bug beim Ausgeben der Lösungsschritte von gelösten Würfeln behoben
      Flüssiges "Ziehen" des 3D-Modells mit der rechten Maustaste
      (hoffentlich) flüssiges Rotieren der einzelnen Ebenen
      Download: vb-paradise.de/index.php/Attac…dac0013f5c0220170dd157a0d

      RubiksCubeSolver v0.9.4 (12.02.2014)
      Die Rotation der Ebenen wieder zurückgesetzt auf die von Version 0.9.2 (man muss nun nicht mehr die Maus bewegen)
      Die Anzahl der Lösungsschritte weiter vermindert durch eine intelligente Reihenfolge in der die einzelnen Steine innerhalb der Lösungsschritte gelöst werden
      von ca. 200 auf 100-160 Lösungschritte

      RubiksCubeSolver v0.9.5 (25.03.2014)
      flüssiges Rotieren der einzelnen Ebenen

      To Do
      Änderung der Farben der einzelnen Felder, um den eigenen Würfel eingeben zu können mit der Maus
      TrySolve-Methode, da bei Änderung der Farben, unlösbare Stellungen vorkommen können
      Lösungsschritte einzeln durchführen, um mit dem eigenen Würfel mitmachen zu können
      Flüssiges "Ziehen" des 3D-Modells
      Flüssiges Rotieren der Ebenen
      Verminderung der Anzahl der Lösungszüge bei den ersten beiden Ebenen
      Verminderung der Anzahl der Lösungszüge durch die OLL- und PLL-Algorithmen der Fridrich Methode
      weitere Lösungsmethoden (Roux, Petrus)

      Verwendete Programmiersprache und IDE:
      Visual C# (IDE: Visual Studio 2013 Ultimate)

      Systemanforderungen:
      .NET Framework 4.0

      Download und Code der aktuellen Version:
      im Anhang
      Code auf GitHub

      Lizenz/Weitergabe:
      RubiksCubeSolver ist Freeware und Opensource. Eine Erwähnung wäre allerdings fair, falls Ihr den Code für euer Programm verwenden möchtet :)

      Danke an @StarGate01 der mir mit VirtualRubik die Grundlage für mein Programm gecodet hat.
      Danke an @Artentus, der mir beim neuen Rendermodel sehr geholfen hat.
      Dateien
      RubiksCubeSolver


      Jetzt im Showroom

      Dieser Beitrag wurde bereits 15 mal editiert, zuletzt von „Switcherlapp97“ ()

      NGE'o schrieb:

      Wie wär es, dass Du den Vorgang des "Lösens" animiert darstellst?

      Du kannst den Würfel entweder mit Solve lösen (so hast es du denke ich gemacht) oder mit "Set queue to solution" die Lösungsschritte in die Listbox hinzufügen. Dann anschließend Execute queue klicken und schon hast du deine animierte Lösung :)
      RubiksCubeSolver


      Jetzt im Showroom
      Macht auf jeden Fall was es soll. :thumbsup:
      Allerdings ist die Anzeige doch etwas laggy, das solltest du flüssiger hinbekommen, sowohl beim "Ziehen" mit der Maus alsauch beim Ausführen der Rotationen.
      Und kannst du auch die Anwendung auf Release kompilieren und ohne die ganze Projektmappe hochladen? :)
      @Artentus
      Ich habe nun die Anwendung auch ohne Projektmappe im Startpost angehängt. Wegen der nicht ganz flüssigen Anzeige: Ist sie bei dir auch schon laggy, wenn du in der zu Beginn eingestellten Fenstergröße den Würfel bewegst?
      RubiksCubeSolver


      Jetzt im Showroom

      Artentus schrieb:

      Vielleicht hab ich auch ne andere Definition von laggy

      Vielleicht :D

      Ich werde es mir auf jeden Fall nochmal anschauen und wenn möglich noch verbessern. Ich setz es mal in die ToDo Liste :)
      RubiksCubeSolver


      Jetzt im Showroom
      Ich freue mich nun das erste Update für das Programm RubiksCubeSolver veröffentlichen zu dürfen :)

      Version 0.9.1
      Anzahl der Lösungsschritte verringert
      Manuelle Änderung der Farbe der Felder
      Unlösbare Farbeingaben erkennen und melden

      Die Anzahl der benötigten Lösungsschritt wird wie folgt reduziert: Für jeden Move in der Liste der benötigten Moves, wird überprüft, ob der nächste Schritt den aktuellen Zug unnöitg macht. Auch wenn einmal eine Seite drei mal in die selbe Drehrichtung gedreht wird, werden die drei Züge durch einen Zug in die entgegengesetzte Richtung ersetzt. Somit komme ich von ca. 260-300 auf eine Zahl von 180 bis 220 Schritte.

      Die Farbe eines Feldes kann man mit der gedrückten Shift-Taste und einem Klick auf ein Feld verändert werden. Mit der linken Maustaste kann man die Farbe um eins weiterschalten (Weiß-Gelb-Orange-usw.) und mit der rechten Maustaste öffnet sich ein Auswahlmenü mit den vorhandenen Farben.

      Der Download ist im Startpost. Ich freue mich auf eure Rückmeldungen :)
      RubiksCubeSolver


      Jetzt im Showroom

      faxe1008 schrieb:

      Kannst du reinbauen, dass man den Lösungsweg mit Enter durchsteppen kann?

      Gute Idee. Im nächsten Update ist es dann möglich :)
      RubiksCubeSolver


      Jetzt im Showroom
      Ich muss sagen, dass es echt genial ist was daraus geworden ist :thumbsup: großes Lob an alle.
      Wenn du den Würfel aber dennoch genauer anschaust, dann macht er immernoch viele unnötige Schritte, also ich geh immer auf "Scramble" und lasse ihn dann automatisch lösen und bei zugucken sieht man das er manchmal nicht so recht weiß was er machen soll und wiederholt ein Zug paar mal in dem er vor und wieder zurück geht :D
      Trotzdem gefällt es mir sehr gut, weiter so :thumbup:

      Edit: vielleicht bekommst es noch hin, das man den Würfel in 3D sehen kann, man sieht die hinteren Züge nicht, also kann man doch nicht ganz beurteilen ob er hinten was anderes macht, deswegen sieht das so aus als wenn er die Züge wiederholt..

      Gelöschter Benutzer schrieb:

      Wenn du den Würfel aber dennoch genauer anschaust, dann macht er immernoch viele unnötige Schritte

      Hast du die neue Version heruntergeladen? Damit sollten die Züge die im nächsten schon wieder rückgängig gemacht werden eigentlich aus der Liste der Lösungsschritte verschwinden.
      RubiksCubeSolver


      Jetzt im Showroom
      Ja hab ich.
      Naja es sieht/ sah nur so aus als wenn er die Schritte wiederholt, weil man nicht sieht welche Züge er hinten (verdeckt) macht, also wenn man sich die Schritte nicht anschaut, sondern nur zuguckt was der Würfel macht :D :P
      Ok verstehe :D . Bei manchen Schritten müssen manche Algorithmen öfters hintereinander verwendet werden damit das Ziel erreicht wird. Vielleicht kommt es daher :P

      EDIT:

      Gelöschter Benutzer schrieb:

      Edit: vielleicht bekommst es noch hin, das man den Würfel in 3D sehen kann, man sieht die hinteren Züge nicht, also kann man doch nicht ganz beurteilen ob er hinten was anderes macht, deswegen sieht das so aus als wenn er die Züge wiederholt..

      Du kannst das 3D Modell mit der gedrückten rechten Maustaste so drehen, wie du es brauchst :)
      RubiksCubeSolver


      Jetzt im Showroom

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Switcherlapp97“ ()

      Es ist nun wieder Zeit für ein kleines Update :)

      Version 0.9.2
      Lösungsschritte einzeln durchführen, um mit dem eigenen Würfel mitmachen zu können

      Der aktuell ausgewählte Zug in der ListBox kann nun mit der Leertaste durchgeführt werden. Nach der Durchführung wird der nächste Eintrag in der Listbox selektiert, damit man die Lösung durchsteppen kann, wie von @faxe1008 gewünscht :).

      Der Download ist im Startpost. Ich freue mich auf eure Rückmeldungen :)
      RubiksCubeSolver


      Jetzt im Showroom
      Nö, läuft immer noch nicht flüssig. :P
      Ich hab mal in den Code reingeschaut und es wurde auch sofort offensichtlich, warum es nicht flüssig ist: Timer. Beim "Ziehen" des Würfels mit der Maus konnte ich es ganz leicht beheben, Timer raus und Invalidate in MouseMove in die innere Abfrage rein. Beim Rotate ists aber nicht so einfach, weil da leider genau falschrum gearbeitet wird. Die Geschwindigkeit der Rotation wird hier von der Anzahl der Aktualisierungen abhängig gemacht, in jedem Paint wird ein Stück weiter rotiert. Jedoch sollte die Rotation unabhängig davon mit konstanter Geschwindigkeit ablaufen und dazu dann passend neuzeichnen. Das konnte ich auf die SChnelle so nicht umsetzen, weil der komplette Rotate-Code neu geschrieben werden muss.
      @KidRick
      Danke für die positive Rückmeldung :). Hast du noch Ideen für Verbesserungen oder Wünsche, die ich eventuell in meinem Programm noch umsetzen könnte?

      @Artentus
      Das Drehen des Würfels mit der rechten Maustaste funktioniert jetzt dank deiner Erklärung flüssig. Im nächsten Update wird das auf jeden Fall behoben sein. Ich setzt mich mal dran und schau mal, was ich noch an der Rotate-Methode verbessern kann, damit auch hier alles flüssig abläuft.
      RubiksCubeSolver


      Jetzt im Showroom