Wir haben 2048 geklont und 2048 analysiert , aber warum haben wir es noch nicht gespielt? Schreiben Sie ein 555-Byte-Javascript-Snippet, um 2048 automatisch zu spielen. Das beste Ergebnis nach einer Stunde zählt (siehe unten).
Installieren:
Gehe zu 2048 und führe aus:
a = new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager);
a
ist das Objekt, um das Spiel zu steuern.
Regeln:
Nach dem Setup können Sie 555 Bytes Javascript auf der Konsole ausführen, um das Spiel zu steuern. Den Quellcode des Spiels finden Sie hier (inklusive Kommentare).
- Es dürfen nur Dinge getan werden, die für den Benutzer möglich sind:
a.move(n)
um eine Tastenaktion in eine der 4 Richtungen auszulösen.- 0: hoch, 1: rechts, 2: runter, 3: links
a.restart()
um das Spiel neu zu starten. Ein Neustart ist in der Spielmitte erlaubt.
- Informationen zum Stand des Spiels finden Sie in
a.grid.cells
. Diese Informationen sind schreibgeschützt - Das Einhängen in eine der Funktionen ist erlaubt, das Ändern ihres Verhaltens in keiner Weise (oder das Ändern anderer Daten).
- Das Bewegen ist nur einmal alle 250ms erlaubt
Beispiel
Nur ein sehr einfaches Beispiel, um damit zu beginnen. Ohne Kommentare und gibt 181 Bytes ein .
//bind into new tile function and change m(ove) variable when a tile was moved
b = a.addRandomTile.bind(a);
m = !1;
a.addRandomTile = function() { m = !0; b(); };
//number of move fails
mfs = 0;
setInterval(function() {
//set global moved tracking variable to false
m = !1;
a.move(Math.floor(4 * Math.random()));
m || mfs++;
//restart after 10 moves failed
10 < mfs && (mfs = 0, a.restart());
}, 250);
Wertung und Ergebnisse
Ich werde die Schnipsel eine Stunde lang durchgehen lassen und die beste Punktzahl wird zählen. In der Tat gibt es eine Chance, dass das randombot
Obige auf diese Weise gewinnt, aber 1 Stunde sollte ausreichen, um es zu schlagen:
- König
Bottomstacker VII
: 9912 - Königin
Bottomstacker V
: 9216 - Prince
Bottomstacker II
: 7520 - Lord
Bottom and Right
: 6308 - Bauer
Randombot
: 1413 Disqualifiziert für zwei Züge in einem Intervall (innerhalb von 250 ms)Bottomstacker IV
: 12320
FAQ
- Warum ist diese Herausforderung nicht sprachunabhängig?
- Aus dem einfachen Grund, dass es so mehr Spaß macht. Es ist einfach viel faszinierender, ein Spiel selbst grafisch zu sehen, als wenn eine Konsole Zahlen ausspuckt. Selbst wenn Sie kein Javascript kennen, sollten Sie in der Lage sein, sich dieser Herausforderung anzuschließen, da es nicht in erster Linie um Sprachfunktionen geht (verwenden Sie einfach dieses Tool, um den Code zu minimieren).
quelle
...best score after an hour will count...
Warum nur eine Stunde?Antworten:
Ich kann kein Javascript codieren, daher habe ich deine Antwort gestohlen.
Es benutzt die Strategie, die ich auch benutze.
EDIT: Schön, es hat deine Punktzahl nach ungefähr 5 Minuten auf meiner Maschine übertroffen: D
BEARBEITEN: Vergessen, zweimal anstatt nur einmal nach unten zu gehen. Dies ist der Code, den Sie verwenden sollten:
Es gibt auch einen Fehler, der neu gestartet wird, wenn er nicht benötigt wird, aber ich bin nicht sicher, wie ich das beheben soll. BEARBEITEN: Es hat derzeit einen Highscore von 3116 (nach 3 Minuten). Ich denke, es ist sicher zu sagen, dass dieser Algorithmus besser ist, als nur zufällige Züge zu machen.
EDIT Neuere Version:
BEARBEITEN: Eine weitere neue Version, die sich direkt nach dem Hochfahren nach unten bewegt.
EDIT: Update: Es hat meinen persönlichen Rekord mit einer verrückten Punktzahl von 12596 gebrochen.
EDIT: Hey, ich bin Bottomstacker: D Auch:
(Eigentlich keine Änderung, nur komprimiert.)
5. Mal ist ein Charme? Nicht sicher. Sowieso:
und:
Eine weitere neue Version:
und:
(Ich hoffe, es ist kein allzu großes Problem, dass dies hinter dem Gameover-Bildschirm weitergeht. Ich denke, Sie könnten einen Ort hinzufügen
a.over=0
, der oft ausgeführt wird. Ich werde es eines Tages herausfinden.)BEARBEITEN (nochmal): Ich habe den Standard-Gameover-Weg verlassen und bin zu der alten Art zurückgekehrt, Dinge zu tun. Ich teste jetzt einen Zusatz, der immer zusammengeführt wird, wenn 2 Kacheln von 16 oder mehr zusammenkommen:
quelle
mfs=0
hineinaddRandomTile
, auf diese Weise wird die Zählung nach einem erfolgreichen Zug neu gestartet.Rechter und unterer Bot: 345 Bytes
Kurze Version
Lange Version
In Worten
Nach unten und dann nach rechts bewegen, wenn Sie sich nicht bewegen können, nach oben bewegen (oder wenn Sie sich nicht nach links bewegen können), wenn sowohl die obere rechte als auch die untere rechte Ecke gefüllt sind, nach rechts bewegen, andernfalls von vorne beginnen.
Aktueller Highscore
Meine beste Punktzahl war 7668, aber das war viel schneller als
t=250
(und damit indirekt länger als eine Stunde).quelle
Irgendwie bin ich heute Morgen auf diesen älteren Wettbewerb gestoßen, und da ich 2048 liebe, liebe ich KI, und JS ist eine der wenigen Sprachen, die ich derzeit gut kenne, ich dachte, ich würde es versuchen.
GreedyBot (
607536 Bytes)Kurzfassung:
Lange Version (veraltet):
Die längere Version wurde (abgesehen vom Verkleinern der Variablennamen) überhaupt nicht gespielt, so dass sie einiges gekürzt werden konnte, während sie noch lesbar war. Die kürzere Version wurde mit dem Closure Compiler erstellt (danke für den Link!), Der bei 650 endete. Mit einigen benutzerdefinierten Modifikationen meinerseits konnte ich weitere
43114 Bits abschneiden .Grundsätzlich sucht es im Raster nach möglichen Zügen und addiert seinen Wert, wann immer es einen findet, entweder zur horizontalen oder zur vertikalen Summe. Nach dem Durchsuchen jeder möglichen Bewegung wird bestimmt, in welche Richtung sie sich bewegen soll, basierend darauf, ob die H- oder V-Summe höher ist und in welche Richtungen sie bereits versucht hat. Rechts und Runter sind die erste Wahl.
Wenn ich zurückblicke, wird mir klar, dass der erste Versuch, die Kacheln in diese Richtung zu schieben, garantiert erfolgreich ist, wenn eine der beiden Summen ungleich Null ist. Vielleicht könnte ich den bewegungsentscheidenden Abschnitt zum Ende hin auf dieser Grundlage vereinfachen.
Ich habe dieses Programm für eine Stunde laufen lassen und am Ende einen Highscore von
6080
. In einem der Testläufe (Pre-Minification) erreichte es jedoch eine hohe Punktzahl von6492
nur 128 Punkten hinter meiner persönlichen Bestleistung6620
. Ihre Logik könnte erheblich verbessert werden, wenn sie gelegentlich nach links verschoben wird, da sich die Zahlen in der Regel wie folgt häufen:( BEARBEITEN: Ich habe es eine Weile laufen lassen und es hat einige
7532
Punkte geschafft. Verdammt, mein Programm ist schlauer als ich ....)Noch ein interessanter Leckerbissen: Bei einem meiner fehlerhaften Versuche, etwas Nutzbares zu erschaffen, kam es irgendwie dazu, dass jedes Mal , wenn sich zwei Kacheln in derselben Zeile oder Spalte befanden, sie kombiniert wurden. Dies führte zu interessanten Entwicklungen, da die zufälligen 2er oder 4er immer wieder mit dem höchsten Plättchen kombiniert wurden und es jedes Mal verdoppelten. Einmal gelang es mir irgendwie, in 15 Sekunden über 11.000 Punkte zu erzielen, bevor ich es abschaltete ... XD
Verbesserungsvorschläge sind herzlich willkommen!
quelle
Scheibenwischer: 454 Bytes
Einfach nach rechts, oben, links, oben ... wiederholen (genau wie die Scheibenwischer an einem Auto), es sei denn, es klemmt. Wenn es eingeklemmt ist, versucht es, die Scheibenwischer auszuschalten und wieder einzuschalten. Die höchste Punktzahl, die ich in einer Stunde erreicht habe, war 12.156 - Die meisten Punkte liegen jedoch irgendwo zwischen 3.000 und 7.000.
Nach jedem Versuch wird die Punktzahl in die Konsole ausgegeben.
quelle
UpAndLeftBot
Wie aus dem Titel hervorgeht, geht es nach oben und links, indem man David Mulders Arbeit stiehlt und einige Zahlen austauscht (ich weiß nicht, wie es mit Javascript aussieht, also ist das das Beste, was ich tun kann).
quelle