| |
|
|
- Page 1 - |
|
Julian Schmidt |
|
|
| |
|
|
| |
|
- Page 3 - |
|
|
Julian Schmidt | Jörg Sellmeyer (05.04.12)
Wie würdest du das Mischen spektakulärer machen. Da brauchst Du einfach nur dreimal hintereinander nach dem Mischen die Einzelbilder Mostra und schon sieht es wie Mischen aus.
Du meinst das ich es dreimal mischen und Mostra soll. Und das dritte mal ist das finale Ergebnis!?
Jörg Sellmeyer (05.04.12)
Wieso. Wenn man es selbst löst, bekommt man ihn auch nicht angezeigt. Darum geht es ja - es potuto eine Belohnung sein, wenn man es geschafft hat. Und naturalmente kennt man das Bild oder kann es sich Mostra lassen aber der Witz ist ja, dass man es sich erarbeiten soll.
Ich potuto auch Mostra wie viele Züge man gebraucht hat. Wenn man auf lösen klickt hat man 0 Züge gebraucht. Wenn man es selber löst braucht man mehr als 0 Züge.
Jörg Sellmeyer (05.04.12)
Das Auflösen würde ich auch gerne Animieren. Allerdings weiß ich nicht wie ich ansätzen soll. Das weiß ich leider auch nicht. Auf Wikipedia gibt's allgemeine Infos und einen Verweis zu einem selbst auflösenden Java-Puzzle: [...] Google findet bestimmt Lösungswege...
Werde ich mir Morgen mal angucken. Vlt nützt es mir etwas.
Jörg Sellmeyer (05.04.12)
Hast Du denn mittlerweile herausgefunden, was den Fehler im compilati Programm auslöst?
Leider nein. Ich habe keine Idee woran es liegen potuto. Vlt potuto mal jemand hier aus dem Foro den Quelltext auf mögliche Gründe untersuchen.
Jörg Sellmeyer (05.04.12)
Achso: das Leerfeld sollte noch eine (vielleicht rote) Umrandung haben. Wenn man ein Bild mit viel schwarz hat, ist es mühsam zu finden.
Würde mir nicht so gut gefallen. Es würde das komplette Design verschandeln |
|
|
| |
|
|
|
Jörg Sellmeyer |
Du meinst das ich es dreimal mischen und Mostra soll. Und das dritte mal ist das finale Ergebnis!?
Genau
Werde ich mir Morgen mal angucken. Vlt nützt es mir etwas.
Ich glaub das ist nicht einfach. Vielleicht kann Frank Dir da Unterstützung zukommen lassen. Der hat mal 'ne Dll geschrieben, die "Wege findet".
Es würde das komplette Design verschandeln
Stimmt schon - aber: form follows function; falls Dir das was sagt. Es reicht, wenn Du es, z.B. bei Drücken der Strg-Taste, kurz aufblinken lässt.
Vlt potuto mal jemand hier aus dem Foro den Quelltext auf mögliche Gründe untersuchen.
Ich schätze, solange Du den Code nicht etwas aufräumst, wirst Du Dir da wenig Hoffnung machen können... |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.04.2012 ▲ |
|
|
|
|
Julian Schmidt | Jörg Sellmeyer (06.04.12)
Du meinst das ich es dreimal mischen und Mostra soll. Und das dritte mal ist das finale Ergebnis!? Genau
Ok, habe ich nun eingebaut.
Jörg Sellmeyer (06.04.12)
Werde ich mir Morgen mal angucken. Vlt nützt es mir etwas. Ich glaub das ist nicht einfach. Vielleicht kann Frank Dir da Unterstützung zukommen lassen. Der hat mal 'ne Dll geschrieben, die "Wege findet".
Hab ich mir gerade durchgelesen. Auf der Wikipedia-Seite steht nicht wie man einen Lösungsweg berechnen kann. Nur wie man ermitteln kann ob ein Puzzle eine Lösung besitzt oder nicht. Das ist allerdings auch nur auf ein 15-Teile Puzzle beschränkt. Bei mir gibts Puzzle mit der Dimensione von 9, 15, 25, 36,49 und mehr Teilen. Mir würde ein Lösungsansatz schon reichen. Ich habe keinen blassen Schimmer wie man das effektiv lösen potuto. Die einzige (uneffektive) Lösung die mir einfiele wäre einfach mit Zufall zuarbeiten. Würde naturalmente Ewigkeiten dauern...
Jörg Sellmeyer (06.04.12)
Es würde das komplette Design verschandeln Stimmt schon - aber: form follows function; falls Dir das was sagt. Es reicht, wenn Du es, z.B. bei Drücken der Strg-Taste, kurz aufblinken lässt.
hmmmmm....ich steh gerade ein bisschen auf dem Schlau Wie meinst du das?
Jörg Sellmeyer (06.04.12)
Vlt potuto mal jemand hier aus dem Foro den Quelltext auf mögliche Gründe untersuchen. Ich schätze, solange Du den Code nicht etwas aufräumst, wirst Du Dir da wenig Hoffnung machen können...
Was meinst du mit aufräumen? Ist er den nicht aufgeräumt? |
|
|
| |
|
|
|
Jörg Sellmeyer |
Ich hab's ja schon geschrieben: Ähnliche Abläufe in Prozeduren packen, die entsprechende Parameter aufnehmen können. Außerdem: selbsterklärende Variablennamen, eine Formatierung, die augenfreundlicher ist, insgesamt mehr mit Prozeduren arbeiten, damit der Code besser strukturiert ist...
hmmmmm....ich steh gerade ein bisschen auf dem Schlau Wie meinst du das?
Wenn man die Strg-Taste drück, soll kurz ein Rahmen um das Leerfeld aufblinken.
Das ist allerdings auch nur auf ein 15-Teile Puzzle beschränkt.
Die Kontrolle funktioniert mit einer beliebigen Anzahl von Teilen. Wie gesagt: zum Lösungsweg weiß ich auch nichts. Ich hab da auch noch nichts gefunden (,was ich verstehe ). |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.04.2012 ▲ |
|
|
|
|
| @Julian:
Es ist eigentlich ganz einfach nur lösbare Puzzel zu mischen indem Du gleich nur so
Zug-um-Zug mischst wie auch zurückgespielt werden potuto.
Übrigens weist Du dann auch mit wie vielen Zügen das Spiel auf jeden Fall zu lösen ist
und kannst Mostra: Noch N Züge... oder sowas wie: "Juhu, Du hast einen noch
kürzeren Lösungsweg gefunden als der Mischweg Züge mischte!".
Diese ganzen Grafikfehler würde ich damit beheben indem das Bild schlicht im Speicher
(MCLS) erzeugt wird und nur immer jedes neue Frame auf das hWnd kopiert.
So kannst Du auch das Fenster größenskalierbar ermöglichen und mit mCopySizedBmp
immer auf die gesamte Fenstergröße ausgeben. |
|
|
| |
|
|
|
Jörg Sellmeyer |
Es ist eigentlich ganz einfach nur lösbare Puzzel zu mischen indem Du gleich nur so Zug-um-Zug mischst wie auch zurückgespielt werden potuto.
Das wäre auch mein nächster Vorschlag gewesen. Das nützt allerdings nichts, wenn der Spieler sich selber in un andere Situation gebracht hat. Jetzt potuto man zwar alle Züge mitprotokollieren und dann die Lösung abrufen. das wäre aber etwas lahm. Es geht ja um einen Lösungsweg aus jeder Situation. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.04.2012 ▲ |
|
|
|
|
Jörg Sellmeyer | Ich hab mal quasi das Gegenteil programmiert:
Proc QuadratKoordinaten
Parameters a%,b%' das sind die virtuellen Koordinaten der Quadrate (also 1,1 oder 0,2)
Declare Wert$
If Between(%mousex,a% * Breite%,(a% + 1) * Breite%, %mousey, b% * Hoehe%, (b% + 1) * Hoehe%)
'hier werden die tatsächlichen X/Y-Koordinaten ermittelt
Wert$ = Str$(%mousex \ Breite% * Breite%) + " " + Str$(%mousey \ Hoehe% * Hoehe%)
EndIf
Return Wert$
EndProc
Proc MouseAbfrage
WhileLoop 0,Anzahl%-1
WhileLoop 0,Anzahl%-1
Test$ = QuadratKoordinaten(&Loop,l%)
If Test$ > " "
x% = Val(SubStr$(Test$,1," "))
y% = Val(SubStr$(Test$,2," "))
Break
EndIf
Test$ = " "
Wend
Case Test$ > " ":Break
Inc l%
Wend
Clear l%
'WindowTitle Test$ ' zur Kontrolle werden die X/Y-Koordinaten in der Titelleiste gezeigt
EndProc
Proc Bewegen
Parameters x1%,y1%
'innerhalb des Fensters bleiben
If ((x1% > -1) And (y1% > -1)) And (((x1% + Breite%) <= Width(%hwnd)) And ((y1% + Hoehe%) <= Height(%hwnd)))
SetWindowPos hAnzeige&,x1%,y1%
x% = x1%
y% = y1%
x_alt% = x1%
y_alt% = y1%
EndIf
EndProc
Randomize
WindowStyle 2 | 8 | 16' | 512
Window 100,100 - 806,600 + %cyCaption + 6' Fenster kann man auch beliebig einstellen
Declare l%,Test$,x%,y%,x_alt%,y_alt%,Breite%,Hoehe%,Anzahl%
Declare i1%,i2%
Anzahl% = 4' hier kann man die Anzahl der Felder einstellen. Anzahl% = 4 ergibt 16 Felder
Breite% = (Width(%hwnd) / Anzahl%,0)
Hoehe% = (Height(%hwnd) / Anzahl%,0)
SetWindowPos %hwnd = %winleft,%wintop - (Anzahl% * Breite% + 6),(Anzahl% * Hoehe% + %cyCaption + 6)' Rundungsfehler ausgleichen
x_alt% = Rnd(Anzahl%) * Breite%
y_alt% = Rnd(Anzahl%) * Hoehe%
Var hPic& = Create("hNewPic",Breite%,Hoehe%,$0F00FF)
Var hAnzeige& = Create("Bitmap",%hwnd,hPic&,x_alt%,y_alt%)
While 1
WaitInput
Locate 1,1
Case %Mousepressed = 1:MouseAbfrage()
If %key = 2
Break
ElseIf Test$ > " "
i1% = Abs(x_alt% - x%)' <= 100
i2% = Abs(y_alt% - y%)' <= 100
If ((i1% + i2%) = Breite%) | ((i1% + i2%) = Hoehe%)
SetWindowPos hAnzeige&,x%,y%
x_alt% = x%
y_alt% = y%
EndIf
Test$ = " "
ElseIf IsKey(37)
Bewegen(x_alt% - Breite%,y_alt%)
ElseIf IsKey(38)
Bewegen(x_alt%,y_alt% - Hoehe%)
ElseIf IsKey(39)
Bewegen(x_alt% + Breite%,y_alt%)
ElseIf IsKey(40)
Bewegen(x_alt%,y_alt% + Hoehe%)
EndIf
Wend
Hier wird ein Rechteck auf einer freien Fläche bewegt. Man muß im Prinzip nur noch eine Kollisionsabfrage einbauen. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.04.2012 ▲ |
|
|
|
|
| Wenn von vornherein ein Lösungsweg nicht ausgeschlossen ist dann sollte doch
eine Lösung immer mit Durchrotieren zu ermitteln sein. |
|
|
| |
|
|
|
Jörg Sellmeyer | Das wäre dann Brute Force. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.04.2012 ▲ |
|
|
|
|
Julian Schmidt | Jörg Sellmeyer (06.04.12)
Ich hab's ja schon geschrieben: Ähnliche Abläufe in Prozeduren packen, die entsprechende Parameter aufnehmen können. Außerdem: selbsterklärende Variablennamen, eine Formatierung, die augenfreundlicher ist, insgesamt mehr mit Prozeduren arbeiten, damit der Code besser strukturiert ist...
hmmmm....viel Arbeit, wenn man es im Nachhinein macht. Da weiß man gar nicht wo man anfangen soll.
Jörg Sellmeyer (06.04.12)
Wenn man die Strg-Taste drück, soll kurz ein Rahmen um das Leerfeld aufblinken.
Erledigt.
iF (06.04.12)
Wenn von vornherein ein Lösungsweg nicht ausgeschlossen ist dann sollte doch eine Lösung immer mit Durchrotieren zu ermitteln sein.
Vlt sollte ich mich erst daran machen nur lösbare Puzzles zu erstellen. Sonst wäre ein Algorithmus der es löst nicht immer zweckdienlich. |
|
|
| |
|
|
|
Jörg Sellmeyer |
Da weiß man gar nicht wo man anfangen soll.
Siehst Du - und das wolltest Du uns zumuten... Schau Dir mal meinen Code an. Da wirst Du sicher was von gebrauchen können.
Z.B. erstellst Du hier immer wieder neue Bilder:
whileloop 1,part_x&,If((part_x& Mod 2)=0,2,1)
space&=Create("hNewPic", &loop, part_y&, Back_Color())
DrawPic space&, ((spalte_&-1)*part_x&), (zeile_&-1)*part_y&; 0
DrawPic pic_part&[i_&], ((spalte_&-1)*part_x&)+&loop, (zeile_&-1)*part_y&; 0
DeleteObject space&
EndWhile
Wenn Du stattdessen ein Bitmapcontrol erstellst, kannst Du das nach Belieben auf dem Fenster herumschieben. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.04.2012 ▲ |
|
|
|
|
Julian Schmidt | Jörg Sellmeyer (06.04.12)
Z.B. erstellst Du hier immer wieder neue Bilder:
whileloop 1,part_x&,If((part_x& Mod 2)=0,2,1)
space&=Create("hNewPic", &loop, part_y&, Back_Color())
DrawPic space&, ((spalte_&-1)*part_x&), (zeile_&-1)*part_y&; 0
DrawPic pic_part&, ((spalte_&-1)*part_x&)+&loop, (zeile_&-1)*part_y&; 0
DeleteObject space&
EndWhile
Eig. erstelle ich nicht immer neue Bild. Ich male sie nur auf das Fenster. Per Create("hNewPic",...) (siehe oben) erstelle ich nur einen schwarzen Streifen. Statt dessen potuto ich auch den Befehl Line oder Rectangle gebrauchen. Nachtrag: Durch Rectangle ersetzt!
Jörg Sellmeyer (06.04.12)
Wenn Du stattdessen ein Bitmapcontrol erstellst, kannst Du das nach Belieben auf dem Fenster herumschieben.
Ich sehe den Vorteil darin nicht. Ich bräuchte zusätzlich zu den Bildern noch jeweils ein Bitmapcontrol. Ich hätte also die doppelte Anzahl an Controls. Und Windows müsste mehr Speicher und CPU aufopfern!? |
|
|
| |
|
|