Hey Leute
ich hab mal das gute alte Snake nachprogrammiert, ja ich weiß, dass es das schon 100000000000000 mal gibt aber nicht ganz so oft mit GDI+ und wenn doch dann hab ich nicht durchgeblickt, deswegen hab ich hier mal ne Version die man hoffentlich verstehen kann ![]()
Ich weiß nur nicht, warum beim Start oben links so ein schwarzes Kästchen kommt, vielleicht konnt ihr mir ja helfen ![]()
Hier erstmal die Version für die die Snake nachprogrammieren lernen wollen ![]()
Spoiler anzeigen
#include <GuiConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
OnAutoItExitRegister("_EXIT")
[/autoit] [autoit][/autoit] [autoit]Global $x = 100
Global $y = 100
$score = 1
$kx = 300
$ky = 400
Global $direction = "down";startrichtung, kann geändert werden
Global $Laenge[3][2]
$Laenge[0][0] = 100
$Laenge[0][1] = 100
$Gui = GUICreate("Snake",500,500,100,100)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
$brushSchwarz = _GDIPlus_BrushCreateSolid(0xFF000000);die einzelnen Farben werden erstellt
$brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $graphic)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
GUISetState()
[/autoit] [autoit][/autoit] [autoit]AdlibRegister("_bewege",200);alle 200 Milisekunden wird die Schlange bewegt
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Do
$msg = GUIGetMsg()
Select
Case _IsPressed(25);links
$direction = "left"
Case _IsPressed(26);oben
$direction = "up"
Case _IsPressed(27);rechts
$direction = "right"
Case _IsPressed(28);unten
$direction = "down"
EndSelect
_GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss);zeichnet den Hintergrund
For $i = 0 to Ubound ($Laenge) -1;zeichnet die einzelnen Teile der Schlange
_GDIPlus_GraphicsFillRect($buffer, $Laenge[$i][0], $Laenge[$i][1], 10, 10, $brushSchwarz)
Next
_GDIPlus_GraphicsFillRect($buffer, $kx, $ky, 10, 10, $brushGruen);zeichnet das Futter
_GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500);zeichnet die Grafik
Select
Case $Laenge[0][0] >= ($kx - 5) And $Laenge[0][0] <= ($kx + 5) And $Laenge[0][1] >= ($ky - 5) And $Laenge[0][1] <= ($ky + 5);Prüft, ob der Kopf auf ein Futter trifft
$score += 1
Do
$kx = Random(1,490,1)
Until Mod($kx,20) = 0
Do
$ky = Random(1,490,1)
Until Mod($ky,20) = 0
$width = UBound($Laenge)
ReDim $Laenge[$width+1][2]
EndSelect
For $i = 1 To UBound($Laenge) - 1 Step 1;Prüft, ob der Kopf mit irgendeinem anderen Teil zusammenstößt
If $Laenge[0][0] = $Laenge[$i][0] Then
If $Laenge[0][1] = $Laenge[$i][1] Then
MsgBox(0,"Verloren","Sie haben mit einer Punktzahl von "&$score&" verloren!")
Exit
EndIf
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE
[/autoit] [autoit][/autoit] [autoit]Func _EXIT();Exit Funktion zur Freigabe der Ressourcen
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_Shutdown()
EndFunc
Func _bewege()
For $i = Ubound($Laenge) -1 to 1 Step -1;das Nachrücken der Schlange, das 2. Stück nimmt die Position des kopfes ein, das 3. die des 2. usw...
$Laenge[$i][0] = $Laenge[$i-1][0]
$Laenge[$i][1] = $Laenge[$i-1][1]
Next
If $direction == "left" And $x >= 0 Then $Laenge[0][0] -= 10;der Kopf bekommt eine neue Position
If $direction == "up" And $y >= 0 Then $Laenge[0][1] -= 10
If $direction == "right" And $x <= 500 Then $Laenge[0][0] += 10
If $direction == "down" And $y <= 500 Then $Laenge[0][1] += 10
EndFunc
Und hier meine ausgebaute Version:
Spoiler anzeigen
#include <GuiConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
OnAutoItExitRegister("_EXIT")
[/autoit] [autoit][/autoit] [autoit]Global $x = 100
Global $y = 100
$score = 1
$kx = 300
$ky = 400
Global $direction = "down" ;startrichtung, kann geändert werden
Global $Laenge[3][2]
For $i = 1 To UBound($Laenge) - 1
$Laenge[$i][0] = -100
$Laenge[$i][1] = -100
Next
$Laenge[0][0] = 100
$Laenge[0][1] = 100
$Gui = GUICreate("Snake",500,500,100,100)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
$brushSchwarz = _GDIPlus_BrushCreateSolid(0xFF000000) ;die einzelnen Farben werden erstellt
$brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $graphic)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
GUISetState()
[/autoit] [autoit][/autoit] [autoit]AdlibRegister("_bewege",200) ;alle 200 Milisekunden wird die Schlange bewegt
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Do
$msg = GUIGetMsg()
Select
Case _IsPressed(25) And $direction <> "right" ;links
$direction = "left"
Case _IsPressed(26) And $direction <> "down" ;oben
$direction = "up"
Case _IsPressed(27) And $direction <> "left" ;rechts
$direction = "right"
Case _IsPressed(28) And $direction <> "up" ;unten
$direction = "down"
EndSelect
_GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss) ;zeichnet den Hintergrund
For $i = 0 to Ubound ($Laenge) -1 ;zeichnet die einzelnen Teile der Schlange
_GDIPlus_GraphicsFillRect($buffer, $Laenge[$i][0], $Laenge[$i][1], 10, 10, $brushSchwarz)
Next
_GDIPlus_GraphicsFillRect($buffer, $kx, $ky, 10, 10, $brushGruen) ;zeichnet das Futter
_GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500) ;zeichnet die Grafik
Select
Case $Laenge[0][0] >= ($kx - 5) And $Laenge[0][0] <= ($kx + 5) And $Laenge[0][1] >= ($ky - 5) And $Laenge[0][1] <= ($ky + 5) ;Prüft, ob der Kopf auf ein Futter trifft
$score += 1
Do
$kx = Random(1,490,1)
Until Mod($kx,20) = 0
Do
$ky = Random(1,490,1)
Until Mod($ky,20) = 0
$width = UBound($Laenge)
ReDim $Laenge[$width+1][2]
EndSelect
For $i = 1 To UBound($Laenge) - 1 Step 1 ;Prüft, ob der Kopf mit irgendeinem anderen Teil zusammenstößt
If $Laenge[0][0] = $Laenge[$i][0] Then
If $Laenge[0][1] = $Laenge[$i][1] Then
MsgBox(0,"Verloren","Sie haben mit einer Punktzahl von "&$score&" verloren!")
Exit
EndIf
EndIf
Next
Select ;Prüft, ob die Schlange den Bildschirm verlässt
Case $Laenge[0][0] < 0
$Laenge[0][0] = 480
Case $Laenge[0][0] > 480
$Laenge[0][0] = 0
Case $Laenge[0][1] < 0
$Laenge[0][1] = 480
Case $Laenge[0][1] > 480
$Laenge[0][1] = 0
EndSelect
Until $msg = $GUI_EVENT_CLOSE
[/autoit] [autoit][/autoit] [autoit]Func _EXIT() ;Exit Funktion zur Freigabe der Ressourcen
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_Shutdown()
EndFunc
Func _bewege()
For $i = Ubound($Laenge) -1 to 1 Step -1 ;das Nachrücken der Schlange, das 2. Stück nimmt die Position des kopfes ein, das 3. die des 2. usw...
$Laenge[$i][0] = $Laenge[$i-1][0]
$Laenge[$i][1] = $Laenge[$i-1][1]
Next
If $direction == "left" And $x >= 0 Then $Laenge[0][0] -= 10 ;der Kopf bekommt eine neue Position
If $direction == "up" And $y >= 0 Then $Laenge[0][1] -= 10
If $direction == "right" And $x <= 500 Then $Laenge[0][0] += 10
If $direction == "down" And $y <= 500 Then $Laenge[0][1] += 10
EndFunc
DFPWare