Italia
Giochi

Schiebe-Puzzle - OpenSource

 
- Page 1 -



Julian
Schmidt
Kleines aus Langeweile entstandenes Game.

Download
externer Download

698 kB
Kurzbeschreibung: mirror1
Hochgeladen:20.05.2012
Downloadcounter287
Download
 
XProfan X2
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
04.04.2012  
 



 
- Page 4 -



Jörg
Sellmeyer
Das Erstellen und Löschen eines Bitmap-Handles verbraucht sicher mehr Ressourcen und kostet mehr Zeit als die einmalige Erstellung eines Staics, das Du dann bewegen kannst.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
06.04.2012  
 




Julian
Schmidt
Jörg Sellmeyer (06.04.12)

Das Erstellen und Löschen eines Bitmap-Handles verbraucht sicher mehr Ressourcen und kostet mehr Zeit als die einmalige Erstellung eines Staics, das Du dann bewegen kannst.


hmmm...gilt das Mostra eines Bitmap-Handles (per DrawPic) bei dir zum "Löschen und Erstellen eines Bitmap-Handles". Erstellen und Löschen tue ich meine Bitmap-Handels einmalig entweder am Anfang oder am Ende des Programms. Ansonsten tue ich sie nur Ausgeben, was keinesfalls mit Erstellen gleich kommt.
Einmalig Erstellen und Löschen müsste ich meine Bitmap-Handles ebenfallls, wenn ich ein Bitmap-Control nutzen würde.
Warum sollte der Weg circa Bitmap-Controls also weniger Ressourcen und Zeit kosten.
Das einmalige Erstellen erfordert in jedem Fall mehr Zeit, also mehr Rechenpower.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
06.04.2012  
 




Jörg
Sellmeyer
Ich weiß ja nicht, wie Du das hier nennst:
KompilierenMarkierenSeparieren
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&

EndW
a>

Ich nenne das mehrfaches Erstellen eines Bildhandles. Und das ist sicher aufwendiger als das verschieben eines Controls. Aber mir ist's auch egal. Ich muß ja keinen Fehler in Deinem Code finden
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
06.04.2012  
 




Julian
Schmidt
Ich würde mich nun gerne an einen neuen Algorithmus zum Mischen der Puzzle-Teile machen. Sinn soll es sein, dass nur lösbar Puzzles entstehen.
Es gibt gleich mehrere Möglichkeiten, die alle Vorteile bzw. Nachteile besitzen.
1. Mischen per zufälligem Verschieben der Puzzleteile in das Leerefeld um eine bestimmte Zahl von Zügen.
2. Mischen per Zufall bis die Parität gerade ist (siehe [...] )
3. Gezieltes zufälliges Mischen sodass die Parität immer gerade ist.

Die 1. Möglichkeit hätte den Vorteil das diese immer ungefähr gleich dauerte. Allerdings müsste man Zahl der Züge auf die jeweiligen Feldgrößen optimieren, damit das Bild auch ausreichend gemischt wäre.

Die 2. wäre per mich relativ einfach umzusetzen. Allerdings würde der Mischvorgang immer unterschiedlich lang dauern. Theoretisch potuto sich das Programm in einer Art "Endlosschleife" aufhängen.

Die 3. Möglichkeit wäre im Vergleich zur 1. & 2. Möglichkeit wesentlich schneller. Allerdings wüsste ich nicht wie ich meine Vorstellung umsetzen potuto.

Gibt es noch besser Möglichkeiten. Welche Möglichkeit haltet ihr per am Besten.
Mein persönlicher Favorit ist die 1. Möglichkeit.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
06.04.2012  
 




Julian
Schmidt
Jörg Sellmeyer (06.04.12)

Ich nenne das mehrfaches Erstellen eines Bildhandles. Und das ist sicher aufwendiger als das verschieben eines Controls. Aber mir ist's auch egal. Ich muß ja keinen Fehler in Deinem Code finden


Ist schon lange aus meinen Code draußen. Hättest du mal die Source aktualisiert hättest du es gesehen.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
06.04.2012  
 




Jörg
Sellmeyer
Du kannst Dir eine Tabelle von, sagen wir, 100 machbaren Ausgangspositionen anlegen. Aus denen suchst Du dann per Zufall welche aus.
Da geht das Mischen dann ruckzuck.


Ist schon lange aus meinen Code draußen. Hättest du mal die Source aktualisiert hättest du es gesehen.


Das hättest Du ja oben auch einfach erwähnen 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 kannst Dir eine Tabelle von, sagen wir, 100 machbaren Ausgangspositionen anlegen. Aus denen suchst Du dann per Zufall welche aus.
Da geht das Mischen dann ruckzuck.


Du meinst ich soll mir eine Datenbank mit einigen möglichen Möglichkeiten anlegen und aus diesen dann Eine zufällig auswählen?
Das wäre dann naturalmente das Schnellste. Allerdings müsste per jeden Schwieigkeitsgrad ca. 100 oder besser mehr Kombinationen eintragen.
Da ich noch nie mit Datenbanken gearbeitet habe, stellt sich mir die Frage, wie ich am Besten die Möglichkeiten eintrage und wie grande die Datenbank mit ca. 1000 Einträge sein wird.

Jörg Sellmeyer (06.04.12)

Das hättest Du ja oben auch einfach erwähnen können.


Hätte ich geahnt, dass du dich nicht auf meinen aktuellen Code beziehst, Ja.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
06.04.2012  
 




Jörg
Sellmeyer
Dafür brauchst Du keine Datenbank. Eine Inidatei oder so reicht:

Inidatei per Rätsel

[achter]
Start= 0,1,2,3,4,5,6,7,8;1,2,3,4,0,6,5,8,7;2,1,3,4,8,5,0,7,6...

[fuenfzehner]
Start= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;1,2,3,14,6,5,8,7,0,9,11,10,12,13,15,4;...

...


Nach dem gleichen Prinzip kannst Du Dir aber auch im Programm Listen generieren.
Ich hab jetzt die Bedingungen nicht im Kopf, die erfüllt sein müssen.
Aus den Zahlen (das sind die Blöcke im Puzzle) kannst Du dann die Koordinaten errechnen.

Eine Inidatei hat Beschränkungen in der Länge der Strings. Nimm lieber eine Textdatei in die Du einfach Zeilenweise die Start-Strings schreibst

StartDatei
Start08=0,1,2,3,4,5,6,7,8;1,2,3,4,0,6,5,8,7;2,1,3,4,8,5,0,7,6...
Start15= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;1,2,3,14,6,5,8,7,0,9,11,10,12,13,15,4;...
Start24=...
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
06.04.2012  
 




Julian
Schmidt
Jup, dann bräuchte ich am Besten einen Quellcode der mir mögliche Lösungen in die Ini-File schreibt.
Ich werde das in nächster Zeit versuchen (mit der 1. Möglichkeit (siehe oben)) umzusetzen. Es sei denn, es taucht ein besserer Vorschlag auf.
Saluto
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
06.04.2012  
 




Julian
Schmidt
Ich habe nun einen Quelltext geschrieben der mir mögliche Lösungen auflistet.
Ich scheitere momentan leider noch beim Schreiben dieser in un Text-File.
Könnte mal jemand ein Beispiel mit Blockwrite machen?
KompilierenMarkierenSeparieren
Def Wurzel2(1) Sqrt(@&(1))
Def Spalte_from_ID(1) (INT(@&(1)/Wurzel2(anzahl_teile&))+IF((@&(1) mod Wurzel2(anzahl_teile&))=0,0,1))
Def Zeile_from_ID(1) INT(@&(1)-((Spalte_from_ID(@&(1))-1)*Wurzel2(anzahl_teile&)))
Def DateiName(1) SubStr$(@$(1),-1,"\\")
Def DateiPfad(1) Translate$(@$(1),("\\" + DateiName(@$(1))),"")
Var Programm$=Par$(If((Upper$(SubStr$(Par$(0), -1, "\\"))="PROFAN.EXE") or (Upper$(SubStr$(Par$(0), -1, "\\"))="XPROFAN.EXE"),1,0))
Var txt$=DateiPfad(Programm$)+"\Options.txt"
Declare anzahl_teile&, start_kombination$, kombination$, empty&, pos&[], err&, random&, liste&
cls

whileloop 5

    anzahl_teile&=(&loop+2)^2
    Clear pos&[]

    whileloop anzahl_teile&

        pos&[&loop]=&loop'pos&[Wahre-Positions-ID]=Aktuelle-Positions-ID

    EndWhile

    start_kombination$=Kombination()
    Destroywindow(liste&)
    liste&=Create("Listbox",%hwnd, 0, 0,0,width(%hwnd),height(%hwnd))'Create("List",0)
    empty&=1
    Randomize

    While GetCount(liste&)<1000

        random&=Rnd(2)+1'-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-Verschieben per Zufall

        If random&=1'Horizontal

            If Spalte_from_ID(empty&)=1'Rechts

                Tausche(empty&+Wurzel2(anzahl_teile&))

            ElseIf Spalte_from_ID(empty&)=Wurzel2(anzahl_teile&)'Links

                Tausche(empty&-Wurzel2(anzahl_teile&))

            Else'Links oder Rechts

                random&=Rnd(2)+1

                If random&=1'Links

                    Tausche(empty&-Wurzel2(anzahl_teile&))

                ElseIf random&=2'rechts

                    Tausche(empty&+Wurzel2(anzahl_teile&))

                EndIf

            EndIf

        ElseIf random&=2'Vertikal

            If Zeile_from_ID(empty&)=1'Unten

                Tausche(empty&+1)

            ElseIf Zeile_from_ID(empty&)=Wurzel2(anzahl_teile&)'Oben

                Tausche(empty&-1)

            Else'Oben oder Unten

                random&=Rnd(2)+1

                If random&=1'Oben

                    Tausche(empty&-1)

                ElseIf random&=2'Unten

                    Tausche(empty&+1)

                EndIf

            Endif

        EndIf

        kombination$=Kombination()'-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-Eintragen in Text-Datei

        If start_kombination$<>kombination$

            Clear err&

            whileloop GetCount(liste&)

                If GetString$(liste&,&loop-1)=kombination$

                    err&=1
                    break

                Endif

            Endwhile

            If err&<>1

                Addstring(liste&,kombination$)'noch nicht eingetragene Kombinationen
                'in Text-Datei eintragen
                Settext %hwnd,"Stufe: "+Str$(INT(Wurzel2(anzahl_teile&)-2))+"  Einträge: "+Str$(GetCount(liste&))+" von 1000"

            EndIf

        EndIf

        Case iskey(27) : end

    EndWhile

EndWhile

Proc Tausche

    Parameters id&'empty& und id& tauschen
    Declare x&

    whileloop anzahl_teile&'Wahre-Position von id&

        If pos&[&loop]=id&

            x&=&loop
            break

        EndIf

    EndWhile

    pos&[x&]=empty&
    empty&=id&
    pos&[1]=empty&'Tauschen

EndProc

Proc Kombination

    Declare text$

    whileloop anzahl_teile&

        text$=text$+Str$(pos&[&loop])+"|"

    Endwhile

    Return Left$(text$,Len(text$)span class=s2>-1)

EndProc

 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
07.04.2012  
 




Jörg
Sellmeyer
Dafür brauchst Du gar nicht BlockWrite bemühen. Einfach alles in einen String und ab damit:
KompilierenMarkierenSeparieren
Var Text$ = "Dies\nist\nein\nTest"
Var Datei$ = "C:\Profan\Projekte\Notengenerator\Einstellungen.dat"
Assign #1,Datei$
Print %ioresult
ReWrite #1
Print #1,Text$
Close #1
print %ioresult
WaitInput
Shell "NotePad.exe " + Datei$
Wai
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
07.04.2012  
 




Julian
Schmidt
Ok ,danke
Und wie tue ich am Besten nur einzelne Zeilen auslesen?
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
07.04.2012  
 




Zum Spiel


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

111.449 Views

Untitledvor 0 min.
H.Brill02.05.2023
Sven Bader14.07.2021
Michael Klumb18.04.2016
Julian Schmidt07.01.2016
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie