Autor Beitrag
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 31.03.14 13:16 
Hallo,
in der Revision 6 habe ich wichtige Änderungen durchgeführt.
Erstens habe ich die überflüssige, zweite Version entfernt; und weiterhin ...
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 31.03.14 14:39 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
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.

In der Version die Du als "Orginal" bezeichnest musst Du das aber schon ändern ;-) sonst ist es ja nicht das Orginal.

Wie hast Du das mit den vielen Fehlern :autsch: drinne überhaupt verstehen können?

Moderiert von user profile iconTh69: Quote korrigiert

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mo 31.03.14 14:50 
Hallo,

ich habe mal links1Click automatisiert und zufällige Richtung nehmen lassen.
ausblenden 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:
ausblenden 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];
//dann eben
                    inc(feld[j,i]);

damit wäre auch:
 case feld[i+1,j+1of
          2 : ziel.brush.color:=$00ffd0d0;
          4 : ziel.brush.color:=$00ffa0a0;
..

       2048 : ziel.brush.color:=$00a0ffff
nur noch
 case feld[i+1,j+1of
          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]];
// Man könnte auch die kleinen Ausgabequadrate vorher erstellen, da jeder wert auch seine spezifische Farbe hat.
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 31.03.14 16:53 
Hallo,
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
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". :wink:
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Wie hast Du das mit den vielen Fehlern :autsch: 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.

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
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.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 31.03.14 19:26 
@user profile iconMathematiker : Nene, ich meinte meinen verworrenen Satz. Passiert mir öfter in letzter Zeit, wohl weil ich kaum noch zum deutsch reden komme.
@user profile iconHorst_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 17:25, insgesamt 1-mal bearbeitet
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 31.03.14 22:25 
Hallo,
auf Grund der Ideen von user profile iconHorst_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. :cry:

Beste Grüße
Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 01.04.14 10: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. :motz:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 01.04.14 13: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.
ausblenden 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..3of integer;
...
//Maximum kann man währenddessen prüfen, schon wieder 1 ns gespart
     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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//proc Auswertung. Ausgaben ans Ende gesetzt
    label2.caption:=inttostr(punkte);
    If testabbruch then
    begin
      paintbox1paint(sender);application.processmessages;
      sleep(10);
    end;

end;...

// in Button2Click
     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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 01.04.14 13:58 
Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
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 15:11, insgesamt 1-mal bearbeitet
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 01.04.14 14: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 01.04.14 21: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18
Erhaltene Danke: 11


Delphi 7, Turbo Delphi
BeitragVerfasst: Mi 02.04.14 07: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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Do 10.04.14 20:57 
Servicelink ;) Mathematik und Strategie hinter 2048.

www.youtube.com/watc...amp;feature=youtu.be

Für diesen Beitrag haben gedankt: Mathematiker
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Sa 19.04.14 15: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.