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