VorwortWas ist die Huarong Road? Ich glaube, jeder hat diese Art von Zahlenrätselspiel schon einmal gespielt. Es ist ein typisches Beispiel für Huarong Road. Huarongdao ist ein altes chinesisches Puzzlespiel. Mit seinen vielen Variationen und nie langweiligen Funktionen wird es von ausländischen Geheimdienstexperten zusammen mit dem Zauberwürfel und dem Independent Diamond Chess als „drei Wunder in der Welt der Denkspiele“ bezeichnet. Heute erfahren wir etwas über die Huarong Road. TextHeute werden wir hauptsächlich ein 3*3-Layout verwenden. Ein Anfänger hat mit Cocos Creator eine einfache Demo geschrieben. Lassen Sie uns Schritt für Schritt darüber sprechen. 1. PanelZunächst generieren wir zufällig eine Panelanordnung 2. Huarongdao-LösungIdeen: Erschöpfende Methode: Jeder weiß, wie man dieses Spiel spielt. Verschieben Sie die verschiebbaren Quadrate und ordnen Sie die gemischten Quadrate entsprechend den darauf angezeigten Zahlen von klein nach groß an, um das Level zu bestehen. Dabei wendet der Laie die erschöpfende Methode an, um in jeder möglichen Situation die optimale Lösung zu finden. Bei der erschöpfenden Methode sehen wir oft:
Hier verwenden wir die Breitensuche und müssen nur die optimale Lösung finden, also die mit der geringsten Anzahl von Schritten. Nehmen wir die ersten drei Schritte als Beispiel.
Nachdem wir es verstanden haben, können wir es auf die Demo anwenden, um zu testen, ob es das Level bestehen kann. Klicken Sie auf die automatische Anordnung in der Demo 3. Code//Durchlaufe die Lösung, während (true) { let Schritte: Array<beliebig> = []; let lastGrad: Array<beliebig> = this.mMapData[this.mMapData.length - 1]; console.log(letzterGrad.Länge); //Alle Ergebnisse im letzten Gradienten durchlaufen und den nächsten Schritt lösen for (let i = 0; i < lastGrad.length; i++) { lass matrix = letzterGrad[i]["matrix"]; lass Antwort = letzterGrad[i]["Antwort"]; let-Ergebnis: Array<any> = this.move(Matrix, Antwort, Schritte); wenn (Ergebnis) { console.log("Ergebnis:", Ergebnis); Lösung (Ergebnis); zurückkehren; } } wenn(Schritte.Länge<=0){ console.log("Abfrageergebnis fehlgeschlagen, "); auflösen (null); zurückkehren; } this.mMapData.push(Schritte); } privater Zug(Matrix: Array<Zahl>, Antwort: Array<beliebig>, Schritte: Array<beliebig>): Array<beliebig> { für (lass i = 0; i < Matrix.Länge; i++) { if (matrix[i] != -1) { //Kein leerer Bereich. Überprüfe, ob er verschoben werden kann, und erhalte das Ergebnis der Verschiebung. //Überprüfe, ob er nach oben, unten, links und rechts verschoben werden kann. let result0: Array<any> = this.moveUp(i, matrix, antwort, schritte); let result1: Array<any> = this.moveDown(i, matrix, antwort, schritte); let result2: Array<any> = this.moveLeft(i, matrix, antwort, schritte); let result3: Array<any> = this.moveRight(i, matrix, answer, steps); wenn (Ergebnis1) { Ergebnis1 zurückgeben; } wenn (Ergebnis2) { gib Ergebnis2 zurück; } wenn (Ergebnis0) { gib Ergebnis0 zurück; } wenn (Ergebnis3) { Ergebnis3 zurückgeben; } } } gibt null zurück; } private moveRight(i: Zahl, Matrix: Array<Zahl>, Antwort: Array<beliebig>, Schritte: Array<beliebig>): Array<beliebig> { let Zeile: Zahl = i % this.mLine; lass Zeile: Zahl = Math.floor(i / this.mLine); if (line + 1 >= this.mLine) return null; //Außerhalb der Grenzen let targetIndex: number = row * this.mLine + (line + 1); if ( matrix[targetIndex] != -1) return null; //Nicht verschiebbar //Verschieben //Verschieben //Das neue Array zur Änderung kopieren let newMatrix: Array<number> = JSON.parse(JSON.stringify(matrix)); let newAnswer: Array<beliebig> = JSON.parse(JSON.stringify(answer)); //Positionen austauschen let temp: number = newMatrix[i]; neueMatrix[i] = neueMatrix[ZielIndex]; neueMatrix[ZielIndex] = temp; neueAntwort.push({ "index": i, "dic": 3 }); wenn (this.checkIsExist(newMatrix)) { gibt null zurück; } wenn (dieser.checkPass(neueMatrix)) { gib eine neue Antwort zurück; } lass Schritt: beliebig = {}; Schritt["Matrix"] = neueMatrix; Schritt["Antwort"] = neue Antwort; Schritte.drücken(Schritt); } /** *Überprüfen Sie, ob es gelöscht ist*/ private checkPass(Matrix: Array<Zahl>): boolean { wenn (Matrix[diese.mRow * diese.mLine - 1] != -1) false zurückgibt; für (lass i = 0; i < diese.mRow * diese.mLine - 1; i++) { wenn (Matrix[i] != i + 1) { gibt false zurück; } } Konsole.log(Matrix) gibt true zurück; } /** *Überprüfen Sie, ob es wiederholt wird */ private checkIsExist(Matrix): boolean { wenn (diese.mMapMatrixS[JSON.stringify(matrix)]) { gibt true zurück; } dies.mMapMatrixS[JSON.stringify(matrix)] = "1"; gibt false zurück; } 4. HinweisDie Demo zeigt eine 3*3-Anordnung, die mit einem Browser ausgeführt werden kann, aber 4*4 oder 5*5 können nicht ausgeführt werden, da es zu viele Verzweigungen gibt. Später werde ich Python-Skripte verwenden, um 4 * 4, 5 * 5 oder mehr Anordnungen zu implementieren und schließlich Informationen auf JSON-Ebene zu exportieren. Oben finden Sie eine ausführliche Erklärung zum digitalen Puzzle CocosCreator Huarongdao. Weitere Informationen zu CocosCreator Huarongdao finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detailliertes Installationstutorial für Mysql5.7.19 unter Centos7
Methode 1: <input id= "File1" type= &...
Von der Entwicklung bis zur Bereitstellung: Mache...
Inhaltsverzeichnis 1. Was ist Dekonstruktion? 2. ...
mysql-5.7.20-winx64.zipInstallationspaket ohne In...
Ein Student im zweiten Studienjahr fragte mich, w...
Ich habe mir vor Kurzem Rich Harris‘ Video „Rethi...
Ich habe mehr als eine Stunde gebraucht, um SSH i...
In diesem Artikelbeispiel wird der spezifische Co...
Inhalt 1. Container-Lebenszyklusmanagement (1) Do...
Der Editor teilt Ihnen auch die entsprechenden Pr...
Hintergrund Das Agile-Modell wird häufig verwende...
Fügen Sie dem el-form-Formular Regeln hinzu: Defi...
Vorwort Es ist ein Klischee. Hier werde ich über ...
Lösung für das Verschwinden des MySql-Dienstes au...
Hintergrund In diesem Artikel wird hauptsächlich ...