Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 31.03.14 12:16
Hallo,
in der Revision 6 habe ich wichtige Änderungen durchgeführt.
Erstens habe ich die überflüssige, zweite Version entfernt; und weiterhin ...
Sinspin hat folgendes geschrieben : | Des weiteren werden zwei Teile die bei einem Zug aufeinander treffen vereint, falls sie beim Start des Zuges noch nicht vereint waren. |
Das funktioniert nun auch.
Sinspin hat folgendes geschrieben : | Dort werden keine neuen Teile generiert wenn kein nach den drücken einer Taste sich die Position keines Teiles ändert. |
Habe ich erst einmal nicht geändert, da ich meine Variante besser finde.
Beste Grüße
Mathematiker
|
|
Sinspin
Beiträge: 1321
Erhaltene Danke: 117
Win 10
RIO, CE, Lazarus
|
Verfasst: Mo 31.03.14 13:39
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Mo 31.03.14 13:50
Hallo,
ich habe mal links1Click automatisiert und zufällige Richtung nehmen lassen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure Tf2048.links1Click(Sender: TObject); begin repeat richtung:=random(4); auswertung(sender); until ende or geschafft; end; |
Ab 6x6 Feldern kommt er auf zügig auf 2048 ( 2552 Punkte bis dahin )
Die Punkteanzeige würde ich durch Zugzahl ersetzen, weil es fast das gleiche ist.
Denn im Schnitt sind es pro Zug ( 0.9*2+0.1*4= ) 2.2 Punkte, die hinzukommen.
Ich weiß nicht, wie im Original, die Punkte berechnet werden, und will mir jetzt auch nicht die .js Datei ansehen, aber da erscheinen andere Zahlen.
Vielleicht sollte man hohe erreichte Potenzen belohnen.Momentan sind zwei 8er soviel wie ein 16er.
Nähme man 3^Zweierpotenz würde sich das Bild verschieben. 2* 3^3 = 54< 3^4 = 81.
Natürlich ginge auch das leichtere 4^Zweierpotenz.
Man könnte auch aus das 2* verzichten und einfach nur um 1 erhöhen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| feld[j,i]:=2*feld[j,i]; inc(feld[j,i]);
damit wäre auch: case feld[i+1,j+1] of 2 : ziel.brush.color:=$00ffd0d0; 4 : ziel.brush.color:=$00ffa0a0; ..
2048 : ziel.brush.color:=$00a0ffff; nur noch case feld[i+1,j+1] of 1 : ziel.brush.color:=$00ffd0d0; 2 : ziel.brush.color:=$00ffa0a0; 3 : ziel.brush.color:=$00ff8080; .. 11 : ziel.brush.color:=$00a0ffff; Oder ziel.brush.color := Colorliste[feld[i+1,j+1]]; AusgabeBmp := AusgabeBmpliste[feld[i+1,j+1]]; |
Man merkt Lazarus mach die Grafikausgabe bei mir etwas langsam
Gruß Horst
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 31.03.14 15:53
Hallo,
Sinspin hat folgendes geschrieben : | In der Version die Du als "Orginal" bezeichnest musst Du das aber schon ändern sonst ist es ja nicht das Orginal. |
Richtig. Deshalb steht da auch nichts mehr von "Original" im Formular. Es ist einfach "Spiel 2048".
Sinspin hat folgendes geschrieben : | Wie hast Du das mit den vielen Fehlern drinne überhaupt verstehen können? |
So viele Fehler hatte ich doch gar nicht oder meinst Du den Quelltext des Originals.
Auch wenn Du es vielleicht nicht glaubst, habe ich ihn mir gar nicht angesehen. Ich versuche immer meine eigene Lösung zu finden. Deshalb hatte ich ja auch die Strategie des "Originals" nicht vollkommen richtig umgesetzt.
Horst_H hat folgendes geschrieben : | ich habe mal links1Click automatisiert und zufällige Richtung nehmen lassen.
... Ab 6x6 Feldern kommt er auf zügig auf 2048 ( 2552 Punkte bis dahin ) |
Ist sehr interessant, versuche ich auch gleich einmal.
Horst_H hat folgendes geschrieben : | Vielleicht sollte man hohe erreichte Potenzen belohnen. |
Ist auch sehr überdenkenswert.
Ebenso habe ich schon überlegt, ob man bei 5x5-Feld schon 4096, beim 6x6-Feld 9192 usw... als Ziel setzt. Dann müssten die neu generierten Teile aber auch höhere Wert haben.
Beste Grüße
Mathematiker
|
|
Sinspin
Beiträge: 1321
Erhaltene Danke: 117
Win 10
RIO, CE, Lazarus
|
Verfasst: Mo 31.03.14 18:26
@ Mathematiker : Nene, ich meinte meinen verworrenen Satz. Passiert mir öfter in letzter Zeit, wohl weil ich kaum noch zum deutsch reden komme.
@ Horst_H : Die Punktevergabe im Orginal scheint eigentlich ganz simpel (habe den Quelltext nicht angesehen). Es wird einfach der Betrag des Teils das man mit einem anderen zusammenschiebt aufsummiert. Also zum Beispiel bei der Zugfolge : Teil+Teil (Summe der Punkte) 2+2 (4); 2+2 (8 ); 4+4 (16); 2+2 (20); 2+2 (24); 4+4 (32); 8+8 (50);
€: wiedermal Tippfehler behoben.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Zuletzt bearbeitet von Sinspin am Mi 02.04.14 16:25, insgesamt 1-mal bearbeitet
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 31.03.14 21:25
Hallo,
auf Grund der Ideen von Horst_H habe ich versucht, in der Revision 7 eine noch sehr einfache Routine (Selbsttest) einzubauen, die automatisch nach einer Lösung sucht.
Die Idee ist im Moment noch sehr einfach. Das Programm führt immer den Zug aus, bei dem möglichst viele Steine zusammengeschoben werden können. Gibt es keine Möglichkeit, dann wird zufällig gezogen.
Ab einer Spielfeldgröße 6x6 wird nahezu immer eine Lösung gefunden, bei 5x5 nur selten, bei 4x4 nie.
Das Suchverfahren ist also schlecht.
Die Hauptschwierigkeit ist, dass man ja nicht vorhersagen kann, wo ein neuer Stein erzeugt wird und welcher (2 oder 4). Außerdem ist eine "Suchtiefe" (die man so gar nicht nennen dürfte) von 1 viel zu wenig.
Aber vielleicht fällt mir ja noch etwas ein.
Übrigens: Wenn Ihr den Selbsttest startet, so müsst Ihr warten, bis er fertig wird. Ich habe noch keine Abbruchmöglichkeit eingebaut.
Beste Grüße
Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Di 01.04.14 09:15
Hallo,
in der Revision 8 habe ich den Selbsttest, d.h. der Computer sucht selbst nach einer Lösung, deutlich verändert.
Dabei werden jeweils 3 Züge im voraus getestet und der scheinbar optimalste ausgewählt. Optimal ist dabei ein Zug, wenn möglichst viele Felder leer werden.
Gibt es einen solchen Zug nicht, wird zufällig gezogen.
Die Hauptschwierigkeit besteht darin, dass man die neu generierten Felder natürlich nicht vorhersagen kann. Da sehe ich im Moment auch keine Lösungsmöglichkeit.
Zumindest löst das Programm nun 5x5-Felder "fast" immer, d.h. die 2048 wird erreicht. "Fast" immer sage ich, da bei meinen Testläufen immer ein Ergebnis kam, ich es aber nicht garantieren kann.
Merkwürdig finde ich, dass ich bei dem Standardfeld 4x4 immer noch nicht in die Nähe der 2048 komme. Die beste Gesamtpunktzahl war bisher 1802.
Beste Grüße
Mathematiker
Nachtrag: Ich habe jetzt einmal 4 Züge Vorhersage (Revision 9) probiert. Durch den Zufall bei der Erzeugung neuer Steine wird die Streuung der erreichten Gesamtpunktzahlen deutlich größer. Nun bekomme ich bei einem 4x4-Feld auch wieder Werte von nur 500.
Nun gut. Der maximale Wert waren jetzt 2032 Gesamtpunkte. Ich denke aber, mit der Erhöhung der Zugtiefe wird es wohl nichts. Irgendwie brauche ich eine neue Idee.
Wenigstens einmal sollte ich doch die 2048 auf einem Stein erreichen.
Nachtrag 2: Geschafft! 4x4-Feld mit einem 2048-Stein, bei 4 Züge Vorausberechnung.
Nachtrag 3: In Revision 10 ist der Suchalgorithmus verbessert. Damit wird das 4x4-Feld etwas häufiger, allerdings noch lange nicht immer gelöst.
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Horst_H
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 01.04.14 12:40
Hallo,
jau, es hat geklappt!
Ich habe auf 5 Züge umgebaut ( Was für ein Geniestreich ).
2048 mit Punktestand 2148(jetzt sogar 2098 ) erreicht.
Je weniger, desto besser.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure Tf2048.Button2Click(Sender: TObject); var arichtung:array[0..3,0..3,0..3,0..3,0..3] of integer; ... maximum:=0; for i:=0 to 3 do for j:=0 to 3 do for m:=0 to 3 do for n:=0 to 3 do for o:=0 to 3 do begin arichtung[i,j,m,n,o]:=zaehlen(i,j,m,n,o); if arichtung[i,j,m,n,o]>maximum then begin maximum:=arichtung[i,j,m,n,o]; neuerichtung:=i; end; end; |
Noch eine kleine Anmerkung.Warum zweimal der Aufruf paintBox1paint in Auswertung.
Ich wollte testabbruch benutzen, um die Ausgabe dort zu unterdrücken und alle 64 Testzüge eine zu machen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| label2.caption:=inttostr(punkte); If testabbruch then begin paintbox1paint(sender);application.processmessages; sleep(10); end;
end;...
if schritte AND 31 = 0 then begin paintbox1paint(sender);application.processmessages; sleep(10); end; |
Häufig sind die 2048er immer noch nicht.Aber offensichtlich machbar.
Gruß Horst
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Di 01.04.14 12:58
Hallo,
Horst_H hat folgendes geschrieben : | Ich habe auf 5 Züge umgebaut ( Was für ein Geniestreich ).
2048 mit Punktestand 2148(jetzt sogar 2098 ) erreicht.
Je weniger, desto besser. |
Das ist wieder ein Schritt. Die Lösungsquote für 4x4 steigt langsam an. Ich hatte gerade eben sogar 2092 als Gesamtpunktzahl.
Ich denke, dass wir nicht mehr viel herausholen können. Der Zufallsanteil ist zu groß.
In die Revision 11 habe ich außerdem ein Markierungsfeld eingebaut mit dem man dafür sorgt, dass neu erzeugte Felder nur eine "2" und keine "4" tragen.
Nach meinem ersten Gefühl bringt das aber nichts.
Horst_H hat folgendes geschrieben : | Noch eine kleine Anmerkung.Warum zweimal der Aufruf paintBox1paint in Auswertung. |
Danke. Ich weiß auch nicht, warum ich das drin hatte. Mit nur einem paintboxpaint läuft auch die automatische Suche deutlich schneller.
Beste Grüße
Mathematiker
Nachtrag: Ich habe das Programm 100 mal nach der 4x4-Lösung suchen lassen. 31 mal wurde eine Lösung gefunden.
Zuletzt bearbeitet von Mathematiker am Di 01.04.14 14:11, insgesamt 1-mal bearbeitet
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 01.04.14 13:06
Hallo,
Der Frust vom 29.3ten ist jetzt wohl überwunden
Zitat: | Aus Frust habe ich es auch versucht, mit der gleichen Strategie. Und wie zu erwarten, wird es nichts. Ich bekam nicht mal eine 1024.
Was ist das bloß für ein "böses" Spiel? Kostet Zeit und frustriert! |
Gruß Horst
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Di 01.04.14 20:47
Hallo,
so jetzt folgt schon die 12.Revision.
Ich habe mich gefragt, warum das Spielfeld quadratisch sein muss. Also habe ich es geändert.
Breite und Höhe des Spielfeldes können jetzt getrennt verändert werden.
Während das Programm bei 4x4 nicht immer selbständig eine Lösung findet, sieht es bei 3x6 ziemlich gut aus. D.h., 16 Felder sind für den Suchalgorithmus nicht immer ausreichend. 18 genügen aber.
Beste Grüße
Mathematiker
PS: Jetzt ist erst einmal Schluss mit "2048". Ich träume ja schon fast davon.
|
|
Gummibär
Beiträge: 18
Erhaltene Danke: 11
Delphi 7, Turbo Delphi
|
Verfasst: Mi 02.04.14 06:42
Ganz nebenbei:
Weil hier immer von "Original" gesprochen wird: Auch 2048 scheint nur der Klon eines Klones zu sein.
Auf techcruch gibt es einen kleinen Artikel dazu.
Schon faszinierend, wie sowas manchmal läuft.
Gruß und danke für das Spielchen
Michael
Für diesen Beitrag haben gedankt: Mathematiker, Nersgatt
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 10.04.14 19:57
Servicelink Mathematik und Strategie hinter 2048.
www.youtube.com/watc...amp;feature=youtu.be
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Sa 19.04.14 14:56
Hallo,
viel Neues brachte das Video nicht, Dr. Who statt A..K ist ja nur eine andere Variante.
Auch sieht man bei dem Löser vom [ueser]mathematiker[/user], dass "in eine Ecke" gespielt wird.Aber das ergibt sich automatisch, wenn man zu einander senkrechte Bewegungen auf einander folgen lässt. ( v oder ^ gefolgt von > oder < oder umgekehrt.Wenn man immer rechts/ oben drückt ist auch wirklich alles rechts oben
Aber man sollte mal die 8192 probieren.
Selbst in der neuen c't 10/2014 S.182 steht schon was dazu drin.
Gruß Horst
P.S
Die Art und Weise, die Position des neuen Teiles durch Zufall zu bestimmen gefällt mir gar nicht, ist aber wahrscheinlich nur eine marginale Bremse, wenn 50% der Felder frei, denn die Verwaltung der freien Plätze ist wohl auch nicht ohne.
|
|
|