Hey Leute ich hab mich die letzten 2 Tage mal mit Gdi+ beschäftigt und das ist dabei rumgekommen
Man muss erst auf Start klicken, weil da der Timer initialisiert wird, aber nur beim ersten mal, danach passiert das von selbst.
Das Ziel des Spiels ist den Gegner innerhalb von 30 Sekunden zu fangen. Je schneller desto mehr Punkte bekommt man. Gesteuert wird die Spielfigur mit W,A,S,D und den Pfeiltasten.
Spoiler anzeigen
#include <GdiPlus.au3>
#include <GuiConstants.au3>
#include <Misc.au3>
#include <StaticConstants.au3>
Global $xg = 0
Global $yg = 0
Global $xb = 400
Global $yb = 0
Global $spieler = "Grün"
Global $started = False
OnAutoItExitRegister("_EXIT")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Fuchs jagt Hase", 500, 550, 100, 100)
$punkteGruen = GUICtrlCreateLabel("0", 10, 510, 60, 30)
GUICtrlSetFont($punkteGruen, 20)
$punkteBlau = GUICtrlCreateLabel("0", 430, 510, 60, 30, $SS_RIGHT)
GUICtrlSetFont($punkteBlau, 20)
$anzeigeGruen = GUICtrlCreateLabel("F", 80, 510, 30, 30)
GUICtrlSetFont($anzeigeGruen, 20)
$anzeigeBlau = GUICtrlCreateLabel("H", 390, 510, 30, 30)
GUICtrlSetFont($anzeigeBlau, 20)
$reset = GUICtrlCreateButton("Reset", 140, 510, 100, 30)
GUICtrlSetFont($reset, 20)
$start = GUICtrlCreateButton("Start", 250, 510, 100, 30)
GUICtrlSetFont($start, 20)
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $graphic)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)
$brushWeiss = _GDIPlus_BrushCreateSolid(0xFF000000)
$brushBlau = _GDIPlus_BrushCreateSolid(0xFF6677FF)
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $started = True And $xg >= ($xb - 100) And $xg <= ($xb + 100) And $yg >= ($yb - 100) And $yg <= ($yb + 100)
$zeit = Int(30 - (TimerDiff($zeitInit) / 1000))
MsgBox(0, "Winner", $spieler & " hat gewonnen")
$xg = 0
$yg = 0
$xb = 400
$yb = 0
If $spieler == "Grün" Then
$spieler = "Blau"
$altepunkte = GUICtrlRead($punkteGruen)
GUICtrlSetData($punkteGruen, ($altepunkte + $zeit))
GUICtrlSetData($anzeigeBlau, "F")
GUICtrlSetData($anzeigeGruen, "H")
$zeitInit = TimerInit()
Else
$spieler = "Grün"
$altepunkte = GUICtrlRead($punkteBlau)
GUICtrlSetData($punkteBlau, ($altepunkte + $zeit))
GUICtrlSetData($anzeigeBlau, "H")
GUICtrlSetData($anzeigeGruen, "F")
$zeitInit = TimerInit()
EndIf
Case $msg = $reset
GUICtrlSetData($punkteGruen, "0")
GUICtrlSetData($punkteBlau, "0")
Case $msg = $start
$zeitInit = TimerInit()
$started = True
$xg = 0
$yg = 0
$xb = 400
$yb = 0
EndSelect
If _IsPressed(25) And $xg >= 0 Then $xg -= 2 ; Links
If _IsPressed(26) And $yg >= 0 Then $yg -= 2 ; Oben
If _IsPressed(27) And $xg <= 400 Then $xg += 2 ; Rechts
If _IsPressed(28) And $yg <= 400 Then $yg += 2 ; Unten
If _IsPressed(41) And $xb >= 0 Then $xb -= 2 ; A
If _IsPressed(57) And $yb >= 0 Then $yb -= 2 ; W
If _IsPressed(44) And $xb <= 400 Then $xb += 2 ; D
If _IsPressed(53) And $yb <= 400 Then $yb += 2 ; S
_GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss)
_GDIPlus_GraphicsFillRect($buffer, $xg, $yg, 100, 100, $brushGruen)
_GDIPlus_GraphicsFillRect($buffer, $xb, $yb, 100, 100, $brushBlau)
_GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500)
WEnd
[/autoit] [autoit][/autoit] [autoit]Func _EXIT()
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_Shutdown()
EndFunc ;==>_EXIT