Pong mit GDI+, Der Ball

  • Hallo,

    Bin jetzt beim Ball, hab keine Ahnung wie ich den jetzt Diagonal fliegen lasse :S ( und was muss ich machen damit er die 0 nicht übermalen kann? )

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")
    Global $BewegungSenkrecht=5
    Global $ballpos1 = @DesktopWidth/2
    Global $ballpos2 = @DesktopHeight/2-50
    Global $Strichpos1 = @DesktopHeight / 2 - 70
    Global $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70
    Global $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()
    ;~ $WS_EX_COMPOSITED = 0x2000000
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0));$WS_EX_COMPOSITED))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(100)
    Until _IsPressed("0D", $dll) Or _IsPressed("20", $dll)

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 100, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GuiSetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    If _DetectCollision()=1 Then
    _Abprallen(1)
    ElseIf _DetectCollision()=2 Then
    _Abprallen(2)
    EndIf
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - 10, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= 10
    $Strichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + 10, $hpen_Del)
    $Strichpos1 += 10
    $Strichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - 10, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= 10
    $RStrichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + 10, $hpen_Del)
    $RStrichpos1 += 10
    $RStrichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _ball()
    $ball=_GDIPlus_GraphicsDrawArc ($hGraphic,$ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    $ball=_GDIPlus_GraphicsDrawArc ($hGraphic,$ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2+=$BewegungSenkrecht
    $ball=_GDIPlus_GraphicsDrawArc ($hGraphic,$ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc

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

    Func _DetectCollision()
    If $ballpos2=@DesktopHeight-35 Then
    Return 1
    ElseIf $ballpos2=35 Then
    Return 2
    EndIf
    EndFunc

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

    Func _Abprallen($number)
    If $number=1 Then
    $BewegungSenkrecht=-5
    ElseIf $number=2 Then
    $BewegungSenkrecht=+5
    EndIf
    EndFunc

    [/autoit]
  • Hab den Ball mal ins Rollen gebracht.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")
    Global $BewegungSenkrecht = Random(5,7,1), $BewegungWaagerecht=Random(5,7,1)
    Global $ballpos1 = @DesktopWidth/2
    Global $ballpos2 = @DesktopHeight/2-50
    Global $Strichpos1 = @DesktopHeight / 2 - 70
    Global $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70
    Global $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()
    ;~ $WS_EX_COMPOSITED = 0x2000000
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0));$WS_EX_COMPOSITED))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D", $dll) Or _IsPressed("20", $dll)

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 100, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GuiSetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    ;~ If _DetectCollision()=1 Then
    ;~ _Abprallen(1)
    ;~ ElseIf _DetectCollision()=2 Then
    ;~ _Abprallen(2)
    ;~ EndIf
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - 10, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= 10
    $Strichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + 10, $hpen_Del)
    $Strichpos1 += 10
    $Strichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - 10, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= 10
    $RStrichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + 10, $hpen_Del)
    $RStrichpos1 += 10
    $RStrichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _ball()
    ;~ $ball=_GDIPlus_GraphicsDrawArc ($hGraphic,$ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    $ball=_GDIPlus_GraphicsDrawArc ($hGraphic,$ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht
    $ballpos1 += $BewegungWaagerecht
    $ball=_GDIPlus_GraphicsDrawArc ($hGraphic,$ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc

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

    Func _DetectCollision()
    If $ballpos1 >= @DesktopWidth-40 And $BewegungWaagerecht >0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht <0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight-40 And $BewegungSenkrecht >0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht <0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc

    [/autoit]

    Für die Kollisionscheck-Funktionen würde ich mir am besten mal das Beispiel von APPLEEATER hier anschauen. In meinem Fussball-Spiel ist auch sowas enthalten.

  • Den Teil muss ich umschreiben?

    Spoiler anzeigen
    [autoit]

    Switch $signx
    Case "-"
    If $next[0] > $width1 AND $next[0] < $width1 + $padw Then
    If $next[1] > ($pad1[1] - $bsize * 2) AND $next[1] < ($pad1[1] + $padh) Then
    Sign("x")
    $maxa = $maxa + Random(0, 1, 1)
    $speed[0] = $speed[0] + Random(0, 1, 1)
    $speed[1] = Random(1, $maxa, 1)
    $hits = $hits + 1
    EndIf
    EndIf
    Case "+"
    If $next[0] > $width2 - $bsize AND $next[0] < $width2 + $padw Then
    If $next[1] > ($pad2[1] - $bsize * 2) AND $next[1] < ($pad2[1] + $padh) Then
    Sign("x")
    $maxa = $maxa + Random(0, 1, 1)
    $speed[0] = $speed[0] + Random(0, 1, 1)
    $speed[1] = Random(1, $maxa, 1)
    $hits = $hits + 1
    EndIf
    EndIf
    EndSwitch

    [/autoit]
  • Hi,
    ich hab mal ein bisschen weiter gebastelt:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    Global $ballpos1 = @DesktopWidth / 2
    Global $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = @DesktopHeight / 2 - 70
    Global $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70
    Global $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")

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

    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D", $dll) Or _IsPressed("20", $dll)

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 100, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - 10, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= 10
    $Strichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + 10, $hpen_Del)
    $Strichpos1 += 10
    $Strichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - 10, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= 10
    $RStrichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + 10, $hpen_Del)
    $RStrichpos1 += 10
    $RStrichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht
    $ballpos1 += $BewegungWaagerecht
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    EndSwitch

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

    _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)

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

    ;~ _GDIPlus_GraphicsDrawLine($hGraphic, ...)
    ;~ _GDIPlus_GraphicsDrawLine($hGraphic, ...)

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

    ; hier müssen die balken irgendiwe gelöscht werden, wird bei mir aber nix :S

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

    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)

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

    $BewegungSenkrecht = Random(5, 7, 1)
    $BewegungWaagerecht = Random(5, 7, 1)
    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>setzeausgang

    [/autoit]

    Allerdings muss ich sagen, dass ich noch nie mit GDI(+) gearbeitet hab.
    Es sind noch einige Bugs drin, die aber zum Teil auch vorher schon drin waren.

    - beim schließen kommt immer [...] hat einen Fehler festgestellt und muss beendet werden. Ich denke mal, das liegt daran, dass _GDIPlus_ShutDown() benutzt wird, ohne dass der Speicher von den ganzen Elementen freigegeben worden ist.

    - die Balken müssen irgendwie gelöscht werden, wenn der Ball nicht auf den Schläger trifft. Das weis ich nicht so genau wie das geht. ( Zeile 168 ff)

    - Der Ball fängt immer in der selben Richtung an sich fortzubewegen.

  • Hi,
    hab mich auch mal versucht.
    Dies ist dabei rausgekommen

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    HotKeySet("{ESC}", "_ende")
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht, $BewegungWaagerecht
    Global $ballpos1, $ballpos2
    Global $Strichpos1, $Strichpos2
    Global $RStrichpos1, $RStrichpos2
    Global $Titel = "Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")

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

    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D", $dll) Or _IsPressed("20", $dll)

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 100, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    setzeausgang(0)

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - 10, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= 10
    $Strichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + 10, $hpen_Del)
    $Strichpos1 += 10
    $Strichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - 10, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= 10
    $RStrichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + 10, $hpen_Del)
    $RStrichpos1 += 10
    $RStrichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht
    $ballpos1 += $BewegungWaagerecht
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    EndSwitch

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

    ;Ball und Schläger übermalen
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, 13, @DesktopWidth - 100, @DesktopHeight - 13, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, 13, 100, @DesktopHeight - 13, $hpen_Del)

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

    ;Ball läuft zufallsweise in eine der 4 Richtungen
    $richtung_senk = Random(1, 2, 1)
    $richtung_waag = Random(1, 2, 1)
    If $richtung_senk = 1 Then
    $BewegungSenkrecht = Random(5, 7, 1)
    Else
    $BewegungSenkrecht = Random(-7, -5, 1)
    EndIf
    If $richtung_waag = 1 Then
    $BewegungWaagerecht = Random(5, 7, 1)
    Else
    $BewegungWaagerecht = Random(-7, -5, 1)
    EndIf

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

    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    EndFunc ;==>setzeausgang

    [/autoit]

    - Der Ball läuft nun per Zufall in eine Richtung
    - Die Schläger werden nach dem Punkt gelöscht, bzw. übermalt (dafür hab ich auch ne Weile gebraucht :rolleyes: )

  • Hi,
    noch en paar Fehler ausgebessert.
    Die Geschwindigkeit kann über die 2 Globalen Variablen am Scriptanfang angepasst werden (Bewegung der Schläger, Bewegung vom Ball)

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")

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

    _GDIPlus_Startup()

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

    ; Variablen
    Global $Speed = 1.0, $SpeedBalken = 10, $level = 1
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    Global $ballpos1 = @DesktopWidth / 2, $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = @DesktopHeight / 2 - 70, $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70, $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong", $Rahmenbreite = 10

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

    ; GUI
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    Global $Spielstand = GUICtrlCreateLabel("0:0" & @TAB & @TAB & 'Level 1', @DesktopWidth / 2, @DesktopHeight / 15, 600, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D") Or _IsPressed("20")

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)
    GUICtrlSetState($Spielstand, $GUI_SHOW)

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    Global $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    Exit
    EndFunc ;==>_ende

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

    Func Onautoitexit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    EndFunc ;==>Onautoitexit

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - $SpeedBalken, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= $SpeedBalken
    $Strichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + $SpeedBalken, $hpen_Del)
    $Strichpos1 += $SpeedBalken
    $Strichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - $SpeedBalken, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= $SpeedBalken
    $RStrichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + $SpeedBalken, $hpen_Del)
    $RStrichpos1 += $SpeedBalken
    $RStrichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht * $Speed
    $ballpos1 += $BewegungWaagerecht * $Speed
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then
    $BewegungWaagerecht = Random(5, 7, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then
    $BewegungWaagerecht = Random(-7, -5, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    EndSwitch

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

    ;Ball und Schläger übermalen
    _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, 13, @DesktopWidth - 100, @DesktopHeight - 13, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, 13, 100, @DesktopHeight - 13, $hpen_Del)

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

    ;Ball läuft zufallsweise in eine der 4 Richtungen
    If Random(0, 1, 1) Then
    $BewegungSenkrecht = Random(1, 11, 1)
    Else
    $BewegungSenkrecht = Random(-11, -1, 1)
    EndIf
    If Random(0, 1, 1) Then
    $BewegungWaagerecht = Random(1, 11, 1)
    Else
    $BewegungWaagerecht = Random(-11, -1, 1)
    EndIf

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

    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    EndFunc ;==>setzeausgang

    [/autoit]

    KI muss bis morgen warten...

  • Ich verfolge dieses Thema von Anfang an, und ich muss sagen, echt geil :)
    Weiter so ^^
    Gut wäre noch die Score Anzeige auf einer anderen Ebene anzuordnen.

  • Ich verfolge dieses Thema von Anfang an, und ich muss sagen, echt geil :)
    Weiter so ^^
    Gut wäre noch die Score Anzeige auf einer anderen Ebene anzuordnen.

    Hey cool freut mich =D

    So hab auch nochmal was verbessert:
    Gibt jetzt ne _ScoreUpdate Funktion damit das nicht einfach übermalt wird.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")

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

    _GDIPlus_Startup()

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

    ; Variablen
    Global $begin
    Global $Speed = 1.0, $SpeedBalken = 10, $level = 1
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    Global $ballpos1 = @DesktopWidth / 2, $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = @DesktopHeight / 2 - 70, $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70, $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong", $Rahmenbreite = 10

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

    ; GUI
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    Global $Spielstand = GUICtrlCreateLabel("0:0" & @TAB & @TAB & 'Level 1', @DesktopWidth / 2, @DesktopHeight / 15, 600, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D") Or _IsPressed("20")

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)
    GUICtrlSetState($Spielstand, $GUI_SHOW)

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    Global $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    Exit
    EndFunc ;==>_ende

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

    Func Onautoitexit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    EndFunc ;==>Onautoitexit

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen
    Sleep( 500 )
    $begin=TimerInit()
    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    _ScoreUpdate()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - $SpeedBalken, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= $SpeedBalken
    $Strichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + $SpeedBalken, $hpen_Del)
    $Strichpos1 += $SpeedBalken
    $Strichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - $SpeedBalken, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= $SpeedBalken
    $RStrichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + $SpeedBalken, $hpen_Del)
    $RStrichpos1 += $SpeedBalken
    $RStrichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht * $Speed
    $ballpos1 += $BewegungWaagerecht * $Speed
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then
    $BewegungWaagerecht = Random(5, 7, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then
    $BewegungWaagerecht = Random(-7, -5, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    EndSwitch

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

    ;Ball und Schläger übermalen
    _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, 13, @DesktopWidth - 100, @DesktopHeight - 13, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, 13, 100, @DesktopHeight - 13, $hpen_Del)

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

    ;Ball läuft zufallsweise in eine der 4 Richtungen
    If Random(0, 1, 1) Then
    $BewegungSenkrecht = Random(1, 11, 1)
    Else
    $BewegungSenkrecht = Random(-11, -1, 1)
    EndIf
    If Random(0, 1, 1) Then
    $BewegungWaagerecht = Random(1, 11, 1)
    Else
    $BewegungWaagerecht = Random(-11, -1, 1)
    EndIf

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

    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    EndFunc ;==>setzeausgang

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

    Func _ScoreUpdate()
    $dif=TimerDiff( $begin )
    If $dif>=100 Then
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    $begin=TimerInit()
    EndIf
    EndFunc

    [/autoit]
  • Und dann hätte ich noch eine Double-Buffer Lösung:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    Opt("GUIOnEventMode",1)
    HotKeySet("{ESC}", "_ende")

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

    Global Const $Titel = "Pong"
    Global Const $Rahmenbreite = 10
    Global Const $ballSpeed = 1.0, $PaddleSpeed = 10

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

    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    If Random(1,20) < 11 Then $BewegungSenkrecht *= -1
    If Random(1,20) < 11 Then $BewegungWaagerecht *= -1

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

    Global $ballpos1 = @DesktopWidth / 2
    Global $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = Round(@DesktopHeight / 2 - 70 - (@DesktopHeight/4))
    Global $Strichpos2 = Round(@DesktopHeight / 2 + 70 - (@DesktopHeight/4))
    Global $RStrichpos1 = Round(@DesktopHeight / 2 - 70 + (@DesktopHeight/4))
    Global $RStrichpos2 = Round(@DesktopHeight / 2 + 70 + (@DesktopHeight/4))

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

    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()

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

    $hBrush = _GDIPlus_BrushCreateSolid (0xFFFFFFFF)
    $hBrush2 = _GDIPlus_BrushCreateSolid (0xFF0000DD)
    $hBrush_Aus = _GDIPlus_BrushCreateSolid (0xFF220000)
    $hFormat = _GDIPlus_StringFormatCreate ()
    _GDIPlus_StringFormatSetAlign($hFormat,1)
    $hFamily = _GDIPlus_FontFamilyCreate ("Arial")
    $hFont = _GDIPlus_FontCreate ($hFamily, 40, 1)
    $tLayout = _GDIPlus_RectFCreate (@DesktopWidth/2-200, @DesktopWidth/15, 400, 50)
    $tLayout2 = _GDIPlus_RectFCreate (@DesktopWidth/2-194, @DesktopWidth/15-2, 400, 80)
    $tLayout_Pause = _GDIPlus_RectFCreate (@DesktopWidth/2-300, @DesktopWidth/2-50, 600, 100)

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

    $hwnd = GUICreate($Titel,@DesktopWidth,@DesktopHeight,0,0,$WS_POPUP,$WS_EX_TOPMOST)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_ende")
    GUISetBkColor(0)

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

    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D") Or _IsPressed("20")

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

    GUICtrlDelete($Willkommen)

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

    $PAUSE_DUMMY = GUICtrlCreateDummy()
    GUICtrlSetOnEvent(-1,"PAUSE")
    Global Const $hDisplayGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $hBufferBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth,@DesktopHeight,$hDisplayGraphic)
    Global $hBufferGraphic = _GDIPlus_ImageGetGraphicsContext($hBufferBitmap)
    Global $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, $Rahmenbreite, 2)
    ;~ Global Const $hPenWhite = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFFFF88, 15, 2)
    Global $hPen_Aus = _GDIPlus_PenCreate(0xFF000044, 15, 2)

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

    _GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPROUND)
    _GDIPlus_PenSetStartCap($hPen, $GDIP_LINECAPROUND)
    ;~ Global $Round_Started = False
    Global $Round_Started = False, $Game_Paused=False

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

    Local $accel[5][2] = [["w"],["s"],["{UP}"],["{DOWN}"],["p",$PAUSE_DUMMY]]
    GUISetAccelerators($accel)
    GUISetState()

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

    _FahreAusgang()

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

    ; Author ........: Paul Campbell (PaulIA)
    ; Modified.......: Gary Frost, Prog@ndy
    Func _GDIPlus_PenSetStartCap($hPen, $iEndCap)
    Local $aResult

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

    $aResult = DllCall($ghGDIPDll, "int", "GdipSetPenStartCap", "hwnd", $hPen, "int", $iEndCap)
    If @error Then Return SetError(@error, @extended, False)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
    EndFunc ;==>_GDIPlus_PenSetEndCap

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

    While 1
    Sleep(1000)
    WEnd
    Func PAUSE()
    $Game_Paused = Not $Game_Paused
    $Round_Started = Not $Game_Paused
    EndFunc

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

    Func _ende()
    AdlibDisable()

    ; Clean up resources
    _GDIPlus_FontDispose ($hFont)
    _GDIPlus_FontFamilyDispose ($hFamily)
    _GDIPlus_StringFormatDispose ($hFormat)
    _GDIPlus_BrushDispose ($hBrush_Aus)
    _GDIPlus_BrushDispose ($hBrush)
    _GDIPlus_BrushDispose ($hBrush2)

    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPen_Aus)
    _GDIPlus_BitmapDispose($hBufferBitmap)
    _GDIPlus_GraphicsDispose($hDisplayGraphic)
    _GDIPlus_GraphicsDispose($hBufferGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsClear($hBufferGraphic)
    _GDIPlus_GraphicsDrawLine($hBufferGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hBufferGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hBufferGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hBufferGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsFillRect($hBufferGraphic, 15,15,75, @DesktopHeight-30,$hBrush_Aus)
    _GDIPlus_GraphicsFillRect($hBufferGraphic, @DesktopWidth- 90,15,75, @DesktopHeight-30,$hBrush_Aus)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    _DrawRahmen()
    ;~ _GUICheck()

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

    If $Round_Started And Not $Game_Paused Then
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    EndIf

    _GDIPlus_GraphicsDrawLine($hBufferGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hBufferGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)

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

    $ball = _GDIPlus_GraphicsDrawArc($hBufferGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)

    _GDIPlus_GraphicsDrawStringEx ($hBufferGraphic, $pointsleft & ":" & $pointsright, $hFont, $tLayout2, $hFormat, $hBrush2)
    _GDIPlus_GraphicsDrawStringEx ($hBufferGraphic, $pointsleft & ":" & $pointsright, $hFont, $tLayout, $hFormat, $hBrush)
    If $Game_Paused Then _GDIPlus_GraphicsDrawStringEx ($hBufferGraphic, "PAUSE - P drücken", $hFont, $tLayout_Pause, $hFormat, $hBrush)

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


    _GDIPlus_GraphicsDrawImage($hDisplayGraphic,$hBufferBitmap,0,0)
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    $Strichpos1 -= $PaddleSpeed
    $Strichpos2 -= $PaddleSpeed
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    $Strichpos1 += $PaddleSpeed
    $Strichpos2 += $PaddleSpeed
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    $RStrichpos1 -= $PaddleSpeed
    $RStrichpos2 -= $PaddleSpeed
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    $RStrichpos1 += $PaddleSpeed
    $RStrichpos2 += $PaddleSpeed
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ballpos2 += $BewegungSenkrecht*$ballSpeed
    $ballpos1 += $BewegungWaagerecht*$ballSpeed
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= ($Strichpos1-10)) And ($ballpos2 <= ($Strichpos2+10)) Then ; kollision
    If $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= ($RStrichpos1-10)) And ($ballpos2 <= ($RStrichpos2+10)) Then ; kollision
    If $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func _FahreAusgang()
    $Round_Started = False
    AdlibDisable()
    Local $AusgangsPos = @DesktopHeight / 2 - 70
    If Abs($RStrichpos1 - $AusgangsPos) < $PaddleSpeed*5 Then
    For $i = 1 To 10
    _runter()
    _Zyklus()
    Sleep(20)
    Next
    EndIf
    If Abs($RStrichpos1 - $AusgangsPos) < $PaddleSpeed*5 Then
    For $i = 1 To 10
    _hoch2()
    _Zyklus()
    Sleep(20)
    Next
    EndIf

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

    Do
    If Abs($RStrichpos1-$AusgangsPos) < $PaddleSpeed Then
    $Strichpos1 = $AusgangsPos
    $Strichpos2 = $AusgangsPos +140
    ElseIf $Strichpos1 < $AusgangsPos Then
    _runter()
    ElseIf $Strichpos1 > $AusgangsPos Then
    _hoch()
    EndIf
    If Abs($RStrichpos1-$AusgangsPos) < $PaddleSpeed Then
    $RStrichpos1 = $AusgangsPos
    $RStrichpos2 = $AusgangsPos +140
    ElseIf $RStrichpos1 < $AusgangsPos Then
    _runter2()
    ElseIf $RStrichpos1 > $AusgangsPos Then
    _hoch2()
    EndIf
    _Zyklus()
    Sleep(10)
    Until $Strichpos1 = $AusgangsPos And $RStrichpos1 = $AusgangsPos
    AdlibEnable("_Zyklus",10)
    $Round_Started = True
    EndFunc

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    ;~ GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    Case 1
    $pointsright += 1
    ;~ GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    EndSwitch

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

    $BewegungSenkrecht = Random(5, 7, 1)
    $BewegungWaagerecht = Random(5, 7, 1)
    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    _FahreAusgang()
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    EndFunc ;==>setzeausgang

    [/autoit]


    Da wird erst alles im Speicher gezeichnet und dann erst auf den Bildschirm kopiert. und Pause liegt auf "p" ;)

    Einmal editiert, zuletzt von progandy (8. März 2009 um 15:31)

  • Joar aber will das jetzt nicht einfach so übernehmen :/

    Ich versuch das mal alles so ein bissel zu vermatschen ;)

    Hab noch was neues Reingemacht, guckt es euch mal an, sieht schön aus =)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")

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

    _GDIPlus_Startup()

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

    ; Variablen
    Global $begin
    Global $Speed = 1.0, $SpeedBalken = 10, $level = 1
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    Global $ballpos1 = @DesktopWidth / 2, $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = @DesktopHeight / 2 - 70, $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70, $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong", $Rahmenbreite = 10

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

    ; GUI
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    Global $Spielstand = GUICtrlCreateLabel("0:0" & @TAB & @TAB & 'Level 1', @DesktopWidth / 2, @DesktopHeight / 15, 600, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D") Or _IsPressed("20")

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)
    GUICtrlSetState($Spielstand, $GUI_SHOW)

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    Global $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()

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

    AdlibEnable('_Zyklus', 10)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    Exit
    EndFunc ;==>_ende

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

    Func Onautoitexit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    EndFunc ;==>Onautoitexit

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    $PenColor=_GDIPlus_PenGetColor ( $hPenRahmen )
    If $PenColor=0xFF0000FF Then
    _GDIPlus_PenSetColor( $hPenRahmen, 0xFFFF0000 )
    ElseIf $PenColor=0xFFFF0000 Then
    _GDIPlus_PenSetColor( $hPenRahmen, 0xFF00FF00 )
    ElseIf $PenColor=0xFF00FF00 Then
    _GDIPlus_PenSetColor ( $hPenRahmen, 0xFF0000FF )
    EndIf
    EndFunc ;==>_DrawRahmen
    Sleep( 500 )
    $begin=TimerInit()
    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    _ScoreUpdate()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - $SpeedBalken, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= $SpeedBalken
    $Strichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + $SpeedBalken, $hpen_Del)
    $Strichpos1 += $SpeedBalken
    $Strichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - $SpeedBalken, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= $SpeedBalken
    $RStrichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + $SpeedBalken, $hpen_Del)
    $RStrichpos1 += $SpeedBalken
    $RStrichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht * $Speed
    $ballpos1 += $BewegungWaagerecht * $Speed
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then
    $BewegungWaagerecht = Random(5, 7, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    _DrawRahmen()
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then
    $BewegungWaagerecht = Random(-7, -5, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    _DrawRahmen()
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    EndSwitch

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

    ;Ball und Schläger übermalen
    _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, 13, @DesktopWidth - 100, @DesktopHeight - 13, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, 13, 100, @DesktopHeight - 13, $hpen_Del)

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

    ;Ball läuft zufallsweise in eine der 4 Richtungen
    If Random(0, 1, 1) Then
    $BewegungSenkrecht = Random(1, 11, 1)
    Else
    $BewegungSenkrecht = Random(-11, -1, 1)
    EndIf
    If Random(0, 1, 1) Then
    $BewegungWaagerecht = Random(1, 11, 1)
    Else
    $BewegungWaagerecht = Random(-11, -1, 1)
    EndIf

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

    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    EndFunc ;==>setzeausgang

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

    Func _ScoreUpdate()
    $dif=TimerDiff( $begin )
    If $dif>=100 Then
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright & @TAB & @TAB & 'Level ' & $level)
    $begin=TimerInit()
    EndIf
    EndFunc

    [/autoit]
  • Ich beobachte das Topic auch schon lange mit. Finde die vortschritte sind Enorm und es gefällt mir alles super. Ein paar anmerkungen trotzdem meinerseits: Scoreboard und Level Anzeige Flackern (kA obs an mir liegt) und wenn der rechte schläger oben ist, gibt es einen bug das er teils verschwindet durch die Level Anzeige. Kann leider keine lösungsvorschläge liefern, da meine AutoIT kenntnisse sehr beschränkt sind


    mfg SiLenCa

  • Joar das mit dem Flackern weis ich auch nicht anders bis jetzt, muss mal schauen ob ich das noch reduzieren kann, aber das mit dem Level ist bei mir nicht, liegt wohl an deiner Auflösung, aber ist auch egal das mit dem Level 1 Mach ich noch anders, ich lass es einfach kurz aufleuchten vor beginn.

  • Die ganzen Probleme hast du nicht, wenn du alles mit GDIPlus zeichnest und dabei einen Double-Bufer verwendest. Dann ist auch das löschen einfacher. (Den Buffer schwarz einfärben und dann alles von vorne zeichnen)

  • mhh, bei mir nicht. Hast du vielleicht Vista? dann teste mal

    [autoit]

    DllCall('dwmapi.dll','lresult',"DwmEnableComposition","uint",0)

    [/autoit]
  • Ne hab kein Vista, hab XP

    Ganz extrem ist der Ball bei deiner Version der Flackert sau stark.

    Achja und mein Stand zur Zeit

    Edit: Nochma nen Bug entfernt

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")

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

    _GDIPlus_Startup()

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

    ; Variablen
    Global $begin
    Global $Speed = 1.0, $SpeedBalken = 10, $level = 1
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    Global $ballpos1 = @DesktopWidth / 2, $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = @DesktopHeight / 2 - 70, $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70, $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong", $Rahmenbreite = 10

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

    ; GUI
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    Global $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 600, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    $LevelL=GUICtrlCreateLabel ( "Level " & $level, @DesktopWidth/2-100, @DesktopHeight/2-100, 200, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D") Or _IsPressed("20")

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)
    GUICtrlSetState($LevelL, $GUI_SHOW)
    Sleep ( 1500 )
    GUICtrlSetState($LevelL, $GUI_HIDE)
    GUICtrlSetState($Spielstand, $GUI_SHOW)

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    Global $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()

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

    Sleep ( 500 )

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

    AdlibEnable('_Zyklus', 10)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    Exit
    EndFunc ;==>_ende

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

    Func Onautoitexit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    EndFunc ;==>Onautoitexit

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    $PenColor=_GDIPlus_PenGetColor ( $hPenRahmen )
    If $PenColor=0xFF0000FF Then
    _GDIPlus_PenSetColor( $hPenRahmen, 0xFFFF0000 )
    ElseIf $PenColor=0xFFFF0000 Then
    _GDIPlus_PenSetColor( $hPenRahmen, 0xFF00FF00 )
    ElseIf $PenColor=0xFF00FF00 Then
    _GDIPlus_PenSetColor ( $hPenRahmen, 0xFFFFFF00 )
    ElseIf $PenColor=0xFFFFFF00 Then
    _GDIPlus_PenSetColor ( $hPenRahmen, 0xFF0000FF )
    EndIf
    EndFunc ;==>_DrawRahmen
    Sleep( 500 )
    $begin=TimerInit()
    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    _ScoreUpdate()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - $SpeedBalken, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= $SpeedBalken
    $Strichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + $SpeedBalken, $hpen_Del)
    $Strichpos1 += $SpeedBalken
    $Strichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - $SpeedBalken, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= $SpeedBalken
    $RStrichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + $SpeedBalken, $hpen_Del)
    $RStrichpos1 += $SpeedBalken
    $RStrichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht * $Speed
    $ballpos1 += $BewegungWaagerecht * $Speed
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then
    $BewegungWaagerecht = Random(5, 7, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    _DrawRahmen()
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then
    $BewegungWaagerecht = Random(-7, -5, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    _DrawRahmen()
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    EndSwitch

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

    ;Ball und Schläger übermalen
    _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, 13, @DesktopWidth - 100, @DesktopHeight - 13, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, 13, 100, @DesktopHeight - 13, $hpen_Del)

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

    ;Ball läuft zufallsweise in eine der 4 Richtungen
    If Random(0, 1, 1) Then
    $BewegungSenkrecht = Random(1, 11, 1)
    Else
    $BewegungSenkrecht = Random(-11, -1, 1)
    EndIf
    If Random(0, 1, 1) Then
    $BewegungWaagerecht = Random(1, 11, 1)
    Else
    $BewegungWaagerecht = Random(-11, -1, 1)
    EndIf

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

    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    EndFunc ;==>setzeausgang

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

    Func _ScoreUpdate()
    $dif=TimerDiff( $begin )
    If $dif>=100 Then
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    $begin=TimerInit()
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Greek (8. März 2009 um 21:37)

  • Argh das hat noch dicke Fehler bei ner geringen Auflösung

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_ende")

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

    _GDIPlus_Startup()

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

    ; Variablen
    Global $begin
    Global $Speed = 1.0, $SpeedBalken = 10, $level = 1
    Global $pointsleft = 0, $pointsright = 0
    Global $BewegungSenkrecht = Random(5, 7, 1), $BewegungWaagerecht = Random(5, 7, 1)
    Global $ballpos1 = @DesktopWidth / 2, $ballpos2 = @DesktopHeight / 2 - 50
    Global $Strichpos1 = @DesktopHeight / 2 - 70, $Strichpos2 = @DesktopHeight / 2 + 70
    Global $RStrichpos1 = @DesktopHeight / 2 - 70, $RStrichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong", $Rahmenbreite = 10

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

    ; GUI
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    Global $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 600, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    $LevelL=GUICtrlCreateLabel ( "Level " & $level, @DesktopWidth/2-100, @DesktopHeight/2-100, 200, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUICtrlSetState(-1, $GUI_HIDE)

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

    Local $accel[4][2] = [["w"],["s"],["{UP}"],["{DOWN}"]]
    GUISetAccelerators($accel)

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

    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)
    Until _IsPressed("0D") Or _IsPressed("20")

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)
    GUICtrlSetState($LevelL, $GUI_SHOW)
    Sleep ( 1500 )
    GUICtrlSetState($LevelL, $GUI_HIDE)
    GUICtrlSetState($Spielstand, $GUI_SHOW)

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    Global $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()

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

    Sleep ( 500 )

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

    AdlibEnable('_Zyklus', 10)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    Exit
    EndFunc ;==>_ende

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

    Func Onautoitexit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPenRahmen)
    _GDIPlus_PenDispose($hpen_Del)
    ;~ _GDIPlus_Shutdown() ; <-- funzt nicht
    EndFunc ;==>Onautoitexit

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    $PenColor=_GDIPlus_PenGetColor ( $hPenRahmen )
    If $PenColor=0xFF0000FF Then
    _GDIPlus_PenSetColor( $hPenRahmen, 0xFFFF0000 )
    ElseIf $PenColor=0xFFFF0000 Then
    _GDIPlus_PenSetColor( $hPenRahmen, 0xFF00FF00 )
    ElseIf $PenColor=0xFF00FF00 Then
    _GDIPlus_PenSetColor ( $hPenRahmen, 0xFFFFFF00 )
    ElseIf $PenColor=0xFFFFFF00 Then
    _GDIPlus_PenSetColor ( $hPenRahmen, 0xFF0000FF )
    EndIf
    EndFunc ;==>_DrawRahmen
    Sleep( 500 )
    $begin=TimerInit()
    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    EndIf
    If _IsPressed('53') Then
    _runter()
    EndIf
    If _IsPressed('26') Then
    _hoch2()
    EndIf
    If _IsPressed('28') Then
    _runter2()
    EndIf
    _ball()
    _DetectCollision()
    _ScoreUpdate()
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - $SpeedBalken, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= $SpeedBalken
    $Strichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + $SpeedBalken, $hpen_Del)
    $Strichpos1 += $SpeedBalken
    $Strichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

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

    Func _hoch2()
    If $RStrichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos2 - $SpeedBalken, @DesktopWidth - 100, $RStrichpos2, $hpen_Del)
    $RStrichpos1 -= $SpeedBalken
    $RStrichpos2 -= $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_hoch2

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

    Func _runter2()
    If $RStrichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos1 + $SpeedBalken, $hpen_Del)
    $RStrichpos1 += $SpeedBalken
    $RStrichpos2 += $SpeedBalken
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter2

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

    Func _ball()
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    $ballpos2 += $BewegungSenkrecht * $Speed
    $ballpos1 += $BewegungWaagerecht * $Speed
    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    EndFunc ;==>_ball

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

    Func _DetectCollision()
    If $ballpos1 <= 120 Then
    If ($ballpos2 >= $Strichpos1) And ($ballpos2 <= $Strichpos2) Then ; kollision
    If $BewegungWaagerecht < 0 Then
    $BewegungWaagerecht = Random(5, 7, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 < 100 Then
    setzeausgang(1)
    Sleep(1500)
    _DrawRahmen()
    EndIf
    EndIf
    If $ballpos1 >= @DesktopWidth - 135 Then
    If ($ballpos2 >= $RStrichpos1) And ($ballpos2 <= $RStrichpos2) Then ; kollision
    If $BewegungWaagerecht > 0 Then
    $BewegungWaagerecht = Random(-7, -5, 1)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $RStrichpos1, @DesktopWidth - 100, $RStrichpos2, $hPen)
    EndIf
    ElseIf $ballpos1 > @DesktopWidth - 100 Then
    setzeausgang(0)
    Sleep(1500)
    _DrawRahmen()
    EndIf
    EndIf

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

    If $ballpos1 >= @DesktopWidth - 40 And $BewegungWaagerecht > 0 Then $BewegungWaagerecht = Random(-7, -5, 1)
    If $ballpos1 < 30 And $BewegungWaagerecht < 0 Then $BewegungWaagerecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 40 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    EndFunc ;==>_DetectCollision

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

    Func setzeausgang($points)
    If ($points < 1) Or ($points > 0) Then SetError(1)
    Switch $points
    Case 0
    $pointsleft += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    Case 1
    $pointsright += 1
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    EndSwitch

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

    ;Ball und Schläger übermalen
    _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, 13, @DesktopWidth - 100, @DesktopHeight - 13, $hpen_Del)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, 13, 100, @DesktopHeight - 13, $hpen_Del)

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

    ;Ball läuft zufallsweise in eine der 4 Richtungen
    If Random(0, 1, 1) Then
    $BewegungSenkrecht = Random(1, 11, 1)
    Else
    $BewegungSenkrecht = Random(-11, -1, 1)
    EndIf
    If Random(0, 1, 1) Then
    $BewegungWaagerecht = Random(1, 11, 1)
    Else
    $BewegungWaagerecht = Random(-11, -1, 1)
    EndIf

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

    $ballpos1 = @DesktopWidth / 2
    $ballpos2 = @DesktopHeight / 2 - 50
    $Strichpos1 = @DesktopHeight / 2 - 70
    $Strichpos2 = @DesktopHeight / 2 + 70
    $RStrichpos1 = @DesktopHeight / 2 - 70
    $RStrichpos2 = @DesktopHeight / 2 + 70

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

    $ball = _GDIPlus_GraphicsDrawArc($hGraphic, $ballpos1, $ballpos2, 15, 15, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    EndFunc ;==>setzeausgang

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

    Func _ScoreUpdate()
    $dif=TimerDiff( $begin )
    If $dif>=100 Then
    GUICtrlSetData($Spielstand, $pointsleft & ':' & $pointsright)
    $begin=TimerInit()
    EndIf
    EndFunc

    [/autoit]

    Am Rand fehlt nen Stück und das Label ist dann zu groß ( kann man das irgendwie, wenn die Auflösung kleiner ist das auch das Label kleiner ist machen ? ), guck mal ob ich den Fehler finde wär cool wenn noch einer drüber guckt.