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
Viel Spaß beim spielen, ich hoffe es gibt keine bugs
[Blockierte Grafik: http://img37.imageshack.us/img37/7171/desktopsnake.gif]
Skript:
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <WinAPI.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <Misc.au3>
$widthBlocks = 20
$heightBlocks = 20
$Speed = 100 - IniRead("Settings.ini", "Settings", "Speed", 35)
$Style = IniRead("Settings.ini", "Settings", "Style", 3)
$Menu = "MainMenu"
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]
$Snake[0][0] = 10
$Snake[0][1] = 10
$Snake[1][0] = 10
$Snake[1][1] = 11
$Snake[1][2] = 0
$Food[0][0] = Random(0, 19, 1)
$Food[0][1] = Random(0, 19, 1)
$Richtung = "Oben"
_GDIPlus_Startup()
$Gui = GUICreate("Desktop-Snake", 600, 600)
GUISetState()
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(600, 600, $graphic)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
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
$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)
$Timer = TimerInit()
While 1 ;KI PLAYING IN THE MENU
$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)
$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)
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"
$Speed = GUICtrlRead($Ipt_Speed)
$Style = GUICtrlRead($Ipt_Style)
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)
GUICtrlDelete($Ipt_Speed)
GUICtrlDelete($Ipt_Style)
GUICtrlDelete($Ipt_Width)
GUICtrlDelete($Ipt_Height)
EndIf
EndIf
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
For $i = (UBound($Snake) - 1) To 1 Step -1
$Snake[$i][0] = $Snake[$i - 1][0]
$Snake[$i][1] = $Snake[$i - 1][1]
Next
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
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
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
$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)
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
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)
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)
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)
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)
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)
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)
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
$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
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)
$Speed = GUICtrlRead($Ipt_Speed)
$Style = GUICtrlRead($Ipt_Style)
EndIf
_GDIPlus_GraphicsClear($buffer, 0xFF000000)
$Timer = TimerInit()
EndIf
WEnd
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_PenDispose($Pen)
GUIDelete($Gui)
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)
Global $hWnd = GUICreate($title, $width, $height, -1, -1, 0x80000000, BitOR(0x00000080, 0x00080000, 0x00000008))
GUISetState()
Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$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)
ReDim $Snake[2][3]
[/autoit] [autoit][/autoit] [autoit]$Snake[0][0] = 10
$Snake[0][1] = 10
$Snake[1][0] = 10
$Snake[1][1] = 11
$Snake[1][2] = 0
$Food[0][0] = Random(0, $widthBlocks - 1, 1)
$Food[0][1] = Random(0, $heightBlocks - 1, 1)
$Score = 0
$Richtung = "Oben"
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
For $i = (UBound($Snake) - 1) To 1 Step -1
$Snake[$i][0] = $Snake[$i - 1][0]
$Snake[$i][1] = $Snake[$i - 1][1]
Next
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
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
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)
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
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)
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)
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)
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)
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)
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)
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
$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
_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
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)
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
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
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