1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. gem

Beiträge von gem

  • XMLGUI

    • gem
    • 12. August 2020 um 19:37

    alpines

    danke für den tipp. bei mir seh ich allerdings keine liste wenn ich @ eingebe. ich benutze chrome.

    ich kann die xml importier funktion alternativ über xmldon laufen lassen und mal vergleichen

  • XMLGUI

    • gem
    • 11. August 2020 um 14:35

    Danke für die Rückmeldungen

    Ich habe nun eine JSON Variante implementiert . Persönlich finde ich die XML Variante angenehmer. Der Aufbau der JSON Datei könnte natürlich angepasst werden.

    @AspirinJunkie

    Danke :D

    Wenn du Zugriff auf die Controls meinst kannst du dir mit theoretisch mit _XMLGUI_GetToken den Handle ausgeben, wenn ein Control erstellt wurden ist. Das Problem ist das dann keine Änderungen an der Struktur übernommen werden wenn Änderungen vorgenommen werden, deswegen der Umweg über die Funktion _XMLGUI_Query.

    Zitat

    Du hast eine Pure-Basic-Dll als XML-Wrapper verwendet. Die Abhängigkeit zu dieser dll (die hier nur in 32Bit vorliegt und damit 64-Bit-Programme verhindert) ist sicher verschmerzbar aber eine Alternative wäre ja das Microsoft.XMLDom-Objekt gewesen welches ja bereits in Windows enthalten ist. Gibt es einen bestimmten Grund warum du den Pure-Basic-Wrapper bevorzugt hast?

    Dachte die Trennung wäre hier Vorteilhaft. Sollte die DLL von einer anderen Anwendung aufgerufen werden wäre das Ergebnis beim Einlesen identisch. Evtl. Performance da nicht jedes mal beim Einlesen der Werte die DLL aufgerufen werden muss. Oder meinst du komplett ohne DLL nur mit Microsoft.XMLDom zur Verwaltung der Daten?

  • XMLGUI

    • gem
    • 10. August 2020 um 15:56

    Hallo autoiter,

    Danke. Ja Genau funktioniert allerdings nur teilweise. Lässt sich aber leicht erweitern.

    Was wäre deine Alternative zu XML?

  • XMLGUI

    • gem
    • 10. August 2020 um 15:08

    XMLGUI ~ JSON

    Hallo Leute,

    ich möchte euch ein Skript vorstellen, mit diesem ihr eure GUI in XML (bzw. JSON) gestalten und bei eurem AutoIt Skript laden könnt.

    Das Projekt habe ich für mich geschrieben, damit ich mich nicht dem Form Editor und dem Layout beschäftigen muss.

    88542-prev-png


    Hinweis

    Der Umfang des Projekts ist noch überschaubar viele Funktionen sind noch nicht vorhanden. Sollte Interesse bestehen würde ich das Projekt fortführen und erweitern. Evtl. haben andere Interesse mitzumachen. Ich habe den aktuellen Stand hochgeladen bin mir bewusst das noch vieles fehlt, brauchte es für mich aber in keinem größeren Umfang.

    Wie funktionierst?

    Beispiel an einem Skript mit XMLGUI

    ExampleXML.au3

    AutoIt
    #include <XML-GUI.au3> ;Skript importieren
    
    ;$App = _XMLGUI_CreateApp("Test.json")
    ;$App = _XMLGUI_CreateApp("Test.xml")
    ;$App = _XMLGUI_CreateApp("ExampleApp.xml")
    $App = _XMLGUI_CreateApp("ExampleApp.json") ; _XMLGUI_CreateApp(FilenameXML|FilenameJSON) - Erstellt die Anwendung, Lädt XML oder JSON Datei
    
    ;_XMLGUI_ExportXMLFile($App,"Export.xml") ; Speichert die Anwendung als XML Datei
    ;_XMLGUI_ExportJSONFile($App,"Export.json") ; Speichert die Anwendung als JSON Datei
    
    $Win = _XMLGUI_Query($App,"win")
    
    $WinTitle = _XMLGUI_Query($App,$Win,"title")
    
    ; _XMLGUI_Query(App,Id|Node,Key,Value)
    ; App = Oberster Node => Normalerweise Rückgabe von _XMLGUI_CreateApp
    ; Id = Eingetragene Id im XML Code oder Rückgabe von _XMLGUI_Query(App,Id)
    ; Key = Wenn Null wird Inhalt geändert sonst das entsprechende Attribut
    ; Value = Wenn Default wird das Attribut oder Inhalt ausgegeben sonst verändert
    
    func win_exit()
        _XMLGUI_Query($App,$Win,"exit","true")
    EndFunc
    
    func btn_click()
        MsgBox(0,$WinTitle,_XMLGUI_Query($App,"txt",null))
        _XMLGUI_Query($App,"txt",null,"Ich bin sichtbar")
        _XMLGUI_Query($App,"txt","show","true")
    EndFunc
    
    do
        sleep(100)
    until _XMLGUI_Query($app,$Win,"exit") = "true"
    
    _XMLGUI_CloseApp($app) ; _XMLGUI_CloseApp(App)- Schließt die Anwendung
    Alles anzeigen

    ExampleApp.xml

    Code
    <app>
        <window id="win" width="800" height="600" show="true" title="Beispiel" onexit="win_exit">
            <layout>
                <tabview>
                    <tab title="Button,Inputs,CheckBox,Radio">
                        <layout padding="10">
                            <layout type="gridy" padding="10">
                                <input>Eingabe</input>
                                <input type="progress" pos="50"/>
                                <input type="slider" pos="50"/>
                                <input type="number"/>
                                <input type="date"/>
                            </layout>
                            <layout type="gridy" padding="10">
                                <checkbox checked="true">Auswahlbox</checkbox>
                                <checkbox>Auswahlbox</checkbox>
                                <group title="Radio">
                                    <radiobox>Ja</radiobox>
                                    <radiobox>Nein</radiobox>
                                </group>
    
                                <combolist>
                                    <value>Lorem</value>
                                    <value>Ipsum</value>
                                </combolist>
                            </layout>
                        </layout>
                    </tab>
                    <tab title="Lists">
                        <layout padding="10" type="gridy">
                            <button onclick="btn_click">Klick Mich</button>
    
                            <text id="txt" show="false">Mich sieht man noch nicht</text>
    
                            <treeview>
                                <value>Lorem</value>
                                <value>Ipsum</value>
                            </treeview>
    
                            <listview columns="2">
                                <value>Lorem</value>
                                <value>Ipsum</value>
                            </listview>
    
                            <list>
                                <value>Lorem</value>
                                <value selected="true">Ipsum</value>
                                <value>Lorem</value>
                                <value>Ipsum</value>
                            </list>
                        </layout>
                    </tab>
                    <tab title="Image">
                        <layout padding="10">
                            <image src="Bild.jpg"></image>
                        </layout>
                    </tab>
                    <tab title="Text">
                        <layout padding="10">
                            <text>Lorem Ipsum</text>
                            <group title="Gruppe">
                                <text>Lorem Ipsum</text>
                            </group>
    
                            <textarea>Textfeld</textarea>
                        </layout>
                    </tab>
                </tabview>
            </layout>
        </window>
    </app>
    Alles anzeigen

    ExampleApp.json

    Code
    {
        "class":"app",
        "children":[
            {
            "class":"window",
            "id":"win",
            "attrs":{
                "width":"800",
                "height":"600",
                "title":"Beispiel",
                "show":"true",
                "onexit":"win_exit"
            },                
            "children":[
                {
                    "class":"layout",
                    "children":[
                        {
                        "class":"button",
                        "value":"Klick Mich",
                        "attrs":{
                            "onclick":"btn_click"
                            }
                        },
                        {
                        "class":"text",
                        "id":"txt",
                        "value":"Text nicht sichtbar",
                        "attrs":{
                            "show":"false"
                            }
                        }
                    ]
                }
                
            ]
            }
        ],
        "attrs":{
            "a":"10",
            "b":"20"
        }
    }
    Alles anzeigen

    ExampleApp.xml in JSON umgewandelt => Test.json (Datei zu groß um hier zu posten)

    Die XMLGUI.au3

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GUIComboBoxEx.au3>
    #include <GUIListBox.au3>
    
    global $_XMLGUI_DLL
    
    func _XMLGUI_Query($App,$Id,$Key = Default,$Value = Default)
        if IsString($Id) then
            $Node = _XMLGUI_GetNodeById($App,$Id)
        Else
            $Node = $Id
        endif
    
        if $Key = Default Then
            Return $Node
        elseif $Key = Null Then
            if $Value = Default then
                switch _XMLGUI_GetClass($Node)
                    case "button","text","input"
                        $ChangedValue = GUICtrlRead(_XMLGUI_GetToken($Node))
                        _XMLGUI_SetValue($Node,$ChangedValue)
                        return $ChangedValue
                EndSwitch
    
                return _XMLGUI_GetValue($Node)
            endif
    
            _XMLGUI_SetValue($Node,$Value)
    
            switch _XMLGUI_GetClass($Node)
                case "button","text","input"
                    GUICtrlSetData(_XMLGUI_GetToken($Node),$Value)
            EndSwitch
    
            return $Node
        EndIf
    
        if $Value = Default then
    
            switch _XMLGUI_GetClass($Node)
                case "input"
                    switch $Key
                        case "text"
                            $ChangedValue = GUICtrlRead(_XMLGUI_GetToken($Node))
                            _XMLGUI_SetAttr($Node,$Key,$ChangedValue)
                            return $ChangedValue
                    EndSwitch
            EndSwitch
    
            Return _XMLGUI_GetAttr($Node,$Key)
        EndIf
    
        _XMLGUI_SetAttr($Node,$Key,$Value)
    
        $Class= _XMLGUI_GetClass($Node)
    
        if $Key = "show" then
            if $Class = "window" Then
                if $Value = "true" Then
                    GUISetState(@SW_SHOW,_XMLGUI_GetToken($Node))
                Else
                    GUISetState(@SW_HIDE,_XMLGUI_GetToken($Node))
                endif
            Else
                _XMLGUI_ToggleView($Node)
            endif
        endif
    
        switch $Class
            case "window"
                switch $Key
                    case "exit"
                        GUIDelete(_XMLGUI_GetToken($Node))
                EndSwitch
            case "button","text","input"
                switch $Key
                    case "text"
                        GUICtrlSetData(_XMLGUI_GetToken($Node),$Value)
                EndSwitch
        EndSwitch
    EndFunc
    
    func _XMLGUI_CloseApp($App)
        _XMLGUI_RemoveNode($App)
    
        _XMLGUI_Close()
    EndFunc
    
    func _XMLGUI_CreateApp($Path)
        _XMLGUI_Open()
    
        switch StringRegExpReplace($Path, "^.*\.", "")
            Case "xml"
                $App = _XMLGUI_ImportXMLFile($Path)
            case "json"
                $App = _XMLGUI_ImportJSONFile($Path)
            case Else
                _XMLGUI_Close()
                return msgbox(0,"","No Correct Type")
        EndSwitch
    
        _XMLGUI_RenderChildren($App)
    
        return $App
    EndFunc
    
    func _XMLGUI_RenderChildren($Object)
        $Len = _XMLGUI_GetChildrenLen($Object)
    
        for $Index = 0 to $Len-1
            _XMLGUI_RenderObject(_XMLGUI_GetChildrenByIndex($Object,$Index),$Index)
        Next
    EndFunc
    
    func _XMLGUI_RenderObject($Object,$Index = -1)
        switch _XMLGUI_GetClass($Object)
            case "window"
                $Handle = GUICreate(_XMLGUI_GetAttr($Object,"title"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                Opt("GUIOnEventMode", 1)
                if not _XMLGUI_GetAttr($Object,"onexit") = "" then
                    GUISetOnEvent($GUI_EVENT_CLOSE,_XMLGUI_GetAttr($Object,"onexit"),$Handle)
                endif
    
                if _XMLGUI_GetAttr($Object,"show") ="true" Then
                    GUISetState(@SW_SHOW,$Handle)
                endif
    
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_RenderChildren($Object)
            case "text"
                $Handle = GUICtrlCreateLabel(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_ToggleView($Object,True)
            case "textarea"
                $Handle = GUICtrlCreateEdit(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_ToggleView($Object,True)
            case "checkbox"
                $Handle = GUICtrlCreateCheckbox(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_ToggleView($Object,True)
                _XMLGUI_ToggleChecked($Object,True)
            case "input"
    
                switch _XMLGUI_GetAttr($Object,"type")
                    case "slider"
                        $Handle = GUICtrlCreateSlider(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                        GUICtrlSetData($Handle,_XMLGUI_GetAttr($Object,"pos"))
                    case "date"
                        $Handle = GUICtrlCreateDate(_XMLGUI_GetAttr($Object,"text"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                    case "progress"
                        $Handle = GUICtrlCreateProgress(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                        GUICtrlSetData($Handle,_XMLGUI_GetAttr($Object,"pos"))
                    case else
    
                        $Handle = GUICtrlCreateInput(_XMLGUI_GetAttr($Object,"text"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                        if _XMLGUI_GetAttr($Object,"type") = "number" Then
                            GUICtrlCreateUpdown($Handle)
                        EndIf
    
                EndSwitch
    
                _XMLGUI_SetToken($Object,$Handle)
            case "image"
                $Handle = GUICtrlCreatePic(_XMLGUI_GetAttr($Object,"src"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_ToggleView($Object,True)
            case "button"
                $Handle = GUICtrlCreateButton(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                if not _XMLGUI_GetAttr($Object,"onclick") = "" then
                    GUICtrlSetOnEvent($Handle,_XMLGUI_GetAttr($Object,"onclick"))
                endif
    
                _XMLGUI_ToggleView($Object,True)
            case "list"
                $Handle = GUICtrlCreateList("",_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_RenderChildren($Object)
    
                if not _XMLGUI_GetAttr($Object,"selected") = "" Then
                    _GUICtrlListBox_SetCurSel($Handle,Int(_XMLGUI_GetAttr($Object,"selected")))
                endif
            case "combolist"
                $Handle = GUICtrlCreateCombo("",_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_RenderChildren($Object)
                _XMLGUI_ToggleView($Object,True)
            case "group"
                $Handle = GUICtrlCreateGroup(_XMLGUI_GetAttr($Object,"title"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                _XMLGUI_SetToken($Object,$Handle)
                if not _XMLGUI_GetAttr($Object,"title") = "" then
                    _XMLGUI_SetAttr($Object,"margin",16)
                endif
    
                _XMLGUI_Layout($Object)
            case "tabview"
                $Handle = GUICtrlCreateTab(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                _XMLGUI_SetToken($Object,$Handle)
                _XMLGUI_SetAttr($Object,"type","take")
                _XMLGUI_SetAttr($Object,"margin",30)
    
                _XMLGUI_Layout($Object)
    
                GUICtrlCreateTabItem("")
            case "tab"
                $Handle = GUICtrlCreateTabItem(_XMLGUI_GetAttr($Object,"title"))
    
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_RenderChildren($Object)
            case "radiobox"
                $Handle = GUICtrlCreateRadio(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_ToggleView($Object,True)
                _XMLGUI_ToggleChecked($Object,True)
            case "listview"
                $Handle = GUICtrlCreateListView("|",_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_RenderChildren($Object)
            case "treeview"
                $Handle = GUICtrlCreateTreeView(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
    
                _XMLGUI_SetToken($Object,$Handle)
    
                _XMLGUI_RenderChildren($Object)
            case "layout"
                _XMLGUI_Layout($Object)
            case "value"
                $Parent = _XMLGUI_GetParent($Object)
    
                switch _XMLGUI_GetClass($Parent)
                    case "list"
                        _GUICtrlListBox_AddString(_XMLGUI_GetToken($Parent),_XMLGUI_GetValue($Object))
    
                        if _XMLGUI_GetAttr($Object,"selected") = "true" then
                            _XMLGUI_SetAttr($Parent,"selected",$Index)
                        endif
                    case "combolist"
                        GUICtrlSetData(_XMLGUI_GetToken($Parent),_XMLGUI_GetValue($Object))
                    case "listview"
                        GUICtrlCreateListViewItem(_XMLGUI_GetValue($Object),_XMLGUI_GetToken($Parent))
                    case "treeview"
                        GUICtrlCreateTreeViewItem(_XMLGUI_GetValue($Object),_XMLGUI_GetToken($Parent))
                EndSwitch
        EndSwitch
    EndFunc
    
    func _XMLGUI_ToggleView($Object,$Created = False)
        if _XMLGUI_GetAttr($Object,"show") = "false" then
            GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_HIDE)
        Else
            GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_SHOW)
        endif
    EndFunc
    
    func _XMLGUI_ToggleChecked($Object,$Created = False)
    
        if _XMLGUI_GetAttr($Object,"checked") = "true" then
            GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_CHECKED)
        Else
            GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_UNCHECKED)
            _XMLGUI_SetAttr($Object,"checked","false")
        endif
    
    EndFunc
    
    func _XMLGUI_Layout($Object)
        $Len = _XMLGUI_GetChildrenLen($Object)
    
        $Type = _XMLGUI_GetAttr($Object,"type")
    
        $Left = _XMLGUI_GetAttr($Object,"left")
        $Top = _XMLGUI_GetAttr($Object,"top")
    
        $Padding = _XMLGUI_GetAttr($Object,"padding")
        $PaddingTop = _XMLGUI_GetAttr($Object,"padding-top")
        $PaddingLeft = _XMLGUI_GetAttr($Object,"padding-left")
        $PaddingBottom = _XMLGUI_GetAttr($Object,"padding-bottom")
        $PaddingRight = _XMLGUI_GetAttr($Object,"padding-right")
        $Margin = _XMLGUI_GetAttr($Object,"margin")
    
        $Width = _XMLGUI_GetAttr($Object,"width")
        $Height = _XMLGUI_GetAttr($Object,"height")
    
        if $Width = 0 or $Height = 0 Then
    
            $Parent = _XMLGUI_GetParent($Object)
    
            if not $Parent = 0 Then
                $Left = _XMLGUI_GetAttr($Parent,"left")
                $Top = _XMLGUI_GetAttr($Parent,"top")
                $Width = _XMLGUI_GetAttr($Parent,"width")
                $Height = _XMLGUI_GetAttr($Parent,"height")
            endif
    
        EndIf
    
        if $Margin > 0 Then
            $Left += $Margin
            $Top += $Margin
            $Width -= $Margin*2
            $Height -= $Margin*2
        endif
    
        switch $Type
            case "take"
            case "gridy"
                $Height /= $Len
    
                $MaxHeight = _XMLGUI_GetAttr($Object,"maxheight")
                if not $MaxHeight = 0 and $Height > $MaxHeight Then
                    $Height = $MaxHeight
                EndIf
            case "gridx"
                ContinueCase
            case else
                $Width /= $Len
        EndSwitch
    
        for $Index = 0 to $Len-1
            $Child = _XMLGUI_GetChildrenByIndex($Object,$Index)
    
            _XMLGUI_SetAttr($Child,"left",$Left+$Padding+$PaddingLeft)
            _XMLGUI_SetAttr($Child,"top",$Top+$Padding+$PaddingTop)
            _XMLGUI_SetAttr($Child,"width",$Width-$Padding*2-$PaddingLeft-$PaddingRight)
            _XMLGUI_SetAttr($Child,"height",$Height-$Padding*2-$PaddingTop-$PaddingBottom)
    
            switch $Type
                case "take"
                case "gridy"
                    $Top += $Height
                case "gridx"
                    ContinueCase
                case else
                    $Left += $Width
            EndSwitch
        Next
    
        _XMLGUI_RenderChildren($Object)
    EndFunc
    
    func _XMLGUI_Open()
        $_XMLGUI_DLL = DllOpen("XML-GUI.dll")
    EndFunc
    
    func _XMLGUI_AddNode($Parent,$Class = "",$Id = "",$Value = "")
        $Result = Dllcall($_XMLGUI_DLL,"int","AddNode","int",$Parent,"wstr",$Class,"wstr",$Id,"wstr",$Value)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetChildrenByIndex($This,$Index)
        $Result = Dllcall($_XMLGUI_DLL,"int","GetChildrenByIndex","int",$This,"int",$Index)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetChildrenLen($This)
        $Result = Dllcall($_XMLGUI_DLL,"int","GetChildrenLen","int",$This)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_RemoveNode($This)
        $Result = Dllcall($_XMLGUI_DLL,"int","RemoveNode","int",$This,"int",0)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_ImportXML($String)
        $Result = Dllcall($_XMLGUI_DLL,"int","ImportXML","wstr",$String)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_ImportXMLFile($Filename)
        $Result = Dllcall($_XMLGUI_DLL,"int","ImportXMLFile","wstr",$Filename)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_ExportXMLFile($This,$Filename)
        $Result = Dllcall($_XMLGUI_DLL,"int","ExportXMLFile","int",$This,"wstr",$Filename)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_ExportJSONFile($This,$Filename)
        $Result = Dllcall($_XMLGUI_DLL,"int","ExportJSONFile","int",$This,"wstr",$Filename)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_ImportJSONFile($Filename)
        $Result = Dllcall($_XMLGUI_DLL,"int","ImportJSONFile","wstr",$Filename)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_SetValue($This,$Value)
        $Result = Dllcall($_XMLGUI_DLL,"int","SetValue","int",$This,"wstr",$Value)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetValue($This)
        $Result = Dllcall($_XMLGUI_DLL,"wstr","GetValue","int",$This)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_SetId($This,$Id)
        $Result = Dllcall($_XMLGUI_DLL,"int","SetId","int",$This,"wstr",$Id)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetId($This)
        $Result = Dllcall($_XMLGUI_DLL,"wstr","GetId","int",$This)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_SetClass($This,$Class)
        $Result = Dllcall($_XMLGUI_DLL,"int","SetClass","int",$This,"wstr",$Class)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetClass($This)
        $Result = Dllcall($_XMLGUI_DLL,"wstr","GetClass","int",$This)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_SetToken($This,$Token)
        $Result = Dllcall($_XMLGUI_DLL,"int","SetToken","int",$This,"int",$Token)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetToken($This)
        $Result = Dllcall($_XMLGUI_DLL,"int","GetToken","int",$This)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_SetAttr($This,$Name,$Value)
        $Result = Dllcall($_XMLGUI_DLL,"int","SetAttr","int",$This,"wstr",$Name,"wstr",$Value)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetAttr($This,$Name)
        $Result = Dllcall($_XMLGUI_DLL,"wstr","GetAttr","int",$This,"wstr",$Name)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetParent($This)
        $Result = Dllcall($_XMLGUI_DLL,"int","GetParent","int",$This)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_GetNodeById($Current,$Id)
        $Result = Dllcall($_XMLGUI_DLL,"int","GetNodeById","int",$Current,"wstr",$Id)
        return $Result[0]
    EndFunc
    
    func _XMLGUI_Close()
        dllclose($_XMLGUI_DLL)
    EndFunc
    Alles anzeigen

    XML-GUI.dll in PureBasic

    Code
    EnableExplicit
    
    Structure Node
      Id.s
      Class.s
      Value.s
      Token.i
      Map Attrs.s()
      
      List *Children()
      *Parent.Node
    EndStructure
    
    Procedure FindChildren(*This.Node,*Child.Node)
      If *This = 0 
        ProcedureReturn #False
       EndIf
      
      ForEach *This\Children()
        If *This\Children() = *Child
          ProcedureReturn #True
        EndIf
      Next
      
      ProcedureReturn #False
    EndProcedure
    
    ProcedureDLL AddNode(*Parent.Node,Class.s,Id.s,Value.s)
      Define *This.Node = AllocateStructure(Node)
      With *This.Node
        \Id = Id
        \Class = Class
        \Value = Value
        
        \Parent = *Parent
      EndWith
      
      If Not *Parent = 0
        AddElement(*Parent\Children())
        *Parent\Children() = *This
      EndIf
      
      ProcedureReturn *This
    EndProcedure
    
    Procedure ExtractXML(*XMLNode,*Node.Node)
      Define *NextXMLNode, AttrName.s, AttrValue.s
      
      If *Node = 0
        *Node = AddNode(0,"","","")
      EndIf
      
      With *Node
        \Class = GetXMLNodeName(*XMLNode)
        \Value = GetXMLNodeText(*XMLNode)
     
        ExamineXMLAttributes(*XMLNode)
        
        While NextXMLAttribute(*XMLNode)
          AttrName = XMLAttributeName(*XMLNode)
          AttrValue = XMLAttributeValue(*XMLNode)
          \Attrs(AttrName) = AttrValue
          
          If AttrName = "id"
            \Id = AttrValue
          EndIf
        Wend
      EndWith
      
        *NextXMLNode = ChildXMLNode(*XMLNode)
        If *NextXMLNode
          ExtractXML(*NextXMLNode,AddNode(*Node,"","",""))
          
          Repeat
            *NextXMLNode = NextXMLNode(*NextXMLNode)
            
            If *NextXMLNode
              ExtractXML(*NextXMLNode,AddNode(*Node,"","",""))
            Else
              Break
            EndIf
          ForEver
          
        EndIf
        
        ProcedureReturn *Node
    EndProcedure
      
    Procedure ExtractJSON(*JSONNode,*Node.Node)
      Define *JSONNext, AttrName.s, AttrValue.s, i.i
      
      If *Node = 0
        *Node = AddNode(0,"","","")
      EndIf
      
      ExamineJSONMembers(*JSONNode)
    
      While NextJSONMember(*JSONNode)
        AttrName = JSONMemberKey(*JSONNode)
        *JSONNext = JSONMemberValue(*JSONNode)
        
        Select JSONType(*JSONNext)
          Case #PB_JSON_String 
            AttrValue = GetJSONString(*JSONNext)
            Select AttrName
              Case "id"
                *Node\Id = AttrValue
              Case "class"
                *Node\Class = AttrValue
              Case "value"
                *Node\Value = AttrValue
              Default
                *Node\Attrs(AttrName) = AttrValue
            EndSelect
          Case #PB_JSON_Object
            If AttrName = "attrs"
               ExamineJSONMembers(*JSONNext)
    
              While NextJSONMember(*JSONNext)
               *Node\Attrs(JSONMemberKey(*JSONNext)) = GetJSONString(JSONMemberValue(*JSONNext))
              Wend
            EndIf
          Case #PB_JSON_Array 
            If AttrName = "children"
              For i = 0 To JSONArraySize(*JSONNext)-1
                ExtractJSON(GetJSONElement(*JSONNext,i),AddNode(*Node,"","",""))
              Next
            EndIf
        EndSelect
      Wend
    
      ProcedureReturn *Node
    EndProcedure
      
    Procedure ConstructXML(*XMLNode,*Node.Node)
      Define *NextXMLNode
      
      With *Node
        *NextXMLNode = CreateXMLNode(*XMLNode,\Class)
        If Not \Value = ""
          SetXMLNodeText(*NextXMLNode,\Value)
        EndIf
        
        SetXMLAttribute(*NextXMLNode,"id",\Id)
        
        ForEach \Attrs()
          SetXMLAttribute(*NextXMLNode,MapKey(\Attrs()),\Attrs())
        Next
        
        ForEach \Children()
          ConstructXML(*NextXMLNode,\Children())
        Next
      EndWith
    EndProcedure
    
    Procedure ConstructJSON(*JSONNode,*Node.Node)
      Define *NextJSONNode, *Attrs, *Children
      
      With *Node  
        *NextJSONNode = AddJSONMember(*JSONNode,"id")
        SetJSONString(*NextJSONNode,\Id)
        
        *NextJSONNode = AddJSONMember(*JSONNode,"class")
        SetJSONString(*NextJSONNode,\Class)
        
        If Not \Value = ""
          *NextJSONNode = AddJSONMember(*JSONNode,"value")
          SetJSONString(*NextJSONNode,\Value)
        EndIf
        
        If MapSize(\Attrs()) > 0
         
          *NextJSONNode = AddJSONMember(*JSONNode,"attrs")
          *Attrs = SetJSONObject(*NextJSONNode)
      
          ForEach \Attrs()
            SetJSONString(AddJSONMember(*Attrs,MapKey(\Attrs())),\Attrs())
          Next
          
        EndIf
        
        If ListSize(\Children()) > 0
           *NextJSONNode = AddJSONMember(*JSONNode,"children")
           *Children = SetJSONArray(*NextJSONNode)
          
          ForEach \Children()
            ConstructJSON(SetJSONObject(AddJSONElement(*Children)),\Children())
          Next
        EndIf
      EndWith
    EndProcedure
    
    ProcedureDLL ImportXML(String.s)
      Define XML = ParseXML(#PB_Any,String)
        
      ProcedureReturn ExtractXML(MainXMLNode(XML),0)
    EndProcedure
    
    ProcedureDLL ImportXMLFile(Filename.s)
      Define XML = LoadXML(#PB_Any,Filename)
        
      ProcedureReturn ExtractXML(MainXMLNode(XML),0)
    EndProcedure
    
    ProcedureDLL ImportJSONFile(Filename.s)
      Define JSON = LoadJSON(#PB_Any,Filename)
        
      ProcedureReturn ExtractJSON(JSONValue(JSON),0)
    EndProcedure
    
    ProcedureDLL ExportXMLFile(*This.Node,Filename.s)
      Define XML = CreateXML(#PB_Any)
    
      ConstructXML(RootXMLNode(XML),*This)
      
      FormatXML(XML,#PB_XML_WindowsNewline | #PB_XML_ReFormat )
      SaveXML(XML,Filename)
      
      ProcedureReturn #True
    EndProcedure
    
    ProcedureDLL ExportJSONFile(*This.Node,Filename.s)
      Define JSON = CreateJSON(#PB_Any)
    
      ConstructJSON(SetJSONObject(JSONValue(JSON)),*This)
    
      SaveJSON(JSON,Filename,#PB_JSON_PrettyPrint )
      
      ProcedureReturn #True
    EndProcedure
    
    ProcedureDLL AddChildren(*This.Node,*Children.Node)
      AddElement(*This\Children())
      *This\Children() = *Children
      
      *Children\Parent = *This
    EndProcedure
    
    ProcedureDLL GetNodeById(*Current.Node,Id.s)
      Define *ResultNode
      
      If *Current\Id = Id
        ProcedureReturn *Current
      EndIf
      
      ForEach *Current\Children()
        *ResultNode = GetNodeById(*Current\Children(),Id)
        If *ResultNode
          ProcedureReturn *ResultNode
        EndIf
      Next
    EndProcedure
    
    ProcedureDLL GetChildrenByIndex(*This.Node,Index.i)
      SelectElement(*This\Children(),Index)
      ProcedureReturn *This\Children()
    EndProcedure
    
    ProcedureDLL GetChildrenLen(*This.Node)
      ProcedureReturn ListSize(*This\Children())
    EndProcedure
    
    ProcedureDLL RemoveNode(*This.Node, Depth.i) 
      ForEach *This\Children()
        RemoveNode(*This\Children(),Depth + 1)
      Next
      
      If Depth = 0 And FindChildren(*This\Parent,*This)
        DeleteElement(*This\Parent\Children(),1)
      EndIf
      
      FreeStructure(*This)
      
      ProcedureReturn #True
    EndProcedure
    
    ProcedureDLL GetParent(*This.Node)
      ProcedureReturn *This\Parent
    EndProcedure
    
    ProcedureDLL SetAttr(*This.Node,Name.s,Value.s)
      *This\Attrs(Name) = Value
    EndProcedure
    
    ProcedureDLL.s GetAttr(*This.Node,Name.s)
      If FindMapElement(*This\Attrs(),Name)
        ProcedureReturn *This\Attrs()
      EndIf 
    EndProcedure
    
    ProcedureDLL SetValue(*This.Node,Value.s)
      *This\Value = Value
    EndProcedure
    
    ProcedureDLL.s GetValue(*This.Node)
      ProcedureReturn *This\Value
    EndProcedure
    
    ProcedureDLL SetId(*This.Node,Id.s)
      *This\Id = Id
    EndProcedure
    
    ProcedureDLL.s GetId(*This.Node)
      ProcedureReturn *This\Id
    EndProcedure
    
    ProcedureDLL SetClass(*This.Node,Class.s)
      *This\Class = Class
    EndProcedure
    
    ProcedureDLL.s GetClass(*This.Node)
      ProcedureReturn *This\Class
    EndProcedure
    
    ProcedureDLL SetToken(*This.Node,Token.i)
      *This\Token = Token
    EndProcedure
    
    ProcedureDLL GetToken(*This.Node)
      ProcedureReturn *This\Token
    EndProcedure
    Alles anzeigen

    XML: Übersicht der Elemente und Attribute (Nicht alle Attribute funktionieren)

    Code
    <app></app>
    
    <window id="" width="" height="" show="true|false" title="" onexit=""></window>
    
    <layout id="" left="" top="" width="" height="" show="true|false" type="gridx|gridy|take" padding="" paddng-right="" padding-left="" padding-bottom="" padding-top="" margin="" margin-right="" margin-left="" margin-bottom="" margin-top=""></layout>
    <group id="" left="" top="" width="" height="" show="true|false" title="" type="gridx|gridy|take"></group>
    
    <tabview id="" left="" top="" width="" height="" show="true|false" selected="">
        <tab id="" title="" selected="true|false"></tab>
    </tabview>
    
    <list id="" left="" top="" width="" height="" show="true|false" selected="">
        <value id="" selected="true|false">TEXT</value>
    </list>
    
    <listview id="" left="" top="" width="" height="" show="true|false" columns="" selected="">
        <value id="" selected="true|false">TEXT</value>
    </listview>
    
    <treeview id="" left="" top="" width="" height="" show="true|false" selected="">
        <value id="" selected="true|false">TEXT</value>
    </treeview>
    
    <text id="" left="" top="" width="" height="" show="true|false">TEXT</text>
    <button id="" left="" top="" width="" height="" show="true|false" onclick="">TEXT</button>
    <image id="" left="" top="" width="" height="" show="true|false" src=""></image>
    <input id="" left="" top="" width="" height="" show="true|false" type="" pos="">TEXT</input>
    <textarea id="" left="" top="" width="" height="" show="true|false">TEXT</textarea>
    <checkbox id="" left="" top="" width="" height="" show="true|false" checked="true|false">TEXT</checkbox>
    <radiobox id="" left="" top="" width="" height="" show="true|false" checked="true|false">TEXT</radiobox>
    <combolist id="" left="" top="" width="" height="" show="true|false" selected="">
        <value id="" selected="true|false">TEXT</value>
    </combolist>
    Alles anzeigen

    Bilder

    • prev.PNG
      • 82,98 kB
      • 1.433 × 633

    Dateien

    XML-GUI.zip 148,99 kB – 489 Downloads XML-GUI - JSON.zip 157,73 kB – 582 Downloads
  • Snake (AutoIt, PureBasic, C#, VisualBasic .NET, JavaScript, Java, Python, Basic4Android)

    • gem
    • 27. November 2017 um 19:14

    @xSunLighTx3

    Was meinst du genau mit dem Laggen?

    Bei Java nutze ich die Standard Graphic Library (Graphics2D)

    Also in der AutoIt Version werden die GDI Ressourcen in der Close Funktion freigegeben

  • Snake (AutoIt, PureBasic, C#, VisualBasic .NET, JavaScript, Java, Python, Basic4Android)

    • gem
    • 27. November 2017 um 15:52

    @Musashi

    Danke habe soeben die Autoit Version als Dateianhang hinzugefügt

    @alpines

    Ja da hast du natürlich recht. Allerdings war mein Ziel das gleiche Ergebnis in den unterschiedlichen Programmiersrpachen zu bekommen das der Quellcode für diese einzelnen Sprachen optimiert werden kann ist mir bewusst.

    Vielleicht komm ich ja noch dazu diese anzupassen

    Ps:

    Ich habe nun noch eine Android Version in Basic4Android erstellt

  • Snake (AutoIt, PureBasic, C#, VisualBasic .NET, JavaScript, Java, Python, Basic4Android)

    • gem
    • 26. November 2017 um 23:03

    Guten Abend

    Ich habe zu Lernzwecken ein Snake-Remake in bisher 8 unterschiedlichen Programmiersprachen (AutoIt, PureBasic, C#, VisualBasic .NET, JavaScript, Java, Python, Basic4Android) programmiert.

    Das Spiel ist in den unterschiedlichen Programmiersprachen im Design und in der Steuerung (außer bei der Android Version) immer identisch.


    Vielleicht kann ja der ein oder andere damit etwas Anfangen oder mir noch Tipps geben


    [Blockierte Grafik: https://image.ibb.co/jYSvoR/Clipboard03.jpg]

    AutoIt Quellcode:


    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=icon.ico
    #AutoIt3Wrapper_Outfile=Snake_AutoIt.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <Sound.au3>
    
    Global Const $window_title = "Snake"
    Global Const $window_size = 500
    
    Global Const $block_size = 20
    Global Const $game_size = $window_size / $block_size
    
    Global Const $key_right = 27
    Global Const $key_left = 25
    Global Const $key_up = 26
    Global Const $key_down = 28
    Global Const $key_space = 20
    
    Global Enum $snake_x, $snake_y, $snake_length
    Global Enum $direction_right, $direction_left, $direction_up, $direction_down
    Global Enum $game_start, $game_play, $game_pause, $game_restart
    
    Global $window
    Global $graphics, $bitmap, $buffer
    Global $user_dll
    
    Global $snake_direction
    Global $snake_current_direction
    Global $snake[1][$snake_length]
    Global $gift_x, $gift_y, $gift_collision
    Global $game_state = $game_start
    Global $gift_sound[4]
    Global $collision_sound
    Global $collision
    Global $effect
    Global $effect_timer
    
    Global $move_timer
    
    Global $fps_timer = TimerInit()
    Global $fps_counter = 0
    Global $fps = 0
    
    init()
    
    Func init()
        $user_dll = DllOpen("user32.dll")
    
        $window = GUICreate($window_title, $window_size, $window_size)
    
        _GDIPlus_Startup()
    
        $graphics = _GDIPlus_GraphicsCreateFromHWND($window)
        $bitmap = _GDIPlus_BitmapCreateFromGraphics($window_size, $window_size, $graphics)
        $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    
        For $i = 0 To UBound($gift_sound) - 1
            $gift_sound[$i] = _SoundOpen("gift" & String($i + 1) & ".wav")
        Next
    
        $collision_sound = _SoundOpen("collision.wav")
    
        GUISetState()
    
        restart()
    
        main()
    EndFunc   ;==>init
    
    Func main()
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
            EndSwitch
    
            event()
            draw()
    
        WEnd
    
        close()
    EndFunc   ;==>main
    
    Func close()
        DllClose($user_dll)
    
        _SoundClose($collision_sound)
    
        For $i = 0 To UBound($gift_sound) - 1
            _SoundClose($gift_sound[$i])
        Next
    
        _GDIPlus_GraphicsDispose($buffer)
        _GDIPlus_BitmapDispose($bitmap)
        _GDIPlus_GraphicsDispose($graphics)
    
        _GDIPlus_Shutdown()
    
        GUIDelete($window)
    EndFunc   ;==>close
    
    Func fps()
        $fps_counter += 1
    
        If TimerDiff($fps_timer) >= 1000 Then
            $fps = $fps_counter
            $fps_counter = 0
    
            $fps_timer = TimerInit()
        EndIf
    EndFunc   ;==>fps
    
    Func restart()
        ReDim $snake[1][$snake_length]
    
        $snake[0][$snake_x] = Random(3, $game_size - 4, 1)
        $snake[0][$snake_y] = Random(3, $game_size - 4, 1)
    
        gift()
    
        $move_timer = TimerInit()
    EndFunc   ;==>restart
    
    Func gift()
        Local $find
    
        Do
            $gift_x = Random(1, $game_size - 2, 1)
            $gift_y = Random(1, $game_size - 2, 1)
    
            $find = False
    
            For $i = 0 To UBound($snake) - 1
                If $gift_x = $snake[$i][$snake_x] And $gift_y = $snake[$i][$snake_y] Then
                    $find = True
    
                    ExitLoop
                EndIf
            Next
        Until Not $find
    EndFunc   ;==>gift
    
    Func event()
        Local $restart
    
        Switch $game_state
            Case $game_start, $game_restart
                ;if start or restart game
                $restart = False
    
                If _IsPressed($key_left, $user_dll) Then
                    $snake_direction = $direction_left
                    $restart = True
                ElseIf _IsPressed($key_right, $user_dll) Then
                    $snake_direction = $direction_right
                    $restart = True
                ElseIf _IsPressed($key_up, $user_dll) Then
                    $snake_direction = $direction_up
                    $restart = True
                ElseIf _IsPressed($key_down, $user_dll) Then
                    $snake_direction = $direction_down
                    $restart = True
                EndIf
    
                If $restart Then
                    If $game_state = $game_restart Then
                        restart()
                    EndIf
    
                    $game_state = $game_play
                EndIf
            Case $game_play
                ;if play and click space
                If _IsPressed($key_space, $user_dll) Then
                    Do
                    Until Not _IsPressed($key_space, $user_dll)
                    $game_state = $game_pause
                EndIf
    
                ;if key left
                If _IsPressed($key_left, $user_dll) Then
    
                    If Not (UBound($snake) > 1 And $snake_current_direction = $direction_right) Then
    
                        $snake_direction = $direction_left
    
                    EndIf
    
                ;if key right
                ElseIf _IsPressed($key_right, $user_dll) Then
    
                    If Not (UBound($snake) > 1 And $snake_current_direction = $direction_left) Then
    
                        $snake_direction = $direction_right
                    EndIf
    
                EndIf
    
                ;if key up
                If _IsPressed($key_up, $user_dll) Then
    
                    If Not (UBound($snake) > 1 And $snake_current_direction = $direction_down) Then
                        $snake_direction = $direction_up
                    EndIf
    
                    ;if key down
                ElseIf _IsPressed($key_down, $user_dll) Then
    
                    If Not (UBound($snake) > 1 And $snake_current_direction = $direction_up) Then
                        $snake_direction = $direction_down
                    EndIf
    
                EndIf
    
                move()
            Case $game_pause
                ;if pause and click space
                If _IsPressed($key_space, $user_dll) Then
                    Do
                    Until Not _IsPressed($key_space, $user_dll)
                    $game_state = $game_play
                EndIf
        EndSwitch
    EndFunc   ;==>event
    
    Func move()
        Local $next_x, $next_y, $x_next, $y_next
    
        If TimerDiff($move_timer) >= 100 Then
            $snake_current_direction = $snake_direction
    
            $next_x = $snake[0][$snake_x]
            $next_y = $snake[0][$snake_y]
    
            Switch $snake_current_direction
                Case $direction_right
                    $next_x += 1
                Case $direction_left
                    $next_x -= 1
                Case $direction_up
                    $next_y -= 1
                Case $direction_down
                    $next_y += 1
            EndSwitch
    
            $collision = False
    
            For $i = 0 To UBound($snake) - 2
                If $next_x = $snake[$i][$snake_x] And $next_y = $snake[$i][$snake_y] Then
                    $collision = True
                    ExitLoop
                EndIf
            Next
    
            If $collision Or $next_x < 1 Or $next_x > $game_size - 2 Or $next_y < 1 Or $next_y > $game_size - 2 Then
                $collision = True
                _SoundPlay($collision_sound)
    
                $game_state = $game_restart
                Return
            EndIf
    
            If $next_x = $gift_x And $next_y = $gift_y Then
                _SoundPlay($gift_sound[Random(0, UBound($gift_sound) - 1, 1)])
    
                $gift_collision = True
    
                $i = UBound($snake)
                ReDim $snake[$i + 1][$snake_length]
    
                gift()
            EndIf
    
            For $i = 0 To UBound($snake) - 1
                $x_next = $next_x
                $y_next = $next_y
    
                $next_x = $snake[$i][$snake_x]
                $next_y = $snake[$i][$snake_y]
    
                $snake[$i][$snake_x] = $x_next
                $snake[$i][$snake_y] = $y_next
            Next
    
            $move_timer = TimerInit()
        EndIf
    EndFunc   ;==>move
    
    Func draw()
        Local $text = ""
        Local $color = 0xff99cb99
    
        If $gift_collision Then
            $gift_collision = False
            $effect = 1
            $effect_timer = TimerInit()
        ElseIf $collision Then
            $collision = False
            $effect = 2
            $effect_timer = TimerInit()
        EndIf
    
        If $effect = 1 Then
            $color = 0xffffffff
        ElseIf $effect = 2 Then
            $color = 0xffFEC6BF
        EndIf
    
        If $effect > 0 And TimerDiff($effect_timer) >= 30 Then
            $effect = 0
        EndIf
    
        _GDIPlus_GraphicsClear($buffer, $color)
    
        ;draw bound
        _GDIPlus_GraphicsDrawRect($buffer, $block_size, $block_size, $window_size - $block_size * 2, $window_size - $block_size * 2)
    
        ;draw text, score and fps
        _GDIPlus_GraphicsDrawString($buffer, "SCORE: " & String((UBound($snake) - 1) * 10), $block_size, $window_size - $block_size + 3, "Lucida Console", 10)
        _GDIPlus_GraphicsDrawString($buffer, "FPS: " & String($fps), $window_size - $block_size * 5, $window_size - $block_size + 3, "Lucida Console", 10)
    
        Switch $game_state
            Case $game_start
                $text = "CLICK ARROW KEYS TO START"
            Case $game_pause
                $text = "PAUSE, CLICK SPACE TO PLAY"
            Case $game_restart
                $text = "LOST, CLICK ARROW KEYS TO RESTART"
            Case $game_play
                $text = "HAVE FUN"
        EndSwitch
    
        _GDIPlus_GraphicsDrawString($buffer, $text, $block_size, 3, "Lucida Console", 10)
    
        ;draw snake
        For $i = 0 To UBound($snake) - 1
            _GDIPlus_GraphicsFillRect($buffer, $snake[$i][$snake_x] * $block_size + 1, $snake[$i][$snake_y] * $block_size + 1, $block_size - 2, $block_size - 2)
        Next
    
        ;draw gift
        _GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size, $gift_y * $block_size + $block_size / 3, $block_size / 3, $block_size / 3)
        _GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size + $block_size / 3 * 2, $gift_y * $block_size + $block_size / 3, $block_size / 3, $block_size / 3)
        _GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size + $block_size / 3, $gift_y * $block_size, $block_size / 3, $block_size / 3)
        _GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size + $block_size / 3, $gift_y * $block_size + $block_size / 3 * 2, $block_size / 3, $block_size / 3)
    
        _GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
    
        fps()
    EndFunc   ;==>draw
    Alles anzeigen

    In der ZIP Datei sind alle Quellcodes, ausführbare Dateien, Sounds und Icons enthalten

    DOWNLOAD: https://drive.google.com/uc?id=1FDYzRgJ…export=download

    DOWNLOAD mit Android Version: https://drive.google.com/open?id=1Rcoj3…ONG53TPVYzVc-bV

    Dateien

    Snake AutoIt.zip 724,52 kB – 492 Downloads
  • BoggleX

    • gem
    • 3. November 2017 um 02:54

    Hallo Musashi

    Zitat von Musashi

    Es geht Dir sicher um die Lizenzsituation, nicht um den Datenschutz, richtig ? ;)

    ´Da hast du recht :)

    Erstmal vielen Dank für deine hilfreichen Antworten.

    Ich habe mich erstmal entschlossen das Programm ohne Wörter-Datenbank bereitzustellen. (Siehe ersten Post)

    Ich werde schauen das ich eine Wörteliste finde bei der es keine rechtliche Bedenken gibt. Dein Link hab ich mir angeschaut vielleicht schaff ich ja damit eine Variante bereitzustellen sollte es dort keine Bedenken geben.


    Gabriel

  • BoggleX

    • gem
    • 2. November 2017 um 19:58

    [Blockierte Grafik: http://www.bilder-upload.eu/upload/bd7c1e-1509649050.jpg]

    Guten Abend

    Da ich in letzter Zeit häufiger Boggle gespielt habe wollte ich ein Programm schreiben was für das Spiel alle möglichen Wörter ausgeben kann.

    Die Eingabe der einzelnen Buchstaben erfolgt manuell oder durch den Zufallsgenerator mithilfe der Buchstabenhäufigkeit.

    Anschließend lassen sich alle möglichen Wörter auflisten die in der Wörter-Datenbank vorhanden sind.

    Diese habe ich von einem OpenOffice Erweiterung entnommen (https://extensions.openoffice.org/en/project/ger…mi-dictionaries).

    Da ich mir hinsichtlich rechtlicher Bedingungen nicht sicher bin sollte mich bitte jemand im Falle des Datenschutz darauf hinweisen so das ich diese aus dem Programm entfernen kann.

    Leider kann ich aus rechtlichen Gründen bis jetzt keine Wörter-Datenbank mitliefern.

    Ich werde mich bemühen eine nachzuliefern

    Der Aufbau der Wörter-Datenbank:

    Alle Wörter müssen in Kleinbuchstaben ohne Umlaute und ß Zeilenweise in die Words.dat eingetragen werden. Fertig!

    Das Programm habe ich zunächst in PureBasic programmiert und anschließend in AutoIt. In der AutoIt Version gibt es auch die Möglichkeit das Wörter finden mithilfe einer PureBasic-DLL zu beschleunigen.

    Ich freue mich über Feedback

    Viel Spaß

    Gabriel

    Dateien

    BoggleX [1.00] - Ohne Wörter-Datenbank.zip 518,12 kB – 510 Downloads
  • Isome (AutoIt-2d-Isometrie-Engine) + Isome Demo und Isome Snake

    • gem
    • 11. Mai 2017 um 12:05

    Isome

    Hallo allerseits

    Ich habe aus Interesse eine kleine Engine geschrieben womit sich eine 2d Karte isometrisch darstellen lässt. Die Umrechnung von Mauskoordinaten in die Kartenkoordinaten funktioniert auch.
    Somit lassen sich kleine Aufbauspiele realisieren :)

    Wenn ihr Spaß hab könnt ihr damit ein bißchen rumspielen und verbesserungswünschen äußern (bugs natürlich auch :) ).

    Bilder

    [Blockierte Grafik: https://picload.org/image/rcwwrraw/img2.jpg]

    [Blockierte Grafik: https://picload.org/image/rcwwrror/img1.jpg]
    Funktionen

    • Fenstegröße änderbar
    • tilegröße änderbar
    • kartengröße änderbar
    • kartenbewegung mit maus
    • kartenbewegung mit tastatur
    • Mausklick auf Karte (Koordinatenumrechnung)


    Quellcode


    Isome


    AutoIt
    ;isome globals
    
    
    ;fenstergröße
    Global $window_width
    Global $window_height
    
    
    ;tileset größen
    Global $tile_width
    Global $tile_height
    
    
    ;karteneigenschaften
    Global $game_map_width
    Global $game_map_height
    Global $game_map_x
    Global $game_map_y
    
    
    Global $game_map
    
    
    ;beweggeschwindigkeit und überlauf
    Global $game_map_smooth_x
    Global $game_map_smooth_y
    Global $game_map_speed
    
    
    ;maus
    Global $mouse_x
    Global $mouse_y
    
    
    ;game_resize()
    
    
    Func game_resize($width, $height)
    	$window_width = $width
    	$window_height = $height
    EndFunc   ;==>game_resize
    
    
    ;game_position()
    
    
    Func game_position($x, $y)
    	$mouse_x = $x
    	$mouse_y = $y
    EndFunc   ;==>game_position
    
    
    ;game_init()
    
    
    Func game_init($width, $height, $tile_size, $map_width, $map_height, $map_x, $map_y, $default_value)
    	game_resize($width, $height)
    
    
    	$tile_width = $tile_size * 2
    	$tile_height = $tile_size
    
    
    	$game_map_width = $map_width
    	$game_map_height = $map_height
    	$game_map_x = $map_x
    	$game_map_y = $map_y
    
    
    	$game_map_smooth_x = 0
    	$game_map_smooth_y = 0
    
    
    	$game_map_speed = $tile_height / 4
    
    
    	Dim $game_map[$game_map_width][$game_map_height]
    
    
    	;clear game_map
    
    
    	game_map_fill($default_value)
    EndFunc   ;==>game_init
    
    
    ;game_map_fill()
    
    
    func game_map_fill($value)
    	For $x = 0 To $game_map_width - 1
    		For $y = 0 To $game_map_height - 1
    			$game_map[$x][$y] = $value
    		Next
    	Next
    EndFunc
    
    
    ;game_input()
    
    
    Func game_input($moveable_keyboard = False, $moveable_mouse = False, $clickable = False, $click_event = False)
    	Local $diffx
    	Local $diffy
    	Local $mx
    	Local $my
    	Local $map_field
    	Local $border = 6
    
    
    	;pfeiltastenbewegung
    	If $moveable_keyboard Then
    		If _IsPressed(25) Then
    			$game_map_smooth_x -= $game_map_speed
    		ElseIf _IsPressed(27) Then
    			$game_map_smooth_x += $game_map_speed
    		EndIf
    
    
    		If _IsPressed(26) Then
    			$game_map_smooth_y -= $game_map_speed
    		ElseIf _IsPressed(28) Then
    			$game_map_smooth_y += $game_map_speed
    		EndIf
    	EndIf
    
    
    	;mausbewegung
    	If $moveable_mouse Then
    		If $mouse_x <= $border Then
    			$game_map_smooth_x -= $game_map_speed
    		ElseIf $mouse_x >= $window_width - $border * 2 Then
    			$game_map_smooth_x += $game_map_speed
    		EndIf
    
    
    		If $mouse_y <= $border Then
    			$game_map_smooth_y -= $game_map_speed
    		ElseIf $mouse_y >= $window_height - $border * 2 Then
    			$game_map_smooth_y += $game_map_speed
    		EndIf
    	EndIf
    
    
    	;überlauf
    	If $moveable_keyboard Or $moveable_mouse Then
    		If $game_map_smooth_x <= 0 - $tile_width Then
    			$game_map_x -= 1
    			$game_map_y -= 1
    
    
    			$game_map_smooth_x = 0
    		ElseIf $game_map_smooth_x >= $tile_width Then
    			$game_map_x += 1
    			$game_map_y += 1
    
    
    			$game_map_smooth_x = 0
    		EndIf
    
    
    		If $game_map_smooth_y <= 0 - $tile_height Then
    			$game_map_x += 1
    			$game_map_y -= 1
    
    
    			$game_map_smooth_y = 0
    		ElseIf $game_map_smooth_y >= $tile_height Then
    			$game_map_x -= 1
    			$game_map_y += 1
    
    
    			$game_map_smooth_y = 0
    		EndIf
    	EndIf
    
    
    	;maustatse gedrückt
    	If $clickable Then
    		If _IsPressed(1) Or _IsPressed(2) Then
    			$x = $game_map_x
    			$y = $game_map_y
    
    
    			$diffx = Int(($mouse_x + $tile_width * 2 + $game_map_smooth_x) / $tile_width)
    			$diffy = Int(($mouse_y + $tile_height * 2 + $game_map_smooth_y) / $tile_height)
    
    
    			$x += $diffx
    			$y += $diffx
    
    
    			$y += $diffy
    			$x -= $diffy
    
    
    			$mx = Mod(($mouse_x + $tile_width * 2 + $game_map_smooth_x), $tile_width)
    			$my = Mod(($mouse_y + $tile_height * 2 + $game_map_smooth_y), $tile_height)
    
    
    			If $mx < $tile_width / 2 Then
    				If $my < $tile_height / 2 And $mx * 0.5 < ($tile_height / 2) - $my Then
    					$y -= 1
    
    
    				ElseIf $mx * -0.5 > ($tile_height / 2) - $my Then
    
    
    					$x -= 1
    				EndIf
    			Else
    
    
    				$mx -= $tile_width / 2
    				If $my < $tile_height / 2 And $mx * -0.5 < 0 - $my Then
    					$x += 1
    
    
    				ElseIf $mx * 0.5 > ($tile_height) - $my Then
    
    
    					$y += 1
    				EndIf
    			EndIf
    
    
    			$map_field = game_map_get($x, $y)
    
    
    			If $map_field Then
    				$click_event($x, $y, $map_field)
    			EndIf
    
    
    		EndIf
    	EndIf
    EndFunc   ;==>game_input
    
    
    ;game_map_get()
    
    
    Func game_map_get($x, $y)
    	If $x >= 0 And $y >= 0 And $x < $game_map_width And $y < $game_map_height Then
    		Return $game_map[$x][$y]
    	EndIf
    
    
    	Return False
    EndFunc   ;==>game_map_get
    
    
    ;game_map_set()
    
    
    Func game_map_set($x, $y, $value)
    	If $x >= 0 And $y >= 0 And $x < $game_map_width And $y < $game_map_height Then
    		$game_map[$x][$y] = $value
    
    
    		Return True
    	EndIf
    
    
    	Return False
    EndFunc   ;==>game_map_set
    
    
    ;game_draw()
    
    
    Func game_draw($buffer, $event_draw)
    	Local $draw_left
    	Local $draw_top = -$tile_height * 2 - $game_map_smooth_y
    	Local $game_map_x_start = $game_map_x
    	Local $game_map_y_start = $game_map_y
    	Local $n = 0
    	Local $x
    	Local $y
    	Local $map_field
    	Local $tile
    	Local $scaled_h
    
    
    	Do
    		$x = $game_map_x_start
    		$y = $game_map_y_start
    
    
    		$draw_left = -$tile_width * 2 - $game_map_smooth_x
    
    
    		If Mod($n, 2) <> 0 Then
    			$draw_left += $tile_width / 2
    			$game_map_x_start -= 1
    		Else
    			$game_map_y_start += 1
    
    
    		EndIf
    
    
    		$n += 1
    
    
    		Do
    			$map_field = game_map_get($x, $y)
    
    
    
    
    			If $map_field Then
    				$tile = $event_draw($x, $y, $map_field)
    
    
    				$scaled_h = ($tile_width / _GDIPlus_ImageGetWidth($tile)) * _GDIPlus_ImageGetHeight($tile)
    
    
    				_GDIPlus_GraphicsDrawImageRect($buffer, $tile, $draw_left, $draw_top - $scaled_h + $tile_height, $tile_width, $scaled_h)
    			EndIf
    
    
    			$x += 1
    			$y += 1
    
    
    			$draw_left += $tile_width
    		Until $draw_left >= $window_width
    
    
    
    
    
    
    		$draw_top += $tile_height / 2
    	Until $draw_top >= $window_height + $tile_height * 2
    EndFunc   ;==>game_draw
    Alles anzeigen


    Isome Demo

    AutoIt
    #include <gdiplus.au3>
    #include <misc.au3>
    #include <windowsconstants.au3>
    #include <guiconstants.au3>
    
    
    #include <isome.au3>
    
    
    $screen_width = 800
    $screen_height = 600
    
    
    $gui = GUICreate("Isome Demo", $screen_width, $screen_height, -1, -1, $WS_MINIMIZEBOX + $WS_SIZEBOX)
    
    
    _GDIPlus_Startup()
    
    
    $graphics = _GDIPlus_GraphicsCreateFromHWND($gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($screen_width, $screen_height, $graphics)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    
    
    $tile1 = _GDIPlus_ImageLoadFromFile("tile1.png")
    $tile2 = _GDIPlus_ImageLoadFromFile("tile2.png")
    
    
    GUISetState()
    
    
    $pos = WinGetClientSize($gui)
    
    
    $screen_width = $pos[0]
    $screen_height = $pos[1]
    
    
    ;game_init($width,$height,$tile_size,$map_width,$map_height,$map_x,$map_y,$default_value)
    game_init($screen_width, $screen_height, 64, 50, 50, 10, 10, 1)
    
    
    While True
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    		Case $GUI_EVENT_RESIZED
    			$pos = WinGetClientSize($gui)
    
    
    			$screen_width = $pos[0]
    			$screen_height = $pos[1]
    
    
    			game_resize($screen_width, $screen_height)
    
    
    			_GDIPlus_GraphicsClear($buffer)
    			_GDIPlus_BitmapDispose($bitmap)
    			_GDIPlus_GraphicsClear($graphics)
    
    
    			$graphics = _GDIPlus_GraphicsCreateFromHWND($gui)
    			$bitmap = _GDIPlus_BitmapCreateFromGraphics($screen_width, $screen_height, $graphics)
    			$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    	EndSwitch
    
    
    
    
    	$info = GUIGetCursorInfo()
    
    
    	If Not @error Then
    		game_position($info[0], $info[1])
    	EndIf
    
    
    	;game_input($moveable_keyboard = false,$moveable_mouse = false,$clickable = false,$click_event = false)
    	game_input(True, True, True, click_event)
    
    
    	_GDIPlus_GraphicsClear($buffer, 0xffffffff)
    
    
    	;game_draw($buffer,$event_draw)
    	game_draw($buffer, draw_event)
    
    
    	_GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
    
    
    	Sleep(5)
    WEnd
    
    
    
    
    
    
    Func click_event($x, $y, $value)
    
    
    	If _IsPressed(1) Then
    		game_map_set($x, $y, 2)
    	ElseIf _IsPressed(2) Then
    		game_map_set($x, $y, 1)
    	EndIf
    EndFunc   ;==>click_event
    
    
    Func draw_event($x, $y, $value)
    	If $value = 1 Then
    		Return $tile1
    	ElseIf $value = 2 Then
    		Return $tile2
    	EndIf
    
    
    EndFunc   ;==>draw_event
    Alles anzeigen


    Isome Snake


    AutoIt
    #include <gdiplus.au3>
    #include <misc.au3>
    #include <windowsconstants.au3>
    #include <guiconstants.au3>
    
    
    #include <isome.au3>
    
    
    $screen_width = 840
    $screen_height = 400
    
    
    $gui = GUICreate("Isome Snake", $screen_width, $screen_height)
    
    
    _GDIPlus_Startup()
    
    
    $graphics = _GDIPlus_GraphicsCreateFromHWND($gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($screen_width, $screen_height, $graphics)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    
    
    $tile1 = _GDIPlus_ImageLoadFromFile("tile_snake1.png")
    $tile2 = _GDIPlus_ImageLoadFromFile("tile_snake2.png")
    $tile3 = _GDIPlus_ImageLoadFromFile("tile_snake3.png")
    
    
    GUISetState()
    
    
    
    
    ;game_init($width,$height,$tile_size,$map_width,$map_height,$map_x,$map_y,$default_value)
    game_init($screen_width, $screen_height, 32, 10, 10,4, -11, 1)
    
    
    
    
    ;snake
    
    
    ;snake init
    
    
    $snake_x = random(3,6,1)
    $snake_y = random(3,6,1)
    $snake_length = 1
    dim $snake[$snake_length][2]
    
    
    $snake[0][0] = $snake_x
    $snake[0][1] = $snake_x
    
    
    $snake_direction =Random(1,4,1)
    $current_direction = $snake_direction
    
    
    ;const
    
    
    const $direction_right = 1
    const $direction_left = 2
    const $direction_top = 3
    const $direction_down = 4
    
    
    $gift = false
    
    
    $timer = TimerInit()
    
    
    
    
    While True
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    	EndSwitch
    
    
    
    
    ;tastatursteuerung pfeilasten recht,links,oben,unten
    ;~ 	If _IsPressed(25) Then
    ;~ 			$snake_direction = $direction_right
    ;~ 		ElseIf _IsPressed(27) Then
    ;~ 			$snake_direction = $direction_left
    ;~ 		EndIf
    
    
    ;~ 		If _IsPressed(26) Then
    
    
    ;~ 			$snake_direction = $direction_top
    ;~ 		ElseIf _IsPressed(28) Then
    ;~ 			$snake_direction = $direction_down
    ;~ 		EndIf
    
    
    ;~ 		;tastatursteurung pfeiltasten rechts,links
    
    
    		If _IsPressed(25) Then
    		switch $current_direction
    			case $direction_right
    				$snake_direction = $direction_down
    			case $direction_left
    				$snake_direction = $direction_top
    			case $direction_top
    				$snake_direction = $direction_right
    			case $direction_down
    				$snake_direction = $direction_left
    		EndSwitch
    		ElseIf _IsPressed(27) Then
    		switch $current_direction
    			case $direction_right
    				$snake_direction = $direction_top
    			case $direction_left
    				$snake_direction = $direction_down
    			case $direction_top
    				$snake_direction = $direction_left
    			case $direction_down
    				$snake_direction = $direction_right
    		EndSwitch
    		EndIf
    
    
    
    
    	if TimerDiff($timer) >= 300 then
    	;moving
    		$before_x = $snake[0][0]
    		$before_y = $snake[0][1]
    
    
    		$current_direction = $snake_direction
    
    
    		switch $current_direction
    			case $direction_right
    				$before_x-=1
    			case $direction_left
    				$before_x+=1
    			case $direction_top
    				$before_y-=1
    			case $direction_down
    				$before_y+=1
    		EndSwitch
    
    
    ;add snake lengzh if gift collision
    		if game_map_get($before_x,$before_y) =3 then
    			$snake_length += 1
    			redim $snake[$snake_length][2]
    
    
    			$snake[$snake_length-1][0] = -1
    			$snake[$snake_length-1][1] = -1
    
    
    			game_map_set($before_x,$before_y,1)
    
    
    			$gift = false
    		endif
    
    
    ;collision
    		$find_collision = false
    
    
    		for $i = 0 to $snake_length-1
    			if $before_x = $snake[$i][0] and $before_y = $snake[$i][1] then
    				$find_collision = true
    			endif
    		Next
    
    
    		if $before_x < 0 or $before_x >= 10 or $before_y < 0 or $before_y >= 10 or $find_collision then
    			;restart
    			game_map_fill(1)
    
    
    			$snake_x = random(3,6,1)
    			$snake_y = random(3,6,1)
    			$snake_length = 1
    			dim $snake[$snake_length][2]
    
    
    			$snake[0][0] = $snake_x
    			$snake[0][1] = $snake_x
    
    
    			$snake_direction = Random(1,4,1)
    
    
    			$gift = false
    
    
    			$current_direction = $snake_direction
    		else
    			for $i = 0 to $snake_length-1
    				$xb = $before_x
    				$yb = $before_y
    
    
    				$before_x = $snake[$i][0]
    				$before_y = $snake[$i][1]
    
    
    				$snake[$i][0] = $xb
    				$snake[$i][1] = $yb
    
    
    				game_map_set($before_x,$before_y,1)
    
    
    				game_map_set($snake[$i][0],$snake[$i][1],2)
    			Next
    		endif
    
    
    		if not $gift then
    		;new gift
    
    
    
    
    			do
    				$giftx = random(0,9,1)
    				$gifty = random(0,9,1)
    
    
    				$find_collision = false
    
    
    				for $i = 0 to $snake_length-1
    					if $giftx = $snake[$i][0] and $gifty = $snake[$i][1] then
    						$find_collision = true
    						ExitLoop
    					endif
    				Next
    			Until not $find_collision
    
    
    			game_map_set($giftx,$gifty,3)
    
    
    			$gift = true
    		endif
    
    
    		$timer = TimerInit()
    	endif
    
    
    	;game_input($moveable_keyboard = false,$moveable_mouse = false,$clickable = false,$click_event = false)
    	game_input(false, false, false, false)
    
    
    	_GDIPlus_GraphicsClear($buffer, 0xffffffff)
    
    
    	;game_draw($buffer,$event_draw)
    	game_draw($buffer, draw_event)
    
    
    
    
    	_GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
    
    
    	Sleep(5)
    WEnd
    
    
    Func draw_event($x, $y, $value)
    	If $value = 1 Then
    		Return $tile1
    	ElseIf $value = 2 Then
    		Return $tile2
    	elseif $value = 3 Then
    		Return $tile3
    	EndIf
    
    
    EndFunc   ;==>draw_event
    Alles anzeigen

    Dateien

    Isome.zip 36,27 kB – 395 Downloads
  • Grafik/Sound Demo (InfoBox)

    • gem
    • 28. November 2016 um 17:42

    Hallo Cape-City

    Da ich zurzeit auch wieder hier ab und an unterwegs bin hab ich deine schicke infobox entdeckt.
    Ein schönes Skript und sauber programmiert . Außer dem nervenden Sound alles top ^^ ... Gute Arbeit

    Kleiner Vorschlag
    Der Weiße Rand des oberen roten Textes ist ziemlich kantig. Wenn man länger drauf guckt tuts in den Augen weh ;)

  • Hexagon (Grafikprogramm)

    • gem
    • 28. November 2016 um 16:24

    Hexagon (Grafikprogramm)
    Build 1.005

    Einleitung

    Liebe AutoIt Gemeinde
    Ich programmiere nun schon seit einigen Jahren und bin ab und an auf einigen Foren unterwegs und muss aber feststellen das dieses Forum mit Abstand das beste im ganzen Netzt bleibt/ist/bleiben wird . Leider komm ich nicht mehr so häufig dazu in AutoIt zu programmieren. Das liegt daran das ich mich eher mit serverseitigen Programmiersprachen beschäftige und wenn mal nicht dann brauch ich ordentlich Power und da scheiter ich bei AutoIt (Liegt natürlich an meiner Faulheit, AutoIt würde das locker packen :) ). So hatte ich dieses Programm auch zunächst versucht in AutoIt zu realisieren.
    Nun möchte ich euch ein Programm vorstellen womit ich mich die letzten Tage beschäftigt habe.
    Also schreibt gerne wie es euch gefällt ob ihr ein Bug entdeckt habt oder Verbesserungsvorschläge habt.
    Ich freu mich und bin gespannt.

    Idee

    Ein guter Freund von mir zeichnete immer diese Sechsecke und brachte ganz verrückte Formen hervor. Das faszinierte mich und so enstand dann auch die Idee hierfür.

    Programm

    Die Anwendung wurde in PureBasic (5.3) geschrieben.
    Für die grafische Ausgabe wird die cairo lib verwendet (https://www.cairographics.org/)
    Für die Musikwiedergabe und Höhenwerte wird die bass lib verwendet (http://www.un4seen.com/)
    Alle benötigten Bibliotheken sind in der Zip Datei vorhanden.

    To-Do´s für nächste Version:
    - Videoaufnahme
    - Neuer Mixervorlagen
    - Mixervorlagen öffnen und speichern

    Bilder

    [Blockierte Grafik: http://fs5.directupload.net/images/161128/9n2nu53d.jpg]

    [Blockierte Grafik: http://fs5.directupload.net/images/161128/c7kzicio.jpg]

    Bedienung

    Öffnet die Hexagon.exe. Zunächst klickt auf den mittleren weißen Punkt und ab da probiert einfach mal ein bißchen aus :)
    Im oberen Bereich des Fensters ist die Menüleiste.
    Funktionen der einzelnen Button:


    H Sechsecke werden neu animiert
    Dokument + Alle Würfel löschen
    Dokument (Pfeil runter) Datei laden
    Dokument (Pfeil hoch) Datei speichern
    Zeiger Sechseckseiten können ein- und ausgeblendet werden
    Gruppenfarbe 1-9 Jede Sechseckseite kann einer Gruppe zugewiesen werden
    Jede Gruppe kann koloriert werden
    (Mit Doppelklick erscheint ein Farbfenster)
    Hintergrundfarbe Ändert die Hintergrundfarbe
    (Mit Doppelklick erscheint ein Farbfenster)
    Links, Rechts, Oben, Unten Zeichenoberfläche bewegen
    (Auch mit den Pfeiltasten oder Klicken und Ziehen der Maus)
    Zoom In, Zoom Out Zeichenoberfläche zoomen
    (Mausrad)
    Vorschau Vorschaumodus ein- und ausblenden
    Im Vorschaumodus werden Buttons und das Menü nach einiger Zeit ausgeblendet
    (Leertaste)
    Vollbild Vollbild ein- und ausblenden
    Plugin Record Erstellt PNG Datei
    Plugin Bass Einfacher Klick:
    Öffnent Auswahlfenster für Mp3 Datei und spielt diese mit erfolgreichen Laden ab


    Linksklick:
    Öffnet Einstellungen


    Mixer


    Hier könnt ihr euch richtig austoben wer das Prinzip versteht kann hier alle Möglichen Farbmischungen hervorholen.
    (Sollte es dazu Fragen geben einfach stellen und ich werde es ausführlich erklären :) )
    (Es liegen bis jetzt drei Vorlagen vor)
    Plugin Rotate Einfacher Klick:
    Zeichenfläche wird Rotiert bis Leertaste oder Button erneut gedrückt wird


    Linksklick:
    Öffnet Einstellungen
    Plugin Random Einfacher Klick:
    Ändert zufällig die Gruppen der Würfel


    Doppelklick:
    Erstellt zufällig Würfel


    Linksklick:
    Öffnet Einstellungen

    Dateien

    Hexagon (Build 1.005).zip 1,65 MB – 407 Downloads
  • Assemblercode - Noch optimierbar?

    • gem
    • 23. November 2016 um 22:08

    hey leute
    super interessant das thema und spannend wie hier an allen ecken und kanten optimiert wird :)

    hier mal meine testergebnisse.

    Andy:

    ASM:
    : $pi Leibnitz = 3.14159255358581
    : Time [ms] = 19.2128344097284

    UEZ:
    VS2015_C++_Leibniz-PI_x64
    Pi: 3.1415925535897915 38.149658000000002 ms.
    VS2015_C++_Leibniz-PI_x86:
    Pi: 3.1415925535897915 38.162696000000004 ms.
    FB_Leibniz-PI_x86
    PI: 3.141592553589792 88.51868021884002 ms for 10000000 iterations.

    mein pc:
    intel core i3-4170 3.7ghz
    win10x64
    8 gb ram

  • Snake - kleiner Zeitvertreib für Zwischendurch

    • gem
    • 19. Januar 2015 um 17:42

    Sieht gut und solide aus.
    Der Abschnitt in dem der Bonus-Punkt gesetzt wird kommt doppelt vor evt. in eine Funktion packen

  • GDI Editor 2 [in Entwicklung]

    • gem
    • 19. Januar 2015 um 16:15

    @ShitDown

    Danke fürs Feedback.
    Die Fehler bzw. Verbesserungsvorschläge sind allesamt sehr Hilfreich. Vielen Dank dafür.
    Ich versuche in nächster Zeit am Projekt weiter zuarbeiten und die Vorschläge umzusetzen.

    Welche Windows Version verwendest du? Die Werkzeugleiste sollte unter WinXP laufen

    @teamnoobPDB

    Danke. Tipp wird umgesetzt

  • GDI Editor 2 [in Entwicklung]

    • gem
    • 17. Januar 2015 um 19:51

    [Blockierte Grafik: http://www11.pic-upload.de/17.01.15/8ca7qqjaj7f5.png]

    Guten Abend
    Ich stelle euch ein Programm vor mit dem Ihr mit GDI und GDIPlus zeichnen könnt.
    Das Programm befindet sich in der Entwicklung. Zurzeit kann man nur Rechtecke, Ellipsen und Linien zeichnen. Die Füllfarbe, Linienbreite, Linienfarbe kann festgelegt werden.
    Alle Objekte können selektiert,kopiert, eingefügt, gelöscht, frei bewegt und transformiert werden. Ihr könnt euer Projekt speichern und später wieder öffnen. Ihr könnt das Ergebnis als Bild speichern oder für AutoIt die GDI Zeichenfunktionen exportieren.
    Ein Gitter zur übersicht kann induviduell angepasst werden.

    Getestet unter Microsoft Windows XP 32Bit SP3 ; AutoIt v.3.3.10.2

    Das Programm befindet sich im Anhang

    PS: Bitte alle Fehler und Vorschläge posten damit ich diese Beheben bzw. Umsetzen kann

  • Uhr

    • gem
    • 17. Dezember 2014 um 15:45

    @Christoph54

    Danke :)
    Den Code hätte man natürlich optimieren können allerdings hatte ich mir vor dem Video keine wirklichen Gedanken drüber gemacht und wollte nicht im Video zeigen wie ich versuch den Code zu optimieren.

    @KloMeister

    Danke.
    Entweder habe ich davor nie wirklich hingeguckt oder ich habe sowelche Uhren schonmal gesehen :) Interessant.

  • Uhr

    • gem
    • 15. Dezember 2014 um 22:18

    [Blockierte Grafik: http://fs1.directupload.net/images/141215/8bcq6qym.png]

    Ich habe eine grafische Uhr in AutoIt programmiert.

    Das ganze ist nichts großes. Allerdings ist es mein erstes Programm wo ich den Vorgang als Video für YouTube aufgenommen habe. Also mein erstes YouTube-Video :).
    Hier die Links.
    Teil 1: https://www.youtube.com/watch?v=1c53XnOzsq8
    Teil 2: https://www.youtube.com/watch?v=VJTN44uo7HM
    Freue mich über Kritik.

    Hier der Code:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $window
    Global $window_size = 500
    Global $window_title = "Uhr"
    Global $window_timer

    [/autoit][autoit][/autoit][autoit]

    Global $graphics
    Global $bitmap
    Global $buffer
    Global $pen
    Global $pen_minute, $pen_hour, $pen_second

    [/autoit][autoit][/autoit][autoit]

    Global $PI = 3.14159265359

    [/autoit][autoit][/autoit][autoit]

    init()

    [/autoit][autoit][/autoit][autoit]

    func init()
    $window = GUICreate($window_title,$window_size,$window_size)

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_Startup()

    [/autoit][autoit][/autoit][autoit]

    $graphics = _GDIPlus_GraphicsCreateFromHWND($window)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($window_size,$window_size,$graphics)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    $pen = _GDIPlus_PenCreate(0xFF333333,10)
    $pen_minute = _GDIPlus_PenCreate(0xFFDDDDDD,3)
    $pen_hour = _GDIPlus_PenCreate(0xFF666666,3)
    $pen_second = _GDIPlus_PenCreate(0xFFFF0000,2)

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsSetSmoothingMode($buffer,2)

    [/autoit][autoit][/autoit][autoit]

    GUISetState(@SW_SHOW,$window)

    [/autoit][autoit][/autoit][autoit]

    $window_timer = TimerInit()

    [/autoit][autoit][/autoit][autoit]

    main()
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func main()
    Do
    if TimerDiff($window_timer) >= 30 then
    $window_timer = TimerInit()

    [/autoit][autoit][/autoit][autoit]

    update()
    EndIf
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit][autoit][/autoit][autoit]

    close()
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func close()
    _GDIPlus_PenDispose($pen)
    _GDIPlus_PenDispose($pen_minute)
    _GDIPlus_PenDispose($pen_hour)
    _GDIPlus_PenDispose($pen_second)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($buffer)

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_Shutdown()

    [/autoit][autoit][/autoit][autoit]

    GUIDelete($window)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func update()
    _GDIPlus_GraphicsClear($buffer,0xFFFFFFFF)

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsDrawEllipse($buffer,50,50,$window_size-100,$window_size-100,$pen)

    [/autoit][autoit][/autoit][autoit]

    $rad = 0
    $diff = ($PI*2) / 12
    Do
    _GDIPlus_GraphicsDrawLine($buffer,$window_size/2+sin($rad)*180,$window_size/2+cos($rad)*180,$window_size/2+sin($rad)*200,$window_size/2+cos($rad)*200,$pen)

    [/autoit][autoit][/autoit][autoit]

    $rad += $diff
    Until $rad >= $PI*2

    [/autoit][autoit][/autoit][autoit]

    ;minute
    $rad = -(($PI*2) / 60) *@MIN-$PI
    $value = 150
    _GDIPlus_GraphicsDrawLine($buffer,$window_size/2,$window_size/2,$window_size/2+sin($rad)*$value,$window_size/2+cos($rad)*$value,$pen_minute)

    [/autoit][autoit][/autoit][autoit]

    ;hour
    $rad = -(($PI*2) / 12) *@HOUR-$PI
    $value = 80
    _GDIPlus_GraphicsDrawLine($buffer,$window_size/2,$window_size/2,$window_size/2+sin($rad)*$value,$window_size/2+cos($rad)*$value,$pen_hour)

    [/autoit][autoit][/autoit][autoit]

    ;second
    $rad = -(($PI*2) / 60) *@SEC-$PI
    $value = 170
    _GDIPlus_GraphicsDrawLine($buffer,$window_size/2,$window_size/2,$window_size/2+sin($rad)*$value,$window_size/2+cos($rad)*$value,$pen_second)

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsDrawImage($graphics,$bitmap,0,0)
    EndFunc

    [/autoit]
  • Team gesucht

    • gem
    • 29. Mai 2014 um 14:48

    hey leute ich bin gabriel, 19 jahre alt und komme aus berlin

    ich programmiere schon seit längerem in verschieden bereichen.
    leider hab ich bis jetzt keine leute gefunden mit den ich größe projekte meistern könnte :)
    zurzeit programmiere ich ein cms, browserspiel und andere sachen. das problem bei der sache ist das die sachen zwar alle funktionieren aber doch nicht mehr so schön sind wie sie sein sollten. ich denke mit paar anderen leute könnten das richtig gute sachen werden.

    also wenn du lust auf größere projekte hast würde ich mich freuen wenn wir zusammen arbeiten könnten. ich freue mich natülich auch wenn ihr ideen und wünsche habt von sachen die ihr programmieren wollt.

    kurz gesagt ich würde gerne mit einem team verschiedene projekte machen :)

    vorraussetzung
    es wäre cool wenn du aus berlin oder der umgebung kommst.
    du solltest ahnung von PHP, HTML, CSS, JavaScript, SQL, Apache oder JQuery haben ( du musst nicht alles können).
    wenn du lieber in Java, AutoIt oder PureBasic arbeitest können wir das auch machen.
    oder du schreibst mir einfach in was du gerne arbeitest. cool wären auch leute die grafiken machen können

    ich würde mich freuen über einige mitteilungen
    bei fragen schreibt mich einfach an

    schöne grüße
    Gabriel

  • OnClick

    • gem
    • 16. Oktober 2013 um 16:12

    werden die events nicht erst ausgeführt wenn man das inputfeld wieder verlässt?

    habe lange nichts mehr in autoit gemacht.die lösung ist keine gute aber eine lösung :)
    wenn der fokus auf dem input liegt wird der button unsichtbar wenn der fokus das input verlässt erscheint der button wieder

    [autoit]

    #include <winapi.au3>

    [/autoit][autoit][/autoit][autoit]

    $gui = GUICreate("example", 623, 442, 192, 114)
    $button = GUICtrlCreateButton("Button1", 190, 140)
    $button2 = GUICtrlCreateButton("Button2", 190, 170)
    $input = GUICtrlCreateInput("Input", 60, 140, 121, 21)
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    $timer = TimerInit()

    [/autoit][autoit][/autoit][autoit]

    While true
    switch GUIGetMsg()
    case -3
    GUIDelete($gui)
    Exit
    EndSwitch
    if TimerDiff($timer>1000) Then
    if _WinAPI_GetFocus() = GUICtrlGetHandle($input) then
    if GUICtrlGetState($button) = 80 Then
    GUICtrlSetState($button,32)
    EndIf
    else
    if GUICtrlGetState($button) = 96 Then
    GUICtrlSetState($button,16)
    EndIf
    endif
    $timer = TimerInit()
    EndIf
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™