• Hi,

    mir war am Wochende langweilig und habe schnell mal ein normales Snake-Spiel programmiert.
    Das wäre warscheinlich nich postwürdig, deshalb habe ich gedacht ich machs für den Desktop, also tadaa da isses :D

    Viel Spaß beim spielen, ich hoffe es gibt keine bugs

    Download

    [Blockierte Grafik: http://img37.imageshack.us/img37/7171/desktopsnake.gif]

    Skript:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <WinAPI.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <Misc.au3>

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

    $widthBlocks = 20
    $heightBlocks = 20
    $Speed = 100 - IniRead("Settings.ini", "Settings", "Speed", 35)
    $Style = IniRead("Settings.ini", "Settings", "Style", 3)
    $Menu = "MainMenu"

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

    Dim $Snake[2][3]
    Dim $Food[1][2]
    Dim $SnakePicsH[3]
    Dim $SnakePicsV[3]
    Dim $SnakeKopf[4]
    Dim $SnakeEcke[4][3]
    Dim $SnakeEnde[4][3]

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

    $Snake[0][0] = 10
    $Snake[0][1] = 10

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

    $Snake[1][0] = 10
    $Snake[1][1] = 11
    $Snake[1][2] = 0

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

    $Food[0][0] = Random(0, 19, 1)
    $Food[0][1] = Random(0, 19, 1)
    $Richtung = "Oben"

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

    _GDIPlus_Startup()
    $Gui = GUICreate("Desktop-Snake", 600, 600)
    GUISetState()
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(600, 600, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)

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

    For $i = 0 To 3
    $SnakeKopf[$i] = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Head_" &$i &".png")
    Next
    For $i = 0 To 2
    $SnakePicsH[$i] = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Snake_Horizontal_" &$i &".png")
    Next
    For $i = 0 To 2
    $SnakePicsV[$i] = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Snake_Vertical_" &$i &".png")
    Next
    For $i = 0 To 2
    For $a = 0 To 3
    $SnakeEcke[$a][$i] = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Snake_Edge_" &$i &"_" &$a &".png")
    Next
    Next
    For $i = 0 To 2
    For $a = 0 To 3
    $SnakeEnde[$a][$i] = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Snake_End_" &$i &"_" &$a &".png")
    Next
    Next

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

    $MenuPic = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Menu.png")
    $OptionsPic = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Options.png")
    $HighscoresPic = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Highscores.png")
    $FoodPic = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\Food.png")
    $Fail = _GDIPlus_ImageLoadFromFile(@ScriptDir &"\src\FAIL.png")
    $Pen = _GDIPlus_PenCreate(0xFFFFFFFF, 3)

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

    $Timer = TimerInit()
    While 1 ;KI PLAYING IN THE MENU :D
    $GUIGetMsg = GUIGetMsg(1)
    If $GUIGetMsg[0] = $GUI_EVENT_CLOSE Then
    _Exit(0)
    ElseIf $GUIGetMsg[0] = $GUI_EVENT_PRIMARYDOWN Then
    If $GUIGetMsg[3] > 195 And $GUIGetMsg[3] < 395 And $GUIGetMsg[4] > 200 And $GUIGetMsg[4] < 250 And $Menu = "MainMenu" Then ;START
    ExitLoop
    ElseIf $GUIGetMsg[3] > 195 And $GUIGetMsg[3] < 395 And $GUIGetMsg[4] > 270 And $GUIGetMsg[4] < 320 And $Menu = "MainMenu" Then ;HIGHSCORES
    $Menu = "Highscores"
    ElseIf $GUIGetMsg[3] > 195 And $GUIGetMsg[3] < 395 And $GUIGetMsg[4] > 335 And $GUIGetMsg[4] < 385 And $Menu = "MainMenu" Then ;OPTIONEN
    $Menu = "Options"
    _GDIPlus_GraphicsClear($buffer, 0xFF000000)
    _GDIPlus_GraphicsDrawImage($buffer, $OptionsPic, 0, 0)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    _GDIPlus_GraphicsClear($buffer, 0xFF000000)

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

    $Ipt_Speed = GUICtrlCreateSlider(184, 112, 288, 25)
    $Ipt_Style = GUICtrlCreateSlider(184, 152, 289, 25)
    GUICtrlSetLimit(-1, 3, 0)
    $Ipt_Height = GUICtrlCreateSlider(184, 192, 113, 25)
    GUICtrlSetLimit(-1, 80, 10)
    $Ipt_Width = GUICtrlCreateSlider(376, 192, 97, 25)
    GUICtrlSetLimit(-1, 80, 10)

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

    GUICtrlSetData($Ipt_Speed, 100 - IniRead("Settings.ini", "Settings", "Speed", 35))
    GUICtrlSetData($Ipt_Style, IniRead("Settings.ini", "Settings", "Style", 3))
    GUICtrlSetData($Ipt_Width, IniRead("Settings.ini", "Settings", "Width", 20))
    GUICtrlSetData($Ipt_Height, IniRead("Settings.ini", "Settings", "Height", 20))
    ElseIf $GUIGetMsg[3] > 475 And $GUIGetMsg[3] < 585 And $GUIGetMsg[4] > 520 And $GUIGetMsg[4] < 580 And $Menu = "Highscores" Then ;BACK TO MENU
    $Menu = "MainMenu"
    ElseIf $GUIGetMsg[3] > 10 And $GUIGetMsg[3] < 210 And $GUIGetMsg[4] > 540 And $GUIGetMsg[4] < 590 And $Menu = "Options" Then ;BACK TO MENU
    $Menu = "MainMenu"
    GUICtrlDelete($Ipt_Speed)
    GUICtrlDelete($Ipt_Style)
    GUICtrlDelete($Ipt_Width)
    GUICtrlDelete($Ipt_Height)
    ElseIf $GUIGetMsg[3] > 390 And $GUIGetMsg[3] < 590 And $GUIGetMsg[4] > 540 And $GUIGetMsg[4] < 590 And $Menu = "Options" Then ;SAVE AND BACK TO MENU
    $Menu = "MainMenu"

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

    $Speed = GUICtrlRead($Ipt_Speed)
    $Style = GUICtrlRead($Ipt_Style)

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

    IniWrite("Settings.ini", "Settings", "Speed", 100 - $Speed)
    IniWrite("Settings.ini", "Settings", "Style", $Style)
    IniWrite("Settings.ini", "Settings", "Width", 20)
    IniWrite("Settings.ini", "Settings", "Height", 20)

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

    GUICtrlDelete($Ipt_Speed)
    GUICtrlDelete($Ipt_Style)
    GUICtrlDelete($Ipt_Width)
    GUICtrlDelete($Ipt_Height)
    EndIf
    EndIf

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

    If TimerDiff($Timer) >= $Speed Then
    If $Food[0][0] < $Snake[0][0] Or 19 - $Food[0][0] < $Food[0][0] - $Snake[0][0] Then
    If $Richtung <> "Rechts" Then $Richtung = "Links"
    ElseIf $Food[0][1] < $Snake[0][1] Or 19 - $Food[0][1] < $Food[0][1] - $Snake[0][1] Then
    If $Richtung <> "Unten" Then $Richtung = "Oben"
    ElseIf $Food[0][0] > $Snake[0][0] Or 19 - $Food[0][0] < $Food[0][0] - $Snake[0][0] Then
    If $Richtung <> "Links" Then $Richtung = "Rechts"
    ElseIf $Food[0][1] > $Snake[0][1] Or 19 - $Food[0][1] < $Food[0][1] - $Snake[0][1] Then
    If $Richtung <> "Oben" Then $Richtung = "Unten"
    EndIf

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

    For $i = (UBound($Snake) - 1) To 1 Step -1
    $Snake[$i][0] = $Snake[$i - 1][0]
    $Snake[$i][1] = $Snake[$i - 1][1]
    Next

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

    If $Richtung = "Links" Then
    If $Snake[0][0] = 0 Then $Snake[0][0] = 20
    $Snake[0][0] -= 1
    ElseIf $Richtung = "Oben" Then
    If $Snake[0][1] = 0 Then $Snake[0][1] = 20
    $Snake[0][1] -= 1
    ElseIf $Richtung = "Rechts" Then
    If $Snake[0][0] = 19 Then $Snake[0][0] = -1
    $Snake[0][0] += 1
    ElseIf $Richtung = "Unten" Then
    If $Snake[0][1] = 19 Then $Snake[0][1] = -1
    $Snake[0][1] += 1
    EndIf

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

    If $Snake[0][0] = $Food[0][0] And $Snake[0][1] = $Food[0][1] Then
    $Food[0][0] = Random(0, 19, 1)
    $Food[0][1] = Random(0, 19, 1)
    ReDim $Snake[UBound($Snake) + 1][3]
    If $Style = 3 Then
    $Snake[UBound($Snake) - 1][2] = Random(0, 2, 1)
    Else
    $Snake[UBound($Snake) - 1][2] = $Style
    EndIf
    $Snake[UBound($Snake) - 1][0] = $Snake[UBound($Snake) - 2][0]
    $Snake[UBound($Snake) - 1][1] = $Snake[UBound($Snake) - 2][1]
    EndIf

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

    For $i = 1 To UBound($Snake) - 1
    If $Snake[0][0] = $Snake[$i][0] And $Snake[0][1] = $Snake[$i][1] Then
    Sleep(500)
    ReDim $Snake[2][3]
    $Snake[0][0] = 10
    $Snake[0][1] = 10

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

    $Snake[1][0] = 10
    $Snake[1][1] = 11
    $Snake[1][2] = 0
    ExitLoop
    EndIf
    Next
    _GDIPlus_GraphicsDrawImageRect($buffer, $FoodPic, $Food[0][0] * 30, $Food[0][1] * 30, 30, 30)

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

    If $Richtung = "Links" Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeKopf[3], $Snake[0][0] * 30, $Snake[0][1] * 30)
    ElseIf $Richtung = "Oben" Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeKopf[0], $Snake[0][0] * 30, $Snake[0][1] * 30)
    ElseIf $Richtung = "Rechts" Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeKopf[1], $Snake[0][0] * 30, $Snake[0][1] * 30)
    ElseIf $Richtung = "Unten" Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeKopf[2], $Snake[0][0] * 30, $Snake[0][1] * 30)
    EndIf

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

    For $i = 1 To UBound($Snake) - 2
    If $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i - 1][0] = 0 And $Snake[$i][0] = 19 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = 0 And $Snake[$i][0] = 19 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = 19 And $Snake[$i][0] = 0 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = 19 And $Snake[$i][0] = 0 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i + 1][0] = 0 And $Snake[$i][0] = 19 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = 0 And $Snake[$i][0] = 19 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = 19 And $Snake[$i][0] = 0 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = 19 And $Snake[$i][0] = 0 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = 0 And $Snake[$i + 1][1] = 19 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = 19 And $Snake[$i + 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = 19 And $Snake[$i + 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = 0 And $Snake[$i + 1][1] = 19 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = 0 And $Snake[$i - 1][1] = 19 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = 19 And $Snake[$i - 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = 19 And $Snake[$i - 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = 0 And $Snake[$i - 1][1] = 19 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    Else
    If $Snake[$i - 1][1] = $Snake[$i][1] Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakePicsH[$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    Else
    _GDIPlus_GraphicsDrawImage($buffer, $SnakePicsV[$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    EndIf
    EndIf
    Next

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

    $SnakeLengh = UBound($Snake) - 1
    If $Snake[$SnakeLengh - 1][0] = $Snake[$SnakeLengh][0] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEnde[0][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    ElseIf $Snake[$SnakeLengh - 1][1] = $Snake[$SnakeLengh][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEnde[1][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    ElseIf $Snake[$SnakeLengh - 1][0] = $Snake[$SnakeLengh][0] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEnde[2][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    ElseIf $Snake[$SnakeLengh - 1][1] = $Snake[$SnakeLengh][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($buffer, $SnakeEnde[3][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    EndIf

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

    If $Menu = "MainMenu" Then
    _GDIPlus_GraphicsDrawImage($buffer, $MenuPic, 0, 0)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    ElseIf $Menu = "Highscores" Then
    _GDIPlus_GraphicsDrawImage($buffer, $HighscoresPic, 0, 0)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    ElseIf $Menu = "Options" Then
    _GDIPlus_GraphicsDrawRect($buffer, 0, 0, 599, 599, $Pen)
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 200, 280, 204, 204)

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

    $Speed = GUICtrlRead($Ipt_Speed)
    $Style = GUICtrlRead($Ipt_Style)
    EndIf
    _GDIPlus_GraphicsClear($buffer, 0xFF000000)
    $Timer = TimerInit()
    EndIf
    WEnd

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

    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_PenDispose($Pen)
    GUIDelete($Gui)

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

    Global $ScreenDc, $dc, $tSize, $pSize, $tSource, $pSource, $tBlend, $pBlend, $tPoint, $pPoint, $gdibitmap
    Global $title = "Desktop-Snake"
    Global $widthBlocks = IniRead("Settings.ini", "Settings", "Width", 20)
    Global $heightBlocks = IniRead("Settings.ini", "Settings", "Height", 20)
    Global $width = $widthBlocks * 30
    Global $height = $heightBlocks * 30
    Global $Speed = 100 - IniRead("Settings.ini", "Settings", "Speed", 35)
    Global $Style = IniRead("Settings.ini", "Settings", "Style", 3)

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

    Global $hWnd = GUICreate($title, $width, $height, -1, -1, 0x80000000, BitOR(0x00000080, 0x00080000, 0x00000008))
    GUISetState()

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    $ScreenDc = _WinAPI_GetDC($hWnd)
    $dc = _WinAPI_CreateCompatibleDC($ScreenDc)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    $tPoint = DllStructCreate($tagPOINT)
    $pPoint = DllStructGetPtr($tPoint)
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)

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

    ReDim $Snake[2][3]

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

    $Snake[0][0] = 10
    $Snake[0][1] = 10

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

    $Snake[1][0] = 10
    $Snake[1][1] = 11
    $Snake[1][2] = 0

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

    $Food[0][0] = Random(0, $widthBlocks - 1, 1)
    $Food[0][1] = Random(0, $heightBlocks - 1, 1)

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

    $Score = 0
    $Richtung = "Oben"

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

    While 1
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then _Exit()
    If _IsPressed(25) And $Richtung <> "Rechts" Then
    $Richtung = "Links"
    ElseIf _IsPressed(26) And $Richtung <> "Unten" Then
    $Richtung = "Oben"
    ElseIf _IsPressed(27) And $Richtung <> "Links" Then
    $Richtung = "Rechts"
    ElseIf _IsPressed(28) And $Richtung <> "Oben" Then
    $Richtung = "Unten"
    EndIf

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

    For $i = (UBound($Snake) - 1) To 1 Step -1
    $Snake[$i][0] = $Snake[$i - 1][0]
    $Snake[$i][1] = $Snake[$i - 1][1]
    Next

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

    If $Richtung = "Links" Then
    If $Snake[0][0] = 0 Then $Snake[0][0] = $widthBlocks
    $Snake[0][0] -= 1
    ElseIf $Richtung = "Oben" Then
    If $Snake[0][1] = 0 Then $Snake[0][1] = $heightBlocks
    $Snake[0][1] -= 1
    ElseIf $Richtung = "Rechts" Then
    If $Snake[0][0] = $widthBlocks - 1 Then $Snake[0][0] = -1
    $Snake[0][0] += 1
    ElseIf $Richtung = "Unten" Then
    If $Snake[0][1] = $heightBlocks - 1 Then $Snake[0][1] = -1
    $Snake[0][1] += 1
    EndIf

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

    If $Snake[0][0] = $Food[0][0] And $Snake[0][1] = $Food[0][1] Then
    $Score += 50
    $Food[0][0] = Random(0, $widthBlocks - 1, 1)
    $Food[0][1] = Random(0, $heightBlocks - 1, 1)
    ReDim $Snake[UBound($Snake) + 1][3]
    If $Style = 3 Then
    $Snake[UBound($Snake) - 1][2] = Random(0, 2, 1)
    Else
    $Snake[UBound($Snake) - 1][2] = $Style
    EndIf
    $Snake[UBound($Snake) - 1][0] = $Snake[UBound($Snake) - 2][0]
    $Snake[UBound($Snake) - 1][1] = $Snake[UBound($Snake) - 2][1]
    EndIf

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

    For $i = 1 To UBound($Snake) - 1
    If $Snake[0][0] = $Snake[$i][0] And $Snake[0][1] = $Snake[$i][1] Then
    $Highscore = IniRead("Settings.ini", "Settings", "Highscore", 0)
    If $Score > $Highscore Then $Highscore = $Score
    IniWrite("Settings.ini", "Settings", "Highscore", $Highscore)
    _GDIPlus_GraphicsDrawImageRect($backbuffer, $Fail, 25, 0, 547, 600)
    _GDIPlus_GraphicsDrawString($backbuffer, "Score: " &$Score &" Punkte", 230, 500, "Goudy Stout", 12)
    _GDIPlus_GraphicsDrawString($backbuffer, "Highscore: " &$Highscore &" Punkte", 230, 530, "Goudy Stout", 12)
    _UpDate()
    _GDIPlus_GraphicsClear($backbuffer, 0x00000000)
    While GUIGetMsg() <> $GUI_EVENT_CLOSE
    WEnd
    _Exit()
    EndIf
    Next
    _GDIPlus_GraphicsDrawImageRect($backbuffer, $FoodPic, $Food[0][0] * 30, $Food[0][1] * 30, 30, 30)

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

    If $Richtung = "Links" Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeKopf[3], $Snake[0][0] * 30, $Snake[0][1] * 30)
    ElseIf $Richtung = "Oben" Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeKopf[0], $Snake[0][0] * 30, $Snake[0][1] * 30)
    ElseIf $Richtung = "Rechts" Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeKopf[1], $Snake[0][0] * 30, $Snake[0][1] * 30)
    ElseIf $Richtung = "Unten" Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeKopf[2], $Snake[0][0] * 30, $Snake[0][1] * 30)
    EndIf

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

    For $i = 1 To UBound($Snake) - 2
    If $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i - 1][0] = 0 And $Snake[$i][0] = $widthBlocks - 1 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = 0 And $Snake[$i][0] = $widthBlocks - 1 And $Snake[$i + 1][1] = + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $widthBlocks - 1 And $Snake[$i][0] = 0 And $Snake[$i + 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $widthBlocks - 1 And $Snake[$i][0] = 0 And $Snake[$i + 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i + 1][0] = 0 And $Snake[$i][0] = $widthBlocks - 1 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = 0 And $Snake[$i][0] = $widthBlocks - 1 And $Snake[$i - 1][1] = + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $widthBlocks - 1 And $Snake[$i][0] = 0 And $Snake[$i - 1][1] = $Snake[$i][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $widthBlocks - 1 And $Snake[$i][0] = 0 And $Snake[$i - 1][1] = $Snake[$i][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = 0 And $Snake[$i + 1][1] = $heightBlocks - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = $heightBlocks - 1 And $Snake[$i + 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = $heightBlocks - 1 And $Snake[$i + 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i - 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = 0 And $Snake[$i + 1][1] = $heightBlocks - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = 0 And $Snake[$i - 1][1] = $heightBlocks - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[0][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] + 1 And $Snake[$i][1] = $heightBlocks - 1 And $Snake[$i - 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[1][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = $heightBlocks - 1 And $Snake[$i - 1][1] = 0 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[2][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    ElseIf $Snake[$i + 1][0] = $Snake[$i][0] - 1 And $Snake[$i][1] = 0 And $Snake[$i - 1][1] = $heightBlocks - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEcke[3][$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)

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

    Else
    If $Snake[$i - 1][1] = $Snake[$i][1] Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakePicsH[$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    Else
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakePicsV[$Snake[$i][2]], $Snake[$i][0] * 30, $Snake[$i][1] * 30)
    EndIf
    EndIf
    Next

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

    $SnakeLengh = UBound($Snake) - 1
    If $Snake[$SnakeLengh - 1][0] = $Snake[$SnakeLengh][0] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEnde[0][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    ElseIf $Snake[$SnakeLengh - 1][1] = $Snake[$SnakeLengh][1] + 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEnde[1][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    ElseIf $Snake[$SnakeLengh - 1][0] = $Snake[$SnakeLengh][0] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEnde[2][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    ElseIf $Snake[$SnakeLengh - 1][1] = $Snake[$SnakeLengh][1] - 1 Then
    _GDIPlus_GraphicsDrawImage($backbuffer, $SnakeEnde[3][$Snake[$SnakeLengh][2]], $Snake[$SnakeLengh][0] * 30, $Snake[$SnakeLengh][1] * 30)
    EndIf

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

    _GDIPlus_GraphicsDrawString($backbuffer, $Score &" Punkte", 15, 35, "Goudy Stout", 14)
    _GDIPlus_GraphicsDrawRect($backbuffer, 0, 0, $width - 1, $height - 1)
    _UpDate()
    If _IsPressed(79) Then _GDIPlus_ImageSaveToFile($hBitmap, @DesktopDir &"\Desktopsnake.png") ;Screenshot with F10
    _GDIPlus_GraphicsClear($backbuffer, 0x00000000)
    Sleep($Speed)
    WEnd

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

    Func _Exit($b = 1)
    For $i = 0 To UBound($SnakePicsH) - 1
    _GDIPlus_ImageDispose($SnakeKopf[$i])
    Next
    For $i = 0 To UBound($SnakePicsH) - 1
    _GDIPlus_ImageDispose($SnakePicsH[$i])
    Next
    For $i = 0 To UBound($SnakePicsV) - 1
    _GDIPlus_ImageDispose($SnakePicsV[$i])
    Next
    For $i = 0 To 2
    For $a = 0 To 3
    _GDIPlus_ImageDispose($SnakeEcke[$a][$i])
    Next
    Next
    For $i = 0 To 2
    For $a = 0 To 3
    _GDIPlus_ImageDispose($SnakeEnde[$a][$i])
    Next
    Next
    _GDIPlus_ImageDispose($MenuPic)
    _GDIPlus_ImageDispose($OptionsPic)
    _GDIPlus_ImageDispose($HighscoresPic)
    _GDIPlus_ImageDispose($FoodPic)
    _GDIPlus_ImageDispose($Fail)

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

    If $b = 1 Then
    _WinAPI_DeleteDC($dc)
    _WinAPI_ReleaseDC($hWnd, $ScreenDc)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    GUIDelete($hWnd)
    EndIf
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _UpDate()
    $gdibitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    _WinAPI_SelectObject($dc, $gdibitmap)
    _WinAPI_UpdateLayeredWindow($hWnd, $ScreenDc, 0, $pSize, $dc, $pSource, 0, $pBlend, 2)
    _WinAPI_DeleteObject($gdibitmap)
    EndFunc

    [/autoit]

    EDIT: Es ist jetzt langsamer und man sieht die Begrenzung =)

    Changelog:

    Spoiler anzeigen

    Version 1.0:
    -Release

    Version 1.1:
    -Neues Snake Design mit korrekter Darstellung der Ecken der Schlange
    -Menü mit KI-Snake, die im Hintergrund spielt
    -Optionen-Menü, in dem man Geschwindigkeit, Style (Grün, Orange, Gelb oder Bunt) und die Höhe und Breite des Spielbereichs wählen kann
    -(Highscores) ;Noch nicht hinzugefügt, aber die Anlage ist bereits da

    4 Mal editiert, zuletzt von KingLoL (5. April 2012 um 00:38)

  • KingLoL
    Ich weiß es ist keine Pflicht, aber mach doch bitte mal einen screenshot und poste ihn hier.
    Ich finde es immer blöd wenn man sich erst alles runterladen muss um zu sehen wie es aussieht.
    währe sehr nett :rolleyes:

    mfg Yellow

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

  • Zitat

    KingLoL
    Ich weiß es ist keine Pflicht, aber mach doch bitte mal einen screenshot und poste ihn hier.
    Ich finde es immer blöd wenn man sich erst alles runterladen muss um zu sehen wie es aussieht.
    währe sehr nett :rolleyes:

    mfg Yellow

    Dein Wunsch ist mir Befehl :D ich habs oben als .gif animation eingefügt =)

    Cheater Dieter wenn man sich beißt ist es zu Ende, dann stehen deine Punkte noch da und du kannst das Programm mit ESC beenden...

    Einmal editiert, zuletzt von KingLoL (25. März 2012 um 18:04)

  • Sorry war länger nicht da,
    aber mit Gif-Animation sieht das echt gut aus :D
    vielen dank für deine Mühe

    mfg Yellow

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o