2016-04-25 4 views
1

Ich suchte nach einigen Leuten, die Chrome Cube Explorer http://iamthecu.be/ verwendet haben. Der grundlegende Quellcode, der auf Rubiks offizieller Website gefunden wurde, lautet https://rubiks.com/chrome-cube-lab. Ich möchte einen automatischen Solver für diese Plattform programmieren, aber ich bin mir nicht sicher, wie ich den Code, den ich geschrieben habe, zum Laufen bringen kann.Mit dem Chrome Cube Explorer

Hier ist die Datei, in die ich meinen Code legte, bevor ich etwas änderte. Der wichtigste Punkt des Schwerpunktes ist der Block Kommentar und die ERNO.Solver = function() {... Sektionen:

/* 


    SOLVERS 

    Our Cube has its own animation loop conveniently called Cube.loop(). 
    If Cube.isSolving === true then within that loop Cube will call 
    window.solver.consider(cube). This means when you create your own 
    Solver instance you have to set window.solver equal to your instance. 

    Solver.consider() will do some very basic checking and if all's well 
    will pass the Cube instance to Solver.logic() which is the function that 
    you need to write yourself. 

    Your logic() should return false is the cube is solved or if something's 
    gone horribly wrong. This will set Cube.isSolving = false and stop the 
    solver from being called within the Cube's animation loop. 

    Your logic() should return true if an incremental improvement has been 
    made and the logic() should be run again in the next loop; For example, 
    run again after a twist queue completes. 

    -- 

    @author Mark Lundin - http://www.mark-lundin.com 
    @author Stewart Smith 


*/ 








ERNO.Solver = function(){ 


    // When you create your own Solver this is the only function you need to build yourself. 
    // Having said that, it will probably be the most intense function like ... ever! 
    // Check out my example in /scripts/solvers/stewart.js to see how you might go about it. 

    this.logic = function(cube){ return false };; 
} 




// This is the method called within Cube.loop() when Cube.isSolving === true. 
// It will call Solver.logic() which is the function you need to fill in. 

ERNO.Solver.prototype.consider = function(cube){ 


    // Was our solver passed a valid Cube? 
    // Kind of important, eh? 

    if(cube === undefined){ 

     console.warn('A cube [Cube] argument must be specified for Solver.consider().'); 
     return false; 
    } 
    else if(cube instanceof ERNO.Cube === false){ 

     console.warn('The cube argument provided is not a valid Cube.'); 
     return false; 
    } 


    // If we're solving we should really make certain we aren't shuffling! 
    // Otherwise our logic will never actually run. 
    // The hook for this is in Cube.loop() so look there to see what's up. 

    cube.isShuffling = false; 


    // If the cube is already solved then our job is done before it started. 
    // If not, we need to try solving it using our current solve method. 

    if(cube.isSolved()){ 

     ERNO.Solver.prototype.explain('I’ve found that the cube is already solved.'); 
     return false; 
    } 
    else return this.logic(cube); 
}; 




// We should always hit at what the Solver wants to do next 
// so we can hault auto-solving and give the user a chance to 
// figure out the next move for his/herself. 

ERNO.Solver.prototype.hint = function(text){ 

    console.log(

     '%c'+ text +'%c\n', 
     'background-color: #EEE; color: #333', '' 
    ); 
}; 


// If hinting is text displayed *before* a move is made 
// then explaining is text displayed *after* a move is made. 

ERNO.Solver.prototype.explain = function(text){ 

    console.log(

     'Solver says: %c '+ text +' %c\n', 
     'color: #080', '' 
    ); 
}; 

ich die ERNO.Solver = function(){... modifizierte unten wie der Code aussehen, wie der Kommentar vorgeschlagen und wie es in der Beispieldatei geschrieben wird, stewart.js, und ich Geben Sie einen Testcode ein, um ihn auszuführen.

window.solver = new Solver(); 
solver.logic = function(cube){... 

Aber ohne Erfolg, wenn ich die Methode cube.solve() oder das Kennzeichen cube.isSolving == true, meine Funktion läuft nicht laufen scheinen. Die gleiche Geschichte ist wahr, wenn ich das stewart.js Skript anstelle meines eigenen ersetze. Es scheint, dass der Konstruktor window.solver = new Solver() fehlschlägt, weil Solver() nicht definiert ist, aber ich bin nicht sicher, wo es definiert werden könnte. Es ist kein Mitglied von cube, window oder ERNO, die alle Objekte in dieser Umgebung sind.

Ich konnte nicht wirklich eine gute Quelle finden, wie ich das einrichten sollte.

Wenn jemand weiß, wie man dieses Werkzeug benutzt oder eine gute Ressource hat, von der ich lernen könnte, wäre das großartig. Vielen Dank im Voraus!

Antwort

1

Ich fand es heraus, nachdem ich einmal aufgegeben habe. Es stellte sich heraus, dass ich nicht verstand, wie die ERNO-Klasse aufgebaut war oder wie sie in das Gesamtbild passte. Damit die integrierten Funktionen die Funktion Solver() aufrufen können, muss eine Instanz dieses Objekts erstellt und anschließend an das Objekt window angehängt werden. danach läuft der Code perfekt aus der Box.

definieren Solver():

ERNO.Solver = function(){... 

eine Instanz von Solver() erstellen und es dem window Objekt Befestigung:

mySolver = new ERNO.Solver() 
window.solver = mySolver 

Dann wird durch cube.solve() Aufruf, die cube.isSolving zu true setzt, die cube.loop() Funktion wird Rufen Sie window.solver(), die den Code ausgeführt in der ERNO.Solver() Funktion d ausgeführt wird Definition !! Yay!

+0

Hallo, ich versuche, das gleiche Ding ohne Erfolg bisher herauszufinden. Wie ich verstanden habe, sollte die Funktion solver.logic, die auf stweart.js gefunden wird, die Funktion ERNO.Solver ersetzen, die in solvers.js gefunden wird. dann sollte im Hauptprozess ein neuer Löser erstellt und an das Fensterobjekt angefügt werden mit window.solver = new Solver(); . Von dort kann die Methode cube.solve() aufgerufen werden, aber es scheint nicht zu funktionieren, fehlt mir etwas? –

+0

Sorry für den doppelten Kommentar, ich sollte erwähnen, dass die Solver-Funktion scheint zu laufen, aber ich habe den folgenden Fehler: "solvers.js Zeile 90 Uncaught ReferenceError: UP ist nicht definiert (...)" –

+0

@LorenzoPirondini Hast du es herausgefunden? Wenn nicht ändern UP to ERNO.UP –

Verwandte Themen