Hallo ihr da draußen....
Es ist schon ein weilchen her, das ich hier ein Script veröffentlicht habe (Ich stell die selten Online, weil es meistens eindfach welche für mich sind, welche die Welt nicht braucht)
Ich wollte ja was mit GDI+ machen, und da ich etwas Langeweile , und ein Beispiel-GDI+ Script von name22 hatte, dachte ich, ich mache etwas Pacman mäßiges...
Die KI von dem Blinky Monster hat EM gemacht (@EM: ich musste noch etwas dran ändern, weils sonst ein wenig gelaggt hatte) deswegen @EM ads er sich die Zeit genommen hatte...
Allgemeine Information: Das ist mein erstes richtiges GDI+ Script (Die analoguhr zählt nciht, das war zu 90% name22) ist es ein entsprechender Spagetticode Also nicht wundern... wie in der Grundschule: erst Schreiben lernen, dann schönschreiben...
Beiliegend ist der Code, der coder für die Exe mit den Fileincludes etc. , eine .exe x86 und die Grafiken Wer so zu faul für den Download ist:
Für alle Faulen Menschen
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
Global $TimerInit = TimerInit()
Global $Richtung = Random(1, 4, 1)
$dll = DllOpen("user32.dll") ;Öffnet die DLL für die _IsPressed Funktion
Global $iX1 = 200 ;X Koordinate der Startposition des Spielers
Global $iY1 = 120 ;Y Koordinate der Startposition des Spielers
Global $Speed = 1 ;Geschwindigkeit des Spielers in Pixeln pro Bewegung
Global $MinX = 72 ;Legt das linke Ende des Raums fest
Global $MaxX = 72 + 356; - 12 ;Legt das rechte Ende des Raums fest
Global $MinY = 56 ;Legt das obere Ende des Raums fest
Global $MaxY = 56 + 297 ;- 20 ;Legt das untere Ende des Raums fest
Global $coinx = Random($MinX + 16, $MaxX - 16, 1)
Global $coiny = Random($MinY + 16, $MaxY - 16, 1)
Global $coinsgesammelt = 0
Global $sString = "Punkte:"
Global $bewegungsrichtug = "right"
Global $monster_pos_x = 400
Global $monster_pos_y = 200
Global $monsterspeed = 2
$hWnd = GUICreate("SeaGullPacman - Copyright by Jonathan Möwe", 625, 443)
GUISetState()
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(625, 443, $hGraphic) ;Erstellt eine Bitmap aus der Grafik "Zeuchenfläche" in der Variable
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;Ordnet dieser Bitmap Grafik Eigenschaften zu damit hineingezeichnet werden kann
;~ _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2) ;Glättet die Kanten der Objekte in einer Grafik
_GDIPlus_GraphicsClear($hGraphic, 0xFFF0F0F0) ;Füllt eine Grafik komplett (über die Grenzen der GUI hinaus) mit einer definierten Farbe
$Brush_Black = _GDIPlus_BrushCreateSolid(0xFF000000)
$hBrush = _GDIPlus_BrushCreateSolid(0x7F00007F)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF00007F)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 12, 2)
$tLayout = _GDIPlus_RectFCreate(10, 10)
$smili_left = _GDIPlus_ImageLoadFromFile("left.png")
$smili_right = _GDIPlus_ImageLoadFromFile("right.png")
$smili_up = _GDIPlus_ImageLoadFromFile("up.png")
$smili_down = _GDIPlus_ImageLoadFromFile("down.png")
$coin = _GDIPlus_ImageLoadFromFile("coin.png")
$monster_bild = _GDIPlus_ImageLoadFromFile("monster.png")
AdlibRegister("setmonster", 50)
AdlibRegister("_ReDraw", 35)
While 1
;~ setmonster()
;~ _ReDraw()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
AdlibUnRegister()
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_ImageDispose($smili_left)
_GDIPlus_ImageDispose($smili_right)
_GDIPlus_ImageDispose($smili_up)
_GDIPlus_ImageDispose($smili_down)
_GDIPlus_ImageDispose($coin)
_GDIPlus_ImageDispose($monster_bild)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_Shutdown()
DllClose($dll)
Exit
EndSwitch
If _IsPressed("25", $dll) Then _WalkLeft()
If _IsPressed("26", $dll) Then _WalkUp()
If _IsPressed("27", $dll) Then _WalkRight()
If _IsPressed("28", $dll) Then _WalkDown()
If $iX1 > $coinx - 40 And $iX1 < $coinx + 16 And $iY1 > $coiny - 40 And $iY1 < $coiny + 16 Then coingesammelt()
[/autoit] [autoit][/autoit] [autoit]If $iX1 > $monster_pos_x - 40 And $iX1 < $monster_pos_x + 40 And $iY1 > $monster_pos_y - 40 And $iY1 < $monster_pos_y + 40 Then gameover()
;~ Sleep(35)
WEnd
Func _ReDraw()
;Alles von hier bis zum nächsten Kommentar ist für die Neudefinierung der Begrenzungen zuständig
If $iX1 > 72 + 356 - 51 Then
$MaxY = 56 + 297 - 51
;~ Else
;~ $MaxY = 56 + 297 - 51
EndIf
If $iY1 < 56 + 297 - 51 Then
$MaxX = 72 + 356 + 140 - 51
;~ Else
;~ $MaxX = 72 + 356 - 51
EndIf
;Ende Begrenzungen
_GDIPlus_GraphicsClear($hBuffer, 0xFFF0F0F0) ;Schon erklärt
_GDIPlus_GraphicsFillRect($hBuffer, 72, 56, 496, 297, $Brush_Black) ;vorher 356
_GDIPlus_GraphicsDrawStringEx($hBuffer, "punkte: " & $coinsgesammelt, $hFont, $tLayout, $hFormat, $hBrush)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDrawImageRect($hBuffer, $coin, $coinx, $coiny, 16, 16)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDrawImageRect($hBuffer, $monster_bild, $monster_pos_x, $monster_pos_y, 40, 40)
[/autoit] [autoit][/autoit] [autoit]If $bewegungsrichtug = "left" Then _GDIPlus_GraphicsDrawImageRect($hBuffer, $smili_left, $iX1, $iY1, 40, 40)
If $bewegungsrichtug = "right" Then _GDIPlus_GraphicsDrawImageRect($hBuffer, $smili_right, $iX1, $iY1, 40, 40)
If $bewegungsrichtug = "up" Then _GDIPlus_GraphicsDrawImageRect($hBuffer, $smili_up, $iX1, $iY1, 40, 40)
If $bewegungsrichtug = "down" Then _GDIPlus_GraphicsDrawImageRect($hBuffer, $smili_down, $iX1, $iY1, 40, 40)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, 625, 443) ;Zeichnet den Buffer auf die Grafik der GUI
EndFunc ;==>_ReDraw
;Alles von hier bis zum nächsten Kommentar ist für die Neusetzung der Spielerkoordinaten zuständig
Func _WalkLeft()
If $iX1 > $MinX Then $iX1 -= $Speed
$bewegungsrichtug = "left"
EndFunc ;==>_WalkLeft
Func _WalkRight()
If $iX1 < $MaxX Then $iX1 += $Speed
$bewegungsrichtug = "right"
EndFunc ;==>_WalkRight
Func _WalkUp()
If $iY1 > $MinY Then $iY1 -= $Speed
$bewegungsrichtug = "up"
EndFunc ;==>_WalkUp
Func _WalkDown()
If $iY1 < $MaxY Then $iY1 += $Speed
$bewegungsrichtug = "down"
EndFunc ;==>_WalkDown
;Ende Spielerkoordinaten
Func setcoin()
$coinx = Random($MinX + 16, $MaxX - 16, 1)
$coiny = Random($MinY + 16, $MaxY - 16, 1)
EndFunc ;==>setcoin
Func coingesammelt()
$coinsgesammelt += 1
setcoin()
EndFunc ;==>coingesammelt
Func setmonster()
Local $Timer = TimerDiff($TimerInit)
If $Timer >= 2000 Then
$Richtung = Random(1, 4, 1)
$TimerInit = TimerInit()
EndIf
Switch $Richtung
;496 = X max
;297 = y max
;72 = x min
;56 = y min
Case 1 ; Oben
If $monster_pos_y <= 56 Then
$monster_pos_y = 56
$Richtung = Random(1, 8, 1)
Else
$monster_pos_y -= $monsterspeed
EndIf
Case 2 ; Unten
If $monster_pos_y >= 297 Then
$monster_pos_y = 297
$Richtung = Random(1, 8, 1)
Else
$monster_pos_y += $monsterspeed
EndIf
Case 3 ; Rechts
If $monster_pos_x >= 496 Then
$monster_pos_x = 496
$Richtung = Random(1, 8, 1)
Else
$monster_pos_x += $monsterspeed
EndIf
Case 4 ; Links
If $monster_pos_x <= 72 Then
$monster_pos_x = 72
$Richtung = Random(1, 8, 1)
Else
$monster_pos_x -= $monsterspeed
EndIf
Case 5 ; Schräg Links Oben
If $monster_pos_x <= 56 Then
$monster_pos_x = 56
$Richtung = Random(1, 8, 1)
ElseIf $monster_pos_y <= 72 Then
$monster_pos_y = 72
$Richtung = Random(1, 8, 1)
Else
$monster_pos_x -= $monsterspeed
$monster_pos_y -= $monsterspeed
EndIf
Case 6 ; Schräg Links Unten
If $monster_pos_x <= 56 Then
$monster_pos_x = 56
$Richtung = Random(1, 8, 1)
ElseIf $monster_pos_y >= 297 Then
$monster_pos_y = 297
$Richtung = Random(1, 8, 1)
Else
$monster_pos_x -= $monsterspeed
$monster_pos_y += $monsterspeed
EndIf
Case 7 ; Schräg Rechts Oben
If $monster_pos_x >= 496 Then
$monster_pos_x = 496
$Richtung = Random(1, 8, 1)
ElseIf $monster_pos_y <= 72 Then
$monster_pos_y = 72
$Richtung = Random(1, 8, 1)
Else
$monster_pos_x += $monsterspeed
$monster_pos_y -= $monsterspeed
EndIf
Case 8 ; Schräg Rechts Unten
If $monster_pos_x >= 496 Then
$monster_pos_x = 496
$Richtung = Random(1, 8, 1)
ElseIf $monster_pos_y >= 297 Then
$monster_pos_y = 297
$Richtung = Random(1, 8, 1)
Else
$monster_pos_x += $monsterspeed
$monster_pos_y += $monsterspeed
EndIf
EndSwitch
EndFunc ;==>setmonster
Func gameover()
MsgBox(16, "GameOver", $coinsgesammelt & " Punkte")
$coinsgesammelt = 0
$iX1 = 200
$iY1 = 120
$monster_pos_x = 400
$monster_pos_y = 200
EndFunc ;==>gameover
Zusatzinfo: Wem das Spiel zu einfach ist, der kann oben $monsterspeed auf 6 oder 7 setzen, schon wirds lustiger.... (Zeile 25 oder 26)