• Hey Leute ich hab mich die letzten 2 Tage mal mit Gdi+ beschäftigt und das ist dabei rumgekommen :D
    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
    [autoit]

    #include <GdiPlus.au3>
    #include <GuiConstants.au3>
    #include <Misc.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $xg = 0
    Global $yg = 0
    Global $xb = 400
    Global $yb = 0
    Global $spieler = "Grün"
    Global $started = False

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)

    [/autoit] [autoit][/autoit] [autoit]

    $brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFF000000)
    $brushBlau = _GDIPlus_BrushCreateSolid(0xFF6677FF)

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    _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)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _EXIT()
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_Shutdown()
    EndFunc ;==>_EXIT

    [/autoit]
  • Fürs erste Spiel nicht schlecht, nur wenn sich beide entgegenkommen gewinnt immer Grün weil die IF Abfrage vorher kommt, man könnte es auf einen Fänger und einen "Wegläufer" beschrenken.

  • nur wenn sich beide entgegenkommen gewinnt immer Grün


    Bei dir bewegt sich also Blau? Bei mir verharrt es in der rechten oberen Ecke, kann den Sinn des Spiels nicht erkennen. Wenn man etwas fangen soll, muss dieses ja auch wegrennen sonst macht es keinen Spass,

    mfg autoBert

  • Du kannst die Vierecke mit W;A;S;D bzw OBEN;LINKS;UNTEN;RECHTS lenken. Nur was ich nicht verstehe, es soll ja "einen" Gejagten geben und einen fänger, wieso kann der Gejagte auch den Fänger fangen.

  • autoBert: ich versteh nicht warum sich das blaue Viereck nicht bewegt. Du steuerst es mit WASD.

    BadBunny: Die beiden wechseln sich ab, weil wenn immer der selbe Fänger wäre dann würde immer er Punkte bekommen.

    Edit: oben Anzeige eingefügt, die zeigt, wer Fuchs, wer Hase ist

  • Hallo DFPWare,

    jetzt hab ichs kapiert, das Spiel ist für 2 Spieler gedacht und ich dachte Blau wird vom Computer gespielt,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (9. April 2011 um 11:36)

  • und wo ist jetzt der fuchs :rofl:
    ne bei mir klappts nicht wirklich.eine kollision wird selten erkannt, und wenn's mal klappt, dann zeigt es oft den falschen Spieler an.

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

  • Bau einfach ein sleep(40) o.ä in die Hauptschleife, dann sollte das passen.


    Dies kann zu Problemen führen, im GuiGetMsg-Modus hat Sleep nichts in der "Lebenserhaltungs-Schleife" zu suchen.

    DFPWare, wenn du auf den OnEvent-Modus wechselst ist dies beseitigt,

    mfg autoBert