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. eukalyptus

Beiträge von eukalyptus

  • Super Mario Jump n Run

    • eukalyptus
    • 11. August 2009 um 12:58

    Hab eine neue Version (im ersten Post)

    Als wichtigstes hab ich die Geschwindigkeit optimiert.
    Jetzt läuft das Spiel auch dann flüssig, wenn viele Geldstücke, Aufzüge usw. im Level vorkommen...
    Auch ein Sleep zur Prozessorentlastung hab ich eingebaut, allerdings nur dann, wenn alle Berechnungen schon fertig sind.

    Weiters hab ich auch die Level-Struktur von Gummibaer übernommen :thumbup:

    Auf die Sounds verzichte ich vorerst noch, da ich befürchte, daß es im Script nocht zu viele Änderungen geben wird...
    Aber die Soundfiles gibt es schon mal - Thx Gummibaer!

    lgE

    Edit:
    Ach ja, nicht wundern, wenn man am Schluß nicht über die Fahne kommt, das ist noch nicht fertig :P

  • Super Mario Jump n Run

    • eukalyptus
    • 11. August 2009 um 04:28

    Also einen Leveleditor gibt es eigentlich schon...

    Dies ist natürlich NICHT die endgültige Version, da sie wirklich schlecht und langsam zu bedienen ist!
    Sondern nur schnell mal hinprogrammiert, um mir die Entwicklung des Games etwas zu vereinfachen.

    Zum Testen reichts mal aus ;)

    Spoiler anzeigen
    [autoit]

    #include <ScrollBarConstants.au3>
    #include <GuiScrollBars.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Global $iScroll = 0, $iItem = 0, $iLX = 0, $iLY = 0

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

    Global $hGui = GUICreate("Level Editor", 320 * 3 + 3, 640)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_EXIT")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "_Settings")
    Global $hItem[60]
    Global $hDummyItem = GUICtrlCreateDummy()
    For $j = 0 To 2
    For $i = 0 To 18
    $hItem[$i + 18 * $j] = GUICtrlCreateCheckbox("", 10 + $i * 50, 270 + 50 * $j, 40, 40, BitOR($BS_PUSHLIKE, $BS_AUTORADIOBUTTON, $BS_ICON))
    _ItemSetIcon($hItem[$i + 18 * $j], $i + 19 * $j)
    GUICtrlSetOnEvent(-1, "_SetItem")
    Next
    Next

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

    GUICtrlCreateGroup("Settings Fragezeichen", 10, 430, 200, 80)
    Global $hFragezeichenSet1 = GUICtrlCreateInput("0", 20, 455, 40, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")
    GUICtrlCreateLabel("Anzahl Münzen", 80, 458, 100, 20)
    Global $hFragezeichenSet2 = GUICtrlCreateCheckbox("Pilz", 20, 480, 180, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")

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

    GUICtrlCreateGroup("Settings Rohr", 230, 430, 200, 80)
    Global $hRohrSet = GUICtrlCreateCheckbox("Pflanze", 240, 480, 180, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")

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

    GUICtrlCreateGroup("Settings Aufzug", 450, 430, 200, 120)
    GUIStartGroup()
    Global $hAufzugSet1 = GUICtrlCreateRadio("Auf", 460, 455, 80, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")
    Global $hAufzugSet2 = GUICtrlCreateRadio("Ab", 460, 480, 80, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")
    GUIStartGroup()
    Global $hAufzugSet3 = GUICtrlCreateRadio("Links", 560, 455, 80, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")
    Global $hAufzugSet4 = GUICtrlCreateRadio("Rechts", 560, 480, 80, 20)
    GUICtrlSetOnEvent(-1, "_SetParam")
    GUICtrlCreateRadio("Nichts", 560, 505, 80, 20)
    GUICtrlSetOnEvent(-1, "_Clear")

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

    Global $hLoad = GUICtrlCreateButton("Load", 800, 460, 100, 30)
    GUICtrlSetOnEvent(-1, "_Load")
    Global $hSave = GUICtrlCreateButton("Save", 800, 510, 100, 30)
    GUICtrlSetOnEvent(-1, "_Save")

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

    GUISetState(@SW_SHOW, $hGui)

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

    Global $hChild = GUICreate("Level Edit", 320 * 3, 250, 0, 0, BitOR($WS_CHILD, $WS_HSCROLL), $WS_EX_CLIENTEDGE, $hGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_EXIT")
    GUISetBkColor(0x0099FF)
    ;GUICtrlCreateLabel("",0,0,6740,240)
    ;GUICtrlSetBkColor(-1,0x0099FF)
    ;GUICtrlSetState(-1,$GUI_DISABLE)

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

    _GUIScrollBars_Init($hChild, 10, 0)
    _GUIScrollBars_ShowScrollBar($hChild, $SB_HORZ, True)
    _GUIScrollBars_ShowScrollBar($hChild, $SB_VERT, False)
    Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
    DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
    DllStructSetData($tSCROLLINFO, "nMin", 0)
    DllStructSetData($tSCROLLINFO, "nMax", 6740)
    DllStructSetData($tSCROLLINFO, "nPage", 320 * 3)
    _GUIScrollBars_SetScrollInfo($hChild, $SB_HORZ, $tSCROLLINFO)

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

    Global $hStone[49][13], $aStone[400][13], $aStoneSettings[400][13][2]
    For $i = 1 To 337
    For $j = 1 To 12
    $aStone[$i][$j] = 0
    $aStoneSettings[$i][$j][0] = 0
    $aStoneSettings[$i][$j][1] = 0
    Next
    Next

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

    Global $hDummyStone = GUICtrlCreateDummy()
    For $i = 1 To 48
    For $j = 1 To 12
    $hStone[$i][$j] = GUICtrlCreateIcon(@ScriptDir & "\GFX.icl", 0, $i * 20 - 20, 240 - $j * 20, 19, 19)
    GUICtrlSetOnEvent(-1, "_SetStone")
    Next
    Next

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

    GUISetState(@SW_SHOW, $hChild)

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

    GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Clear()
    GUICtrlSetState($hAufzugSet1, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet2, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet3, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet4, $GUI_UNCHECKED)
    EndFunc ;==>_Clear

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

    Func _Load()
    Local $sLine, $aLine
    Local $hFile = FileOpenDialog("Open", @ScriptDir, "(*.lvl)")
    For $x = 1 To 337
    ToolTip("Loading " & Round($x * 100 / 337) & "%")
    For $y = 1 To 12
    $sLine = IniRead($hFile, "Stones", $x & "-" & $y, "0;0;0")
    ;ConsoleWrite($sLine)
    $aLine = StringSplit($sLine, ";", 2)
    $aStone[$x][$y] = $aLine[0]
    $aStoneSettings[$x][$y][0] = $aLine[1]
    $aStoneSettings[$x][$y][1] = $aLine[2]
    Next
    Next
    GUISetState(@SW_LOCK, $hGui)
    GUISetState(@SW_LOCK, $hChild)
    For $i = 1 To 48
    For $j = 1 To 12
    _ItemSetIcon($hStone[$i][$j], $aStone[$i + $iScroll][$j], -1)
    Next
    Next
    GUISetState(@SW_UNLOCK, $hChild)
    GUISetState(@SW_UNLOCK, $hGui)
    ToolTip("")
    EndFunc ;==>_Load

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

    Func _Save()
    Local $hFile = FileOpenDialog("Save", @ScriptDir, "(*.lvl)")
    For $x = 1 To 337
    ToolTip("Saving " & Round($x * 100 / 337) & "%")
    For $y = 1 To 12
    IniWrite($hFile, "Stones", $x & "-" & $y, $aStone[$x][$y] & ";" & $aStoneSettings[$x][$y][0] & ";" & $aStoneSettings[$x][$y][1])
    Next
    Next
    ToolTip("")
    ;Exit
    EndFunc ;==>_Save

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

    Func _SetParam()
    ConsoleWrite("SetN " & $iLX & " " & $iLY & @LF)
    Switch @GUI_CtrlId
    Case $hFragezeichenSet1, $hRohrSet
    $aStoneSettings[$iLX][$iLY][0] = GUICtrlRead(@GUI_CtrlId)
    Case $hFragezeichenSet2
    $aStoneSettings[$iLX][$iLY][1] = GUICtrlRead(@GUI_CtrlId)
    Case $hAufzugSet1, $hAufzugSet2, $hAufzugSet3, $hAufzugSet4
    $aStoneSettings[$iLX][$iLY][0] = 0
    $aStoneSettings[$iLX][$iLY][1] = 0
    If GUICtrlRead($hAufzugSet1) = 1 Then $aStoneSettings[$iLX][$iLY][1] = -2
    If GUICtrlRead($hAufzugSet2) = 1 Then $aStoneSettings[$iLX][$iLY][1] = 2
    If GUICtrlRead($hAufzugSet3) = 1 Then $aStoneSettings[$iLX][$iLY][0] = -2
    If GUICtrlRead($hAufzugSet4) = 1 Then $aStoneSettings[$iLX][$iLY][0] = 2
    EndSwitch
    EndFunc ;==>_SetParam

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

    Func _Settings()
    Local $info = GUIGetCursorInfo($hChild)
    Local $iIndex = $info[4] - $hDummyStone
    If $iIndex < 1 Or $iIndex > 576 Then Return
    GUICtrlSetState($hFragezeichenSet1, $GUI_DISABLE)
    GUICtrlSetState($hFragezeichenSet2, $GUI_DISABLE)
    GUICtrlSetState($hRohrSet, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet1, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet2, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet3, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet4, $GUI_DISABLE)
    Local $iY = Mod($iIndex, 12)
    Local $iX = Ceiling($iIndex / 12)
    If $iY = 0 Then $iY = 12
    $iLX = $iX + $iScroll
    $iLY = $iY
    Local $iItem = $aStone[$iX + $iScroll][$iY]
    Switch $iItem
    Case 6
    GUICtrlSetState($hFragezeichenSet1, $GUI_ENABLE)
    GUICtrlSetState($hFragezeichenSet2, $GUI_ENABLE)
    GUICtrlSetData($hFragezeichenSet1, $aStoneSettings[$iX + $iScroll][$iY][0])
    If $aStoneSettings[$iX + $iScroll][$iY][1] = 1 Then
    GUICtrlSetState($hFragezeichenSet2, $GUI_CHECKED)
    Else
    GUICtrlSetState($hFragezeichenSet2, $GUI_UNCHECKED)
    EndIf
    Case 8
    GUICtrlSetState($hRohrSet, $GUI_ENABLE)
    If $aStoneSettings[$iX + $iScroll][$iY][0] = 1 Then
    GUICtrlSetState($hRohrSet, $GUI_CHECKED)
    Else
    GUICtrlSetState($hRohrSet, $GUI_UNCHECKED)
    EndIf
    Case 38
    GUICtrlSetState($hAufzugSet1, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet2, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet3, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet4, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet3, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet4, $GUI_UNCHECKED)
    If $aStoneSettings[$iX + $iScroll][$iY][0] < 0 Then
    GUICtrlSetState($hAufzugSet3, $GUI_CHECKED)
    ElseIf $aStoneSettings[$iX + $iScroll][$iY][0] > 0 Then
    GUICtrlSetState($hAufzugSet4, $GUI_CHECKED)
    EndIf
    GUICtrlSetState($hAufzugSet1, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet2, $GUI_UNCHECKED)
    If $aStoneSettings[$iX + $iScroll][$iY][1] < 0 Then
    GUICtrlSetState($hAufzugSet1, $GUI_CHECKED)
    ElseIf $aStoneSettings[$iX + $iScroll][$iY][1] > 0 Then
    GUICtrlSetState($hAufzugSet2, $GUI_CHECKED)
    EndIf
    EndSwitch
    EndFunc ;==>_Settings

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

    Func _SetStone()
    GUICtrlSetState($hFragezeichenSet1, $GUI_DISABLE)
    GUICtrlSetState($hFragezeichenSet2, $GUI_DISABLE)
    GUICtrlSetState($hRohrSet, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet1, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet2, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet3, $GUI_DISABLE)
    GUICtrlSetState($hAufzugSet4, $GUI_DISABLE)
    Local $iIndex = @GUI_CtrlId - $hDummyStone
    Local $iY = Mod($iIndex, 12)
    Local $iX = Ceiling($iIndex / 12)
    If $iY = 0 Then $iY = 12
    $iLX = $iX + $iScroll
    $iLY = $iY
    If $aStone[$iX + $iScroll][$iY] <> $iItem Then _SetSettings($iX + $iScroll, $iY, $iItem)
    $aStone[$iX + $iScroll][$iY] = $iItem
    _ItemSetIcon(@GUI_CtrlId, $iItem, -1)
    Switch $iItem
    Case 6
    GUICtrlSetState($hFragezeichenSet1, $GUI_ENABLE)
    GUICtrlSetState($hFragezeichenSet2, $GUI_ENABLE)
    GUICtrlSetData($hFragezeichenSet1, $aStoneSettings[$iX + $iScroll][$iY][0])
    If $aStoneSettings[$iX + $iScroll][$iY][1] = 1 Then
    GUICtrlSetState($hFragezeichenSet2, $GUI_CHECKED)
    Else
    GUICtrlSetState($hFragezeichenSet2, $GUI_UNCHECKED)
    EndIf
    Case 8
    GUICtrlSetState($hRohrSet, $GUI_ENABLE)
    If $aStoneSettings[$iX + $iScroll][$iY][0] = 1 Then
    GUICtrlSetState($hRohrSet, $GUI_CHECKED)
    Else
    GUICtrlSetState($hRohrSet, $GUI_UNCHECKED)
    EndIf
    Case 38
    GUICtrlSetState($hAufzugSet1, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet2, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet3, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet4, $GUI_ENABLE)
    GUICtrlSetState($hAufzugSet3, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet4, $GUI_UNCHECKED)
    If $aStoneSettings[$iX + $iScroll][$iY][0] < 0 Then
    GUICtrlSetState($hAufzugSet3, $GUI_CHECKED)
    ElseIf $aStoneSettings[$iX + $iScroll][$iY][0] > 0 Then
    GUICtrlSetState($hAufzugSet4, $GUI_CHECKED)
    EndIf
    GUICtrlSetState($hAufzugSet1, $GUI_UNCHECKED)
    GUICtrlSetState($hAufzugSet2, $GUI_UNCHECKED)
    If $aStoneSettings[$iX + $iScroll][$iY][1] < 0 Then
    GUICtrlSetState($hAufzugSet1, $GUI_CHECKED)
    ElseIf $aStoneSettings[$iX + $iScroll][$iY][1] > 0 Then
    GUICtrlSetState($hAufzugSet2, $GUI_CHECKED)
    EndIf
    _ItemSetIcon(@GUI_CtrlId + 12, $iItem, -1)
    _ItemSetIcon(@GUI_CtrlId + 24, $iItem, -1)
    EndSwitch
    EndFunc ;==>_SetStone

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

    Func _SetSettings($iX, $iY, $iI)
    $aStoneSettings[$iX][$iY][0] = 0
    $aStoneSettings[$iX][$iY][1] = 0
    Switch $iI
    Case 6 ; Fragezeichen, (wird dann zu 6)
    $aStoneSettings[$iX][$iY][0] = 5
    $aStoneSettings[$iX][$iY][1] = 0
    Case 9 ; Rohr, 3 = Eingang
    $aStoneSettings[$iX][$iY][0] = 0
    $aStoneSettings[$iX][$iY][1] = 0
    Case 38
    $aStoneSettings[$iX][$iY][0] = -2
    $aStoneSettings[$iX][$iY][1] = 0
    EndSwitch
    EndFunc ;==>_SetSettings

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

    Func _SetItem()
    $iItem = @GUI_CtrlId - $hDummyItem - 1
    EndFunc ;==>_SetItem

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

    Func _ItemSetIcon($hCtrlID, $iIndex, $iOff = 0)
    Switch $iIndex
    Case 0
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 0 + $iOff)
    Case 1 To 13
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 43 + $iIndex + $iOff)
    Case 14 To 33
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 68 + $iIndex + $iOff)
    Case 34 ; Geld
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 44 + $iIndex + $iOff)
    Case 35 ; Watschelmann
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 24 + $iIndex + $iOff)
    Case 36 ; Schildkröte
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 26 + $iIndex + $iOff)
    Case 37
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 28 + $iIndex + $iOff)
    Case 38
    GUICtrlSetImage($hCtrlID, @ScriptDir & "\GFX.icl", 34 + $iIndex + $iOff)
    Case Else
    If $iOff = 0 Then GUICtrlSetState($hCtrlID, $GUI_DISABLE)
    EndSwitch
    EndFunc ;==>_ItemSetIcon

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

    Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $xChar, $xPos
    Local $Min, $Max, $Page, $Pos, $TrackPos
    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $xChar = $aSB_WindowInfo[$index][2]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $xPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $xPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    #forceref $Min, $Max
    Switch $nScrollCode
    Case $SB_LINELEFT ; user clicked left arrow
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 20)
    Case $SB_LINERIGHT ; user clicked right arrow
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 20)
    Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
    Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
    Case $SB_THUMBTRACK ; user dragged the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch
    $iScroll = Floor(DllStructGetData($tSCROLLINFO, "nPos") / 20)
    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")
    GUISetState(@SW_LOCK, $hGui)
    GUISetState(@SW_LOCK, $hChild)
    For $i = 1 To 48
    For $j = 1 To 12
    _ItemSetIcon($hStone[$i][$j], $aStone[$i + $iScroll][$j], -1)
    Next
    Next
    GUISetState(@SW_UNLOCK, $hChild)
    GUISetState(@SW_UNLOCK, $hGui)
    ;If ($Pos <> $xPos) Then _GUIScrollBars_ScrollWindow($hWnd, 1 * ($xPos - $Pos), 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_HSCROLL

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

    Func _EXIT()
    Exit
    EndFunc ;==>_EXIT

    [/autoit]

    lgE


    ps.: Die aktuelle Lösung der Levels als Ini-File ist auch nur eine Übergangslösung...
    Aber es wird sich am Game selber noch soviel ändern, daß sich zwangsläufig auch noch die Levels ändern... ^^

  • Super Mario Jump n Run

    • eukalyptus
    • 9. August 2009 um 13:34

    Ich denke ich hab mal einen Fehler gefunden:
    Vista und Windows 7 akzeptieren nur 32bit-Icons, meine Gfx.icl war jedoch nur 16bit

    Im ersten Post gibt es nun die 32bit-Version

    Die weiteren Fehler wie z.b. bei Tuttifrutti hab ich mir noch nicht angesehen...

    lgE

  • Super Mario Jump n Run

    • eukalyptus
    • 7. August 2009 um 14:39

    @tuttifrutti: Bei dir ist anscheinend der Grafik-Index um 1 verschoben...
    Ich glaube, das kann ich beheben indem ich die Icons mit dem negativen Index aufrufe...

    @grauer Bildschirm: welches Windows habt ihr? Welches Design (z.b. Win-XP-Style)?

    Ich habs bisher nur unter Win-XP SP3 laufen lassen...
    Werd nächste Woche mal mit Vista und Windows 7 testen!

    lgE

  • Super Mario Jump n Run

    • eukalyptus
    • 7. August 2009 um 13:28

    Ich presentiere die erste Betaversion von Autoit - Super Mario!

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    (Die Grafiken hab ich aus einem Flash-Spiel... :rolleyes: )

    Es gibt noch kein Ziel und Punkte werden auch noch keine gezählt usw...
    Das kommt erst viel später mal.

    Als nächsten Schritt muß ich unbedingt die Geschwindigkeit erhöhen, denn bei einem vollen Level mit vielen beweglichen Teilen, gerät das Spiel schon mal etwas ins stocken...
    Auch ein Leveleditor ist geplant.
    mal sehen, wie´s damit noch weitergeht...
    Das ganze Feintuning liegt ja auch noch vor mir!

    Bitte um Feedback und Bugreport

    Dann viel Spaß damit :D

    lgE

    EDIT: Neue Version, sollte jetzt mit Vista und Windows 7 funktionieren!
    EDIT2: Neue Version
    ; Geschwindigkeitsoptimierung und ein paar Bugs behoben

  • µit - Juli

    • eukalyptus
    • 5. August 2009 um 09:08
    Zitat

    Ja, ja, Geschwindigkeit ist eben alles :P :D !

    Es kommt eben doch nicht auf die Größe an :whistling: :D !

    Zitat

    Ich bin sicher, dass mittels einer Kombination der besten Teile jedes Skripts noch etwas mehr herauszuholen wäre.
    eukalyptus: Wie wirkt sich Oscar's Anpassung von Bugfix' Skript zeitlich aus?

    Das modifizierte Script benötigt: 7235 ms, also eine halbe Sekunde schneller...

    lgE

  • µit - Juli

    • eukalyptus
    • 4. August 2009 um 13:29

    Als erstes hat mich sehr erstaunt, wie kompakt ihr alle eure Scripte bekommen habt.
    Meine Funktion (zum testen der TestSuite) hatte z.b. über 40 Zeilen!

    Andy: 25 Zeilen
    BugFix: 22 Zeilen
    Oscar: 18 Zeilen
    Funkey: 16 Zeilen

    Funkey liegt hier mit 16 Zeilen vorne.
    Allerdings hat Oscar mit 889 Bytes das schlankere Script erstellt. (Funkey: 1115 Bytes)

    Dieser Bytevergleich ist natürlich abhängig von den längen der Variablennamen usw... Aber vergleicht selbst...


    Um die Geschwindigkeit zu messen, habe ich die Testsuite 5000 durchlaufen lassen.
    Bei diesem Test schlägt nun Bugfix´s Script zu:

    Oscar: 11703 ms
    Andy: 11402 ms
    Funkey: 10349 ms
    BugFix: 7796 ms

    Ein heißer Kampf um Platz 2, aber Bugfix ist nicht mehr einzuholen ;)


    Scripte:
    Andy:

    Spoiler anzeigen
    [autoit]

    Func _StringinStrCount($string, $SubString, $bSense = False, $bPartial = False, $sdelim = '', $bReturn = False)
    Local $casesense = "(?-i)", $part1 = "", $part2 = "", $treffer = 0 ;würde auch noch in die nächste zeile passen ;)
    Dim $retarray1[2] = [1, StringLen($string)], $retarray[1], $aSplit[1] = [$SubString]
    If $SubString = "" And $sdelim = "" And $bReturn = False Then Return StringLen($string) ; :o)
    If $SubString = "" And $sdelim = "" Then Return $retarray1
    If $SubString = "" And $bReturn = False Then Return UBound(StringRegExp($string, "[^(" & $sdelim & ")]", 3))
    If $SubString = "" Then
    Dim $retarray2[2] = [1, UBound(StringRegExp($string, "[^(" & $sdelim & ")]", 3))]
    Return $retarray2
    EndIf
    If $sdelim <> "" Then Dim $aSplit = StringSplit($SubString, $sdelim, 2) ;wird der Substring mit dem Trennzeichen gesplittet in ein nullbasiertes Array
    If $bSense = False Then $casesense = "(?i)"
    If $bPartial = False Then ;der suchbegriff muss alleinstehend sein
    $part1 = "(?<![\d|\x{041}-\x{0ff}])" ;vornedran dürfen nur zeichen kleiner ascii0x41 sein aber keine zahlen
    $part2 = "(?![\d|\x{041}-\x{0ff}])" ;hintendran dürfen nur leerzeichen sein und satzzeichen oder das textende
    EndIf
    For $i = 0 To UBound($aSplit) - 1 ;Zählschleife für das splitarray von null bis zur anzahl splitstrings
    If $bReturn = False Then $treffer += UBound(StringRegExp($string, $casesense & $part1 & "(" & $aSplit[$i] & ")" & $part2, 3))
    ReDim $retarray[UBound($retarray) + 1]
    $retarray[0] += 1
    $retarray[UBound($retarray) - 1] = UBound(StringRegExp($string, $casesense & $part1 & "(" & $aSplit[$i] & ")" & $part2, 3))
    Next
    If $bReturn = True Then Return $retarray
    Return $treffer
    EndFunc ;==>_StringinStrCount

    [/autoit]

    BuFix:

    Spoiler anzeigen
    [autoit]

    Func _StringInStrCount($sString, $sSearch='' , $bSens=False, $bPartial=False, $sDelim='', $bReturn=False)
    If Not $sSearch And $sDelim Then Return UBound(StringSplit(StringRegExpReplace($sString, $sDelim, ''), '', 2))
    If Not $sSearch And Not $sDelim Then Return StringLen($sString)
    Local $ret, $Out = '', $indP = 0, $aPat[4][2] = [['(?i)\b','\b'],['\b','\b'],['',''],['(?i)','']]
    If $bSens And Not $bPartial Then $indP = 1
    If $bSens And $bPartial Then $indP = 2
    If Not $bSens And $bPartial Then $indP = 3
    If $sSearch And $sDelim Then
    Local $split = StringSplit($sSearch, $sDelim, 2), $sum = 0
    For $i In $split
    $ret = StringRegExp($sString, $aPat[$indP][0] & $i & $aPat[$indP][1], 3)
    If IsArray($ret) Then $Out &= UBound($ret) & $sDelim
    If IsArray($ret) Then $sum += UBound($ret)
    If Not IsArray($ret) Then $Out &= 0 & $sDelim
    Next
    If $bReturn Then Return StringSplit(StringTrimRight($Out, StringLen($sDelim)), $sDelim)
    If Not $bReturn Then Return $sum
    EndIf
    $ret = StringRegExp($sString, $aPat[$indP][0] & $sSearch & $aPat[$indP][1], 3)
    If $bReturn Then Return StringSplit(UBound($ret), ',')
    If Not $bReturn Then Return UBound($ret)
    EndFunc ; BugFix

    [/autoit]

    Funkey:

    Spoiler anzeigen
    [autoit]

    Func _StringInStrCount($String, $Substring, $bSens = False, $bPartial = False, $sDelim = '', $bRetType = False)
    Local $iMatch, $aSplitDelim, $aRet[UBound(StringSplit($Substring, $sDelim, 1))], $bCaseSens = '(?i)', $bPartRegExp = '[ \.,!?\n\r"' & "'" & ']{1}'
    If $Substring = '' And $sDelim = '' Then Return StringLen($String)
    If $Substring = '' And $sDelim <> '' Then Return StringLen(StringReplace($String, $sDelim, ''))
    If $bSens Then $bCaseSens = '(?-i)'
    If $bPartial Then $bPartRegExp = ''
    If $sDelim = '' Then Return UBound(StringRegExp(' ' & StringRegExpReplace($String, $bPartRegExp, ' ') & ' ', $bCaseSens & $bPartRegExp & $Substring & $bPartRegExp, 3))
    $aSplitDelim = StringSplit($Substring, $sDelim, 1)
    For $i = 1 To UBound($aSplitDelim) - 1
    $iMatch += UBound(StringRegExp(' ' & StringRegExpReplace($String, $bPartRegExp, ' ') & ' ', $bCaseSens & $bPartRegExp & $aSplitDelim[$i] & $bPartRegExp, 3))
    $aRet[$i] = $iMatch - $aRet[$i - 1]
    Next
    $aRet[0] = UBound($aRet) - 1
    If $bRetType Then Return $aRet
    Return $iMatch
    EndFunc

    [/autoit]

    Oscar:

    Spoiler anzeigen
    [autoit]

    Func _StringInStrCount($sString, $sSearch = '', $bSens = False, $bPartial = False, $sDelim = '', $bReturn = False)
    If $sSearch = '' Then
    $sSearch = '(?s).'
    $bPartial = True
    EndIf
    Local $aSens[2] = ['(?i)', ''], $aPartial[2] = ['\b', ''], $aSearch[2] = [1, $sSearch], $aString[2] = [1, $sString], $iCount = 0
    If $sDelim <> '' Then Local $aSearch = StringSplit($sSearch, $sDelim, 1), $aString = StringSplit($sString, $sDelim, 1)
    Local $aCount[$aSearch[0] + 1] = [$aSearch[0]]
    For $j = 1 To $aString[0]
    For $i = 1 To $aSearch[0]
    $aString[$j] = StringRegExpReplace($aString[$j], $aSens[$bSens] & $aPartial[$bPartial] & $aSearch[$i] & $aPartial[$bPartial], '')
    $aCount[$i] += @extended
    $iCount += @extended
    Next
    Next
    If $bReturn Then Return $aCount
    Return $iCount
    EndFunc

    [/autoit]

    Nun komme ich zu der schwierigen Aufgabe, einen Gewinner zu ernennen.
    Programmiertechnisch hat mir eigentlich Oscar´s Script am besten gefallen, welches jedoch beim Geschwindigkeitstest das langsamste ist.
    Und da es gerade in einer Sprach wie Autoit manchmal sehr auf Geschwindigkeit ankommt, wähle ich das (mit Abstand) schnellste Script: BUGFIX!

    Als Gewinn gibt es ein: :thumbup:

    Dann noch vielen Dank an alle Teilnehmer

    lgE

  • µit - Juli

    • eukalyptus
    • 17. Juli 2009 um 17:31
    Zitat von Andy

    Wenn sich 2 Wochen lang niemand meldet...

    Ich war tatsächlich fast 2 Wochen nicht mehr im Forum. Hab grad ziemlich viel um die Ohren...
    Vielleicht kann ja von euch jemand ein Machtwort sprechen, um die offenen Fragen zu klären!?

    Sorry, ich krieg meinen Kopf dafür grad nicht frei!

    lgE

  • Welchen Internet Browser nutzt ihr - Umfrage ?

    • eukalyptus
    • 2. Juli 2009 um 09:40

    Da mir der Firefox seit Version 3 nicht mehr gefallen will, bin ich nun testweise auf K-Meleon umgestiegen.

    Und ich bin ziemlich begeistert!
    Zwar muß ich auf einige liebgewonnene Addons verzichten, dafür geht K-Meleon ab wie eine Rakete :thumbup:

    Wenn die nächste Zeit keine gröberen Probleme auftauchen, dann hat sich Firefox für mich erledigt!

    lgE

  • Betriebssystem in Autoit

    • eukalyptus
    • 1. Juli 2009 um 14:37

    Um die Windows-Shell zu ersetzen (statt Desktop und Taskbar wird ein anderes Programm beim Windows-Start gestartet) kann man diesen Registry-Wert ändern:
    "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell"

    Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <WinAPI.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Global $aProgram[8][4]
    $aProgram[0][0] = 7
    $aProgram[1][0] = @WindowsDir & "\explorer.exe"
    $aProgram[1][1] = "Explorer"
    $aProgram[1][2] = @WindowsDir & "\explorer.exe"
    $aProgram[1][3] = 1
    $aProgram[2][0] = @WindowsDir & "\notepad.exe"
    $aProgram[2][1] = "Editor"
    $aProgram[2][2] = @WindowsDir & "\notepad.exe"
    $aProgram[2][3] = 1
    $aProgram[3][0] = @SystemDir & "\calc.exe"
    $aProgram[3][1] = "Rechner"
    $aProgram[3][2] = @SystemDir & "\calc.exe"
    $aProgram[3][3] = 1
    $aProgram[4][0] = @SystemDir & "\cmd.exe"
    $aProgram[4][1] = "Eingabeaufforderung"
    $aProgram[4][2] = @SystemDir & "\cmd.exe"
    $aProgram[4][3] = 1
    $aProgram[5][0] = "Shutdown"
    $aProgram[5][1] = "Ausschalten"
    $aProgram[5][2] = @SystemDir & "\shell32.dll"
    $aProgram[5][3] = 29
    $aProgram[6][0] = "Logoff"
    $aProgram[6][1] = "Abmelden"
    $aProgram[6][2] = @SystemDir & "\shell32.dll"
    $aProgram[6][3] = 46
    $aProgram[7][0] = "Deaktivate"
    $aProgram[7][1] = "Original wiederherstellen"
    $aProgram[7][2] = @SystemDir & "\shell32.dll"
    $aProgram[7][3] = 45

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

    If Not @Compiled Then
    MsgBox(0, "ACHTUNG!", "Script muß vorher als EXE compiliert werden")
    Exit
    EndIf

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

    If Not StringInStr(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell"), @AutoItExe) Then
    _Enable()
    Exit
    EndIf

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

    If $CmdLine[0] <> 1 Then
    MsgBox(0, "Achtung", "Diese Shell wird beim nächsten Anmelden gestartet...")
    Exit
    EndIf

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

    Global $hDeskTop = GUICreate("Autoit Desktop", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
    GUISetBkColor(0x005500, $hDeskTop)
    GUISetState(@SW_SHOW, $hDeskTop)

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

    Global $hTaskBar = GUICreate("Autoit TaskBar", @DesktopWidth, 60, 0, @DesktopHeight - 80, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    _WinAPI_SetLayeredWindowAttributes($hTaskBar, 0xABCDEF, 255)
    Global $hDummy = GUICtrlCreateDummy()
    For $i = 1 To $aProgram[0][0]
    GUICtrlCreateIcon($aProgram[$i][2], $aProgram[$i][3] - 1, @DesktopWidth / 2 - ($aProgram[0][0] * 24) + $i * 48 - 32, 5, 32, 32)
    GUICtrlSetOnEvent(-1, "_Start")
    GUICtrlSetTip(-1, $aProgram[$i][1])
    Next
    GUISetBkColor(0xABCDEF, $hTaskBar)
    GUISetState(@SW_SHOW, $hTaskBar)

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

    While 1
    Sleep(5000)
    WinSetOnTop($hTaskBar, "", 1)
    _WinAPI_RedrawWindow($hTaskBar)
    WEnd

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

    Func _Start()
    Local $iIndex = @GUI_CtrlId - $hDummy
    Switch $aProgram[$iIndex][0]
    Case "Shutdown"
    _Shutdown()
    Case "Logoff"
    _Logoff()
    Case "Deaktivate"
    _Disable()
    Case Else
    ShellExecute($aProgram[$iIndex][0])
    EndSwitch
    EndFunc ;==>_Start

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

    Func _Shutdown()
    If MsgBox(4, "Herunterfahren?", "Wollen Sie den Rechner herunterfahren?") = 6 Then Shutdown(1)
    EndFunc ;==>_Shutdown

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

    Func _Logoff()
    If MsgBox(4, "Abmelden?", "Wollen Sie sich abmelden?") = 6 Then Shutdown(0)
    EndFunc ;==>_Logoff

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

    Func _Enable()
    If MsgBox(4, "Aktivieren?", "Wollen Sie die Windows Shell ersetzen?") = 6 Then
    IniWrite(@ScriptDir & "\Reg.ini", "Winlogon", "Userinit", RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell"))
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", @AutoItExe & " Run")
    MsgBox(0, "Aktivieren?", "Beim nächsten Anmelden startet die Autoit-Shell")
    EndIf
    EndFunc ;==>_Enable

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

    Func _Disable()
    If MsgBox(4, "Deaktivieren?", "Wollen Sie die original Windows Shell wieder aktivieren?") = 6 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", IniRead(@ScriptDir & "\Reg.ini", "Winlogon", "Userinit", "explorer.exe"))
    MsgBox(0, "Deaktivieren?", "Beim nächsten Anmelden startet Windows wieder im originalen Zustand")
    EndIf
    EndFunc ;==>_Disable

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

    Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
    If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
    Select
    Case @error
    Return SetError(@error, 0, 0)
    Case $Ret[0] = 0
    Return SetError(4, _WinAPI_GetLastError(), 0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_WinAPI_SetLayeredWindowAttributes

    [/autoit]

    ACHTUNG! Ausführen auf eigene Gefahr!
    Falls etwas schiefgeht, muß man manuell und evtl. umständlich den Registry-Wert wieder auf "explorer.exe" setzen!

    lgE

  • Betriebssystem in Autoit

    • eukalyptus
    • 1. Juli 2009 um 08:56

    Ich denke, er meint nur die Shell.
    Ein Windows-Shell Ersatz ist mit Autoit ohne weiteres möglich...

  • µit - Juli

    • eukalyptus
    • 30. Juni 2009 um 22:43

    Eukalyptus : Oscar
    0 : 1
    :D

    Aber nun alle Zeichen mit Ausnahme des Delimiters?

  • µit - Juli

    • eukalyptus
    • 30. Juni 2009 um 22:25

    Damit könnte man dann alle Zeichen zählen (ohne Leerzeichen, @CR und @LF)...

    wär das nicht eine wünschenswerte Funktion?!?

    lgE

  • µit - Juli

    • eukalyptus
    • 30. Juni 2009 um 21:46

    Neue TestSuite in Post #1

    Ich sehe keinen Vorteil, wenn bei String-Rückgabe die Ergebnisse getrennt sind. --> Also Gesammtsumme!

    Der Suchbegriff muß bei nicht-partial-Suche auch gefunden werden, wenn ihm ein Satzzeichen folgt.

    Eine weitere Frage drängt sich auf:
    Wenn $sSearch = Leerstring, dann sollen alle Zeichen gezählt werden.
    Sollen in diesem Fall auch die @lf,@cr und/oder Leerzeichen mitgezählt werden.
    Das wäre dann kein Unterschied zu StringLen!

    Was wäre denn praxisorientiert?

    lgE

  • µit - Juli

    • eukalyptus
    • 29. Juni 2009 um 21:02

    Sorry!

    Bin noch zu nichts gekommen.
    Hatte die letzten Tage zuwenig Zeit.
    Ich hoffe, Ihr könnt noch etwas warten ;)

    lgE

  • µit - Juli

    • eukalyptus
    • 26. Juni 2009 um 23:46

    OK!

    Werd das dann im 1 Post editieren und die Testsuite anpassen!
    Das mach ich aber erst morgen

    lgE

  • µit - Juli

    • eukalyptus
    • 26. Juni 2009 um 23:33

    Nein, ich betrachte Flag2 anscheinend anders: True= Suche nur ganze Wörter; False= finde alle Substrings

    Wie solln ma das nun machen?

  • µit - Juli

    • eukalyptus
    • 26. Juni 2009 um 23:20

    Bei der aktuellen Testsuite ist Array-Ja ;)

    Wie gesagt, solche Kleinigkeiten können wir noch ändern, damit die bestmögliche Benutzerfreundlichkeit erreicht wird...

    Und vielleicht hat ja jemand Lust einige sinnvollere Strings in die Testsuite einzubauen :D
    Da war ich etwas einfallslos...

    lgE

  • µit - Juli

    • eukalyptus
    • 26. Juni 2009 um 23:06

    Also ich bin für Methode 2, also der Begriff muß enthalten sein.

    Hier mal eine Testsuite:

    EDIT: Siehe Post 1

    Hab ich mal grob zusammengezimmert...
    Ich hoffe, daß keine Fehler enthalten sind :whistling:

    Falls irgendwelche Beschwerden auftauchen, oder sonstige Wünsche (z.b. doch die andere Partialsuche...),
    dann bin ich gerne bereit das noch zu ändern.
    Schließlich soll die Funktion später doch vernünftig anzuwenden sein! :)

    lgE

  • µit - Juli

    • eukalyptus
    • 26. Juni 2009 um 19:37

    @ Der Scripter: Der letzte µit war im März und ist Ende April aufgelöst worden ;)

    funkey & Progandy: Dies ist der µit - Juli und NICHT JUNI :rofl:

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™