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!
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? –
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 (...)" –
@LorenzoPirondini Hast du es herausgefunden? Wenn nicht ändern UP to ERNO.UP –