1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. DFPWare

Beiträge von DFPWare

  • Snake [mit GDI+, hoffentlich verständlich]

    • DFPWare
    • 10. April 2011 um 14:06

    also wenn jetzt die Schlange den Bildschirm verlässt, dann kommt sie an der anderen Seite wieder raus, aber das 2. hab ich nich verstanden -.-

    EDIT: ich hab noch eingefügt, dass man nicht, wenn man z.B von links kommt nach links lenken kann, weil man sonst tot wäre ;)

  • Snake [mit GDI+, hoffentlich verständlich]

    • DFPWare
    • 10. April 2011 um 13:20

    Hey Leute

    ich hab mal das gute alte Snake nachprogrammiert, ja ich weiß, dass es das schon 100000000000000 mal gibt aber nicht ganz so oft mit GDI+ und wenn doch dann hab ich nicht durchgeblickt, deswegen hab ich hier mal ne Version die man hoffentlich verstehen kann ;)

    Ich weiß nur nicht, warum beim Start oben links so ein schwarzes Kästchen kommt, vielleicht konnt ihr mir ja helfen ;)

    Hier erstmal die Version für die die Snake nachprogrammieren lernen wollen ;)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    OnAutoItExitRegister("_EXIT")

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

    Global $x = 100
    Global $y = 100
    $score = 1

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

    $kx = 300
    $ky = 400
    Global $direction = "down";startrichtung, kann geändert werden
    Global $Laenge[3][2]
    $Laenge[0][0] = 100
    $Laenge[0][1] = 100

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

    $Gui = GUICreate("Snake",500,500,100,100)

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

    _GDIPlus_Startup()
    $brushSchwarz = _GDIPlus_BrushCreateSolid(0xFF000000);die einzelnen Farben werden erstellt
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)

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

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

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

    GUISetState()

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

    AdlibRegister("_bewege",200);alle 200 Milisekunden wird die Schlange bewegt

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case _IsPressed(25);links
    $direction = "left"
    Case _IsPressed(26);oben
    $direction = "up"
    Case _IsPressed(27);rechts
    $direction = "right"
    Case _IsPressed(28);unten
    $direction = "down"
    EndSelect

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

    _GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss);zeichnet den Hintergrund
    For $i = 0 to Ubound ($Laenge) -1;zeichnet die einzelnen Teile der Schlange
    _GDIPlus_GraphicsFillRect($buffer, $Laenge[$i][0], $Laenge[$i][1], 10, 10, $brushSchwarz)
    Next
    _GDIPlus_GraphicsFillRect($buffer, $kx, $ky, 10, 10, $brushGruen);zeichnet das Futter
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500);zeichnet die Grafik

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

    Select
    Case $Laenge[0][0] >= ($kx - 5) And $Laenge[0][0] <= ($kx + 5) And $Laenge[0][1] >= ($ky - 5) And $Laenge[0][1] <= ($ky + 5);Prüft, ob der Kopf auf ein Futter trifft
    $score += 1
    Do
    $kx = Random(1,490,1)
    Until Mod($kx,20) = 0
    Do
    $ky = Random(1,490,1)
    Until Mod($ky,20) = 0
    $width = UBound($Laenge)
    ReDim $Laenge[$width+1][2]
    EndSelect

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

    For $i = 1 To UBound($Laenge) - 1 Step 1;Prüft, ob der Kopf mit irgendeinem anderen Teil zusammenstößt
    If $Laenge[0][0] = $Laenge[$i][0] Then
    If $Laenge[0][1] = $Laenge[$i][1] Then
    MsgBox(0,"Verloren","Sie haben mit einer Punktzahl von "&$score&" verloren!")
    Exit
    EndIf
    EndIf
    Next

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

    Until $msg = $GUI_EVENT_CLOSE

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

    Func _EXIT();Exit Funktion zur Freigabe der Ressourcen
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_Shutdown()
    EndFunc

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

    Func _bewege()
    For $i = Ubound($Laenge) -1 to 1 Step -1;das Nachrücken der Schlange, das 2. Stück nimmt die Position des kopfes ein, das 3. die des 2. usw...
    $Laenge[$i][0] = $Laenge[$i-1][0]
    $Laenge[$i][1] = $Laenge[$i-1][1]
    Next

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

    If $direction == "left" And $x >= 0 Then $Laenge[0][0] -= 10;der Kopf bekommt eine neue Position
    If $direction == "up" And $y >= 0 Then $Laenge[0][1] -= 10
    If $direction == "right" And $x <= 500 Then $Laenge[0][0] += 10
    If $direction == "down" And $y <= 500 Then $Laenge[0][1] += 10
    EndFunc

    [/autoit]

    Und hier meine ausgebaute Version:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    OnAutoItExitRegister("_EXIT")

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

    Global $x = 100
    Global $y = 100
    $score = 1

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

    $kx = 300
    $ky = 400
    Global $direction = "down" ;startrichtung, kann geändert werden
    Global $Laenge[3][2]
    For $i = 1 To UBound($Laenge) - 1
    $Laenge[$i][0] = -100
    $Laenge[$i][1] = -100
    Next
    $Laenge[0][0] = 100
    $Laenge[0][1] = 100

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

    $Gui = GUICreate("Snake",500,500,100,100)

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

    _GDIPlus_Startup()
    $brushSchwarz = _GDIPlus_BrushCreateSolid(0xFF000000) ;die einzelnen Farben werden erstellt
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)

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

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

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

    GUISetState()

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

    AdlibRegister("_bewege",200) ;alle 200 Milisekunden wird die Schlange bewegt

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case _IsPressed(25) And $direction <> "right" ;links
    $direction = "left"
    Case _IsPressed(26) And $direction <> "down" ;oben
    $direction = "up"
    Case _IsPressed(27) And $direction <> "left" ;rechts
    $direction = "right"
    Case _IsPressed(28) And $direction <> "up" ;unten
    $direction = "down"
    EndSelect

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

    _GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss) ;zeichnet den Hintergrund
    For $i = 0 to Ubound ($Laenge) -1 ;zeichnet die einzelnen Teile der Schlange
    _GDIPlus_GraphicsFillRect($buffer, $Laenge[$i][0], $Laenge[$i][1], 10, 10, $brushSchwarz)
    Next
    _GDIPlus_GraphicsFillRect($buffer, $kx, $ky, 10, 10, $brushGruen) ;zeichnet das Futter
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500) ;zeichnet die Grafik

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

    Select
    Case $Laenge[0][0] >= ($kx - 5) And $Laenge[0][0] <= ($kx + 5) And $Laenge[0][1] >= ($ky - 5) And $Laenge[0][1] <= ($ky + 5) ;Prüft, ob der Kopf auf ein Futter trifft
    $score += 1
    Do
    $kx = Random(1,490,1)
    Until Mod($kx,20) = 0
    Do
    $ky = Random(1,490,1)
    Until Mod($ky,20) = 0
    $width = UBound($Laenge)
    ReDim $Laenge[$width+1][2]
    EndSelect

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

    For $i = 1 To UBound($Laenge) - 1 Step 1 ;Prüft, ob der Kopf mit irgendeinem anderen Teil zusammenstößt
    If $Laenge[0][0] = $Laenge[$i][0] Then
    If $Laenge[0][1] = $Laenge[$i][1] Then
    MsgBox(0,"Verloren","Sie haben mit einer Punktzahl von "&$score&" verloren!")
    Exit
    EndIf
    EndIf
    Next

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

    Select ;Prüft, ob die Schlange den Bildschirm verlässt
    Case $Laenge[0][0] < 0
    $Laenge[0][0] = 480
    Case $Laenge[0][0] > 480
    $Laenge[0][0] = 0
    Case $Laenge[0][1] < 0
    $Laenge[0][1] = 480
    Case $Laenge[0][1] > 480
    $Laenge[0][1] = 0
    EndSelect

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

    Until $msg = $GUI_EVENT_CLOSE

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

    Func _EXIT() ;Exit Funktion zur Freigabe der Ressourcen
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_Shutdown()
    EndFunc

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

    Func _bewege()
    For $i = Ubound($Laenge) -1 to 1 Step -1 ;das Nachrücken der Schlange, das 2. Stück nimmt die Position des kopfes ein, das 3. die des 2. usw...
    $Laenge[$i][0] = $Laenge[$i-1][0]
    $Laenge[$i][1] = $Laenge[$i-1][1]
    Next

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

    If $direction == "left" And $x >= 0 Then $Laenge[0][0] -= 10 ;der Kopf bekommt eine neue Position
    If $direction == "up" And $y >= 0 Then $Laenge[0][1] -= 10
    If $direction == "right" And $x <= 500 Then $Laenge[0][0] += 10
    If $direction == "down" And $y <= 500 Then $Laenge[0][1] += 10
    EndFunc

    [/autoit]

    DFPWare

  • Snake...

    • DFPWare
    • 10. April 2011 um 12:02

    Danke ich werds gleich ausprobieren.

    Tut mir leid dass ich so gedrängelt hab :rolleyes:

    DFPWare

  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 21:36

    scheint nicht so einfach zu sein:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include "VectorMath.au3"
    #include <Misc.au3>
    #include <WinAPI.au3>
    #include <Array.au3>

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

    ; - Author: name22(http://www.autoit.de)

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

    Opt("GUIOnEventMode", 1)

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

    $iGUIWidth = 600
    $iGUIHeight = 400
    $nFPS = 50

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

    $nSlowMotion = 5

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

    $nFriction = 0.98

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

    $nPlayerSpeedMax = 200
    $nAccelerationForce = 10

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

    $nProjectileSpeedPlayer = 500
    $iCoolDownPlayer = 200

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

    $nSlowMotionFuelMax = 100
    $nSlowMotionFuel = 100
    $nSlowMotionRefillSpeed = 8
    $nSlowMotionConsumptionSpeed = 20

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

    $nLifeForcePlayer = 60
    $nHealthRegenSpeed = 1

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

    $nDisplayWave = 3000

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

    $nSleepTime = 1000 / $nFPS
    $nOffsetSleepTime = 0

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

    $nFPS_Display = 0
    $nFPS_Average = 0
    $iCounter = 1
    $iWaveCounter = 1

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

    $bNewGame = True
    $bNewWave = True

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

    Global $hBitmapBG
    Global $pause = False

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

    $nTimeMod = 1

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

    $vUser32Dll = DllOpen("User32.dll")
    $vNTdll = DllOpen("ntdll.dll")

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

    $tRectBorder = DllStructCreate($tagRECT)
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tRectBorder, "Left", 0)
    DllStructSetData($tRectBorder, "Top", 0)
    DllStructSetData($tRectBorder, "Right", $iGUIWidth)
    DllStructSetData($tRectBorder, "Bottom", $iGUIHeight)

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

    $tPrecSleep = DllStructCreate("int64 time;")
    $pPrecSleep = DllStructGetPtr($tPrecSleep)

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

    $hWnd = GUICreate("AutoIt Arena Fight v1.0 - Author: name22(http://www.autoit.de)", $iGUIWidth, $iGUIHeight)
    GUISetCursor(16, 1, $hWnd)
    GUISetState()

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

    $hDC = _WinAPI_GetDC($hWnd)
    $hCDC_Buffer = _WinAPI_CreateCompatibleDC($hDC)
    $hGDI_Bitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iGUIWidth, $iGUIHeight)
    _WinAPI_SelectObject($hCDC_Buffer, $hGDI_Bitmap)

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

    _GDIPlus_Startup()

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC_Buffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

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

    _WinAPI_BitBlt($hDC, 0, 0, $iGUIWidth, $iGUIHeight, $hCDC_Buffer, 0, 0, 0x00CC0020)

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

    $hBrush_Enemy = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrush_Player = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hBrush_BG_Menu = _GDIPlus_BrushCreateSolid("0x" & Hex(200, 2) & "F0F0F0")
    $hBrush_ProjectileBG = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hBrush_MenuTextNormal = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hBrush_MenuTextHighlight = _GDIPlus_BrushCreateSolid(0xFF808080)
    $hBrush_LifeBar = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrush_SlowMotionBar = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hBrush_Announcement = _GDIPlus_BrushCreateSolid("0x" & Hex(200, 2) & "000000")

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

    $hPen_Bar = _GDIPlus_PenCreate(0xFF000000, 2)
    $hPen_Cursor = _GDIPlus_PenCreate(0xFF505050, 2)

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

    $hStringFormat = _GDIPlus_StringFormatCreate()
    $hFamily_SegoeUI = _GDIPlus_FontFamilyCreate("Segoe UI")
    $hFont_FPS = _GDIPlus_FontCreate($hFamily_SegoeUI, 7)
    $hFont_Menu = _GDIPlus_FontCreate($hFamily_SegoeUI, 20)
    $hFont_Announcement = _GDIPlus_FontCreate($hFamily_SegoeUI, 50)

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

    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphic, "FPS 000", $hFont_FPS, _GDIPlus_RectFCreate(), $hStringFormat)
    $tLayout_FPS = $aMeasure[0]
    $aMeasure = ""
    DllStructSetData($tLayout_FPS, "X", $iGUIWidth - DllStructGetData($tLayout_FPS, "Width") - 3)
    DllStructSetData($tLayout_FPS, "Y", $iGUIHeight - DllStructGetData($tLayout_FPS, "Height"))
    DllStructSetData($tLayout_FPS, "Width", DllStructGetData($tLayout_FPS, "Width") + 3)

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

    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphic, "Continue", $hFont_Menu, _GDIPlus_RectFCreate(0, 100), $hStringFormat)
    $tLayout_Menu_Continue = $aMeasure[0]
    $aMeasure = ""
    DllStructSetData($tLayout_Menu_Continue, "X", $iGUIWidth / 2 - DllStructGetData($tLayout_Menu_Continue, "Width") / 2)
    DllStructSetData($tLayout_Menu_Continue, "Width", DllStructGetData($tLayout_Menu_Continue, "Width") + 1)

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

    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphic, "Start", $hFont_Menu, _GDIPlus_RectFCreate(0, 100), $hStringFormat)
    $tLayout_Menu_Start = $aMeasure[0]
    $aMeasure = ""
    DllStructSetData($tLayout_Menu_Start, "X", $iGUIWidth / 2 - DllStructGetData($tLayout_Menu_Start, "Width") / 2)
    DllStructSetData($tLayout_Menu_Start, "Width", DllStructGetData($tLayout_Menu_Start, "Width") + 1)

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

    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphic, "Quit", $hFont_Menu, _GDIPlus_RectFCreate(0, 150), $hStringFormat)
    $tLayout_Menu_Quit = $aMeasure[0]
    $aMeasure = ""
    DllStructSetData($tLayout_Menu_Quit, "X", $iGUIWidth / 2 - DllStructGetData($tLayout_Menu_Quit, "Width") / 2)
    DllStructSetData($tLayout_Menu_Quit, "Width", DllStructGetData($tLayout_Menu_Quit, "Width") + 1)

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

    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphic, "Wave 1", $hFont_Announcement, _GDIPlus_RectFCreate(), $hStringFormat)
    $tLayout_Announcement = $aMeasure[0]
    $aMeasure = ""
    DllStructSetData($tLayout_Announcement, "X", $iGUIWidth / 2 - DllStructGetData($tLayout_Announcement, "Width") / 2)
    DllStructSetData($tLayout_Announcement, "Y", $iGUIHeight / 2 - DllStructGetData($tLayout_Announcement, "Height") / 2)
    DllStructSetData($tLayout_Announcement, "Width", 0)
    DllStructSetData($tLayout_Announcement, "Height", 0)

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

    $nX_PlayerPos = Random(10, $iGUIWidth - 10)
    $nY_PlayerPos = Random(10, $iGUIHeight - 10)
    $nX_PlayerSpeed = 0
    $nY_PlayerSpeed = 0
    $nLifeForce = $nLifeForcePlayer

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

    Global $aEnemys[1][6] = [[0]], $aProjectiles[1][6] = [[0]], $aAccelForce = _Vector_Create(0, 0), $nProjectileSpeedEnemy

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $hWnd)

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

    _Pause()
    $bNewGame = False

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

    $nT_CoolDown = TimerInit()
    $nT_DisplayWave = TimerInit()
    $nRestartCheck = 0

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

    $nT_Sleep = TimerInit() + $nSleepTime
    $nT_UpdateFPS = TimerInit()
    $nT_AdjustSleepTime = TimerInit()

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

    While True
    _istPause()
    If $pause == False Then
    DllStructSetData($tPrecSleep, "time", -10000 * ($nSleepTime - TimerDiff($nT_Sleep) + $nOffsetSleepTime))
    DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep)
    $nFrameTime = TimerDiff($nT_Sleep)
    $nT_Sleep = TimerInit()

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

    $nFPS_Cur = 1000 / $nFrameTime
    If TimerDiff($nT_UpdateFPS) >= 500 Then
    $nFPS_Average = ($nFPS_Average * ($iCounter - 1) + $nFPS_Cur) / $iCounter
    $iCounter += 1
    $nFPS_Display = $nFPS_Cur
    $nT_UpdateFPS = TimerInit()
    EndIf
    If TimerDiff($nT_AdjustSleepTime) >= 5000 Then
    If $nFPS_Average - $nFPS < -2 Then $nOffsetSleepTime -= 0.5
    If $nFPS_Average - $nFPS > 2 Then $nOffsetSleepTime += 0.5
    $iCounter = 1
    $nT_AdjustSleepTime = TimerInit()
    EndIf

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

    Switch _IsPressed("20", $vUser32Dll)
    Case True
    Switch $nTimeMod
    Case 1
    If $nSlowMotionFuel >= 10 Then
    $nTimeMod = $nSlowMotion
    $nSlowMotionFuel -= $nSlowMotionConsumptionSpeed / $nFPS_Cur
    EndIf
    Case $nSlowMotion
    If $nSlowMotionFuel > 0 Then
    $nSlowMotionFuel -= $nSlowMotionConsumptionSpeed / $nFPS_Cur
    Else
    $nTimeMod = 1
    EndIf
    EndSwitch
    Case False
    $nTimeMod = 1
    EndSwitch

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

    $nFPS_Cur *= $nTimeMod

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

    Select
    Case $nLifeForce >= 1 And $nLifeForce < $nLifeForcePlayer
    $nLifeForce += $nHealthRegenSpeed / $nFPS_Cur
    Case $nLifeForce > $nLifeForcePlayer
    $nLifeForce = $nLifeForcePlayer
    Case $nLifeForce <= 0
    $iWaveCounter = 1
    $bNewWave = True
    $bNewGame = True
    _Pause()
    $bNewGame = False
    _Restart()
    EndSelect

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

    Select
    Case $nSlowMotionFuel >= 0 And $nSlowMotionFuel < $nSlowMotionFuelMax
    $nSlowMotionFuel += $nSlowMotionRefillSpeed / $nFPS_Cur
    Case $nSlowMotionFuel > $nSlowMotionFuelMax
    $nSlowMotionFuel = $nSlowMotionFuelMax
    Case $nSlowMotionFuel < 0
    $nSlowMotionFuel = 0
    EndSelect

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

    $aCursorInfo = GUIGetCursorInfo($hWnd)
    If $aCursorInfo[2] And TimerDiff($nT_CoolDown) >= $iCoolDownPlayer * $nTimeMod Then
    $aProjectiles[0][0] += 1
    ReDim $aProjectiles[$aProjectiles[0][0] + 1][6]

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

    $aDiff = _Vector_Create($aCursorInfo[0] - $nX_PlayerPos, $aCursorInfo[1] - $nY_PlayerPos)
    $aDirection = _Vector_Normalize($aDiff)

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

    $aProjectiles[$aProjectiles[0][0]][0] = $nX_PlayerPos
    $aProjectiles[$aProjectiles[0][0]][1] = $nY_PlayerPos
    $aProjectiles[$aProjectiles[0][0]][2] = $aDirection[0] * $nProjectileSpeedPlayer
    $aProjectiles[$aProjectiles[0][0]][3] = $aDirection[1] * $nProjectileSpeedPlayer
    $aProjectiles[$aProjectiles[0][0]][4] = 8
    $aProjectiles[$aProjectiles[0][0]][5] = 1

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

    $nT_CoolDown = TimerInit()
    EndIf

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

    $aAccelForce[0] = 0
    $aAccelForce[1] = 0

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

    If _IsPressed("25", $vUser32Dll) Or _IsPressed("41", $vUser32Dll) And Sqrt($nX_PlayerSpeed ^ 2 + $nY_PlayerSpeed ^ 2) < $nPlayerSpeedMax Then $aAccelForce[0] = -1
    If _IsPressed("26", $vUser32Dll) Or _IsPressed("57", $vUser32Dll) And Sqrt($nX_PlayerSpeed ^ 2 + $nY_PlayerSpeed ^ 2) < $nPlayerSpeedMax Then $aAccelForce[1] = -1
    If _IsPressed("27", $vUser32Dll) Or _IsPressed("44", $vUser32Dll) And Sqrt($nX_PlayerSpeed ^ 2 + $nY_PlayerSpeed ^ 2) < $nPlayerSpeedMax Then $aAccelForce[0] = 1
    If _IsPressed("28", $vUser32Dll) Or _IsPressed("53", $vUser32Dll) And Sqrt($nX_PlayerSpeed ^ 2 + $nY_PlayerSpeed ^ 2) < $nPlayerSpeedMax Then $aAccelForce[1] = 1

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

    $aAccelDirection = _Vector_Normalize($aAccelForce)
    $nX_PlayerSpeed += $aAccelDirection[0] * $nAccelerationForce
    $nY_PlayerSpeed += $aAccelDirection[1] * $nAccelerationForce

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

    $nX_PlayerSpeed *= $nFriction
    $nY_PlayerSpeed *= $nFriction
    $nX_PlayerPos += $nX_PlayerSpeed / $nFPS_Cur
    $nY_PlayerPos += $nY_PlayerSpeed / $nFPS_Cur

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

    If $nX_PlayerPos - 10 <= 0 And $nX_PlayerSpeed < 0 Then
    $nX_PlayerSpeed *= -1
    $nX_PlayerPos = 10
    EndIf
    If $nX_PlayerPos + 10 >= $iGUIWidth And $nX_PlayerSpeed > 0 Then
    $nX_PlayerSpeed *= -1
    $nX_PlayerPos = $iGUIWidth - 10
    EndIf
    If $nY_PlayerPos - 10 <= 0 And $nY_PlayerSpeed < 0 Then
    $nY_PlayerSpeed *= -1
    $nY_PlayerPos = 10
    EndIf
    If $nY_PlayerPos + 10 >= $iGUIHeight And $nY_PlayerSpeed > 0 Then
    $nY_PlayerSpeed *= -1
    $nY_PlayerPos = $iGUIHeight - 10
    EndIf

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

    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
    Switch TimerDiff($nT_DisplayWave) < $nDisplayWave
    Case True
    Switch $bNewWave
    Case True
    $nLifeForce = $nLifeForcePlayer
    Dim $aProjectiles[1][6] = [[0]]
    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphic, "Wave 1", $hFont_Announcement, _GDIPlus_RectFCreate(), $hStringFormat)
    $tLayout_Announcement = $aMeasure[0]
    $aMeasure = ""
    DllStructSetData($tLayout_Announcement, "X", $iGUIWidth / 2 - DllStructGetData($tLayout_Announcement, "Width") / 2)
    DllStructSetData($tLayout_Announcement, "Y", $iGUIHeight / 2 - DllStructGetData($tLayout_Announcement, "Height") / 2)
    DllStructSetData($tLayout_Announcement, "Width", 0)
    DllStructSetData($tLayout_Announcement, "Height", 0)
    $bNewWave = False
    EndSwitch
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Wave " & $iWaveCounter, $hFont_Announcement, $tLayout_Announcement, $hStringFormat, $hBrush_Announcement)
    Case False
    If $nRestartCheck < $nT_DisplayWave Then
    _Restart()
    $nRestartCheck = $nT_DisplayWave
    EndIf
    If $aEnemys[0][0] = 0 Then
    $nT_DisplayWave = TimerInit()
    $bNewWave = True
    $iWaveCounter += 1
    EndIf
    EndSwitch

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

    For $i = 1 To $aEnemys[0][0]
    If $i > $aEnemys[0][0] Then ExitLoop
    If $aEnemys[$i][4] <= 0 Then
    _ArrayDelete($aEnemys, $i)
    $aEnemys[0][0] -= 1
    $i -= 1
    Else
    If TimerDiff($aEnemys[$i][5]) >= $aEnemys[$i][6] * $nTimeMod Then
    $aProjectiles[0][0] += 1
    ReDim $aProjectiles[$aProjectiles[0][0] + 1][6]

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

    $aDiff = _Vector_Create($nX_PlayerPos - $aEnemys[$i][0], $nY_PlayerPos - $aEnemys[$i][1])
    $aDirection = _Vector_Normalize($aDiff)

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

    $aProjectiles[$aProjectiles[0][0]][0] = $aEnemys[$i][0]
    $aProjectiles[$aProjectiles[0][0]][1] = $aEnemys[$i][1]
    $aProjectiles[$aProjectiles[0][0]][2] = $aDirection[0] * $nProjectileSpeedEnemy
    $aProjectiles[$aProjectiles[0][0]][3] = $aDirection[1] * $nProjectileSpeedEnemy
    $aProjectiles[$aProjectiles[0][0]][4] = 5
    $aProjectiles[$aProjectiles[0][0]][5] = 0

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

    $aEnemys[$i][5] = TimerInit()
    EndIf

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

    $aEnemys[$i][0] += $aEnemys[$i][2] / $nFPS_Cur
    $aEnemys[$i][1] += $aEnemys[$i][3] / $nFPS_Cur

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

    If $aEnemys[$i][0] - 10 <= 0 And $aEnemys[$i][2] < 0 Then $aEnemys[$i][2] *= -1
    If $aEnemys[$i][0] + 10 >= $iGUIWidth And $aEnemys[$i][2] > 0 Then $aEnemys[$i][2] *= -1
    If $aEnemys[$i][1] - 10 <= 0 And $aEnemys[$i][3] < 0 Then $aEnemys[$i][3] *= -1
    If $aEnemys[$i][1] + 10 >= $iGUIHeight And $aEnemys[$i][3] > 0 Then $aEnemys[$i][3] *= -1

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

    _GDIPlus_GraphicsFillEllipse($hGraphic, $aEnemys[$i][0] - 10, $aEnemys[$i][1] - 10, 20, 20, $hBrush_Enemy)
    EndIf
    Next

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

    _GDIPlus_GraphicsFillEllipse($hGraphic, $nX_PlayerPos - 10, $nY_PlayerPos - 10, 20, 20, $hBrush_Player)

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

    For $i = 1 To $aProjectiles[0][0]
    If $i > $aProjectiles[0][0] Then ExitLoop

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

    DllStructSetData($tPoint, "X", $aProjectiles[$i][0])
    DllStructSetData($tPoint, "Y", $aProjectiles[$i][1])

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

    If _WinAPI_PtInRect($tRectBorder, $tPoint) Then

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

    $aProjectiles[$i][0] += $aProjectiles[$i][2] / $nFPS_Cur
    $aProjectiles[$i][1] += $aProjectiles[$i][3] / $nFPS_Cur

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

    _GDIPlus_GraphicsFillEllipse($hGraphic, $aProjectiles[$i][0] - 4, $aProjectiles[$i][1] - 4, 8, 8, $hBrush_ProjectileBG)

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

    Switch $aProjectiles[$i][5]
    Case 0
    _GDIPlus_GraphicsFillEllipse($hGraphic, $aProjectiles[$i][0] - 3, $aProjectiles[$i][1] - 3, 6, 6, $hBrush_Enemy)
    Case 1
    _GDIPlus_GraphicsFillEllipse($hGraphic, $aProjectiles[$i][0] - 3, $aProjectiles[$i][1] - 3, 6, 6, $hBrush_Player)
    EndSwitch

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

    Switch $aProjectiles[$i][5]
    Case 0
    If _CircleIsTouchingCircle($aProjectiles[$i][0], $aProjectiles[$i][1], $nX_PlayerPos, $nY_PlayerPos, 6, 10) Then
    $nLifeForce -= $aProjectiles[$i][4]
    _ArrayDelete($aProjectiles, $i)
    $aProjectiles[0][0] -= 1
    $i -= 1
    EndIf
    Case 1
    For $i2 = 1 To $aEnemys[0][0]
    If _CircleIsTouchingCircle($aProjectiles[$i][0], $aProjectiles[$i][1], $aEnemys[$i2][0], $aEnemys[$i2][1], 6, 10) Then
    $aEnemys[$i2][4] -= $aProjectiles[$i][4]
    _ArrayDelete($aProjectiles, $i)
    $aProjectiles[0][0] -= 1
    $i -= 1
    ExitLoop
    EndIf
    Next
    EndSwitch
    Else
    _ArrayDelete($aProjectiles, $i)
    $aProjectiles[0][0] -= 1
    $i -= 1
    EndIf
    Next

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

    _GDIPlus_GraphicsDrawRect($hGraphic, 5, 5, 100, 10, $hPen_Bar)
    _GDIPlus_GraphicsDrawRect($hGraphic, 5, 18, 100, 10, $hPen_Bar)
    _GDIPlus_GraphicsFillRect($hGraphic, 5, 5, $nLifeForce * 100 / $nLifeForcePlayer, 10, $hBrush_LifeBar)
    _GDIPlus_GraphicsFillRect($hGraphic, 5, 18, $nSlowMotionFuel * 100 / $nSlowMotionFuelMax, 10, $hBrush_SlowMotionBar)

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

    _GDIPlus_GraphicsDrawEllipse($hGraphic, $aCursorInfo[0] - 8, $aCursorInfo[1] - 8, 16, 16, $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0], $aCursorInfo[1] - 11, $aCursorInfo[0], $aCursorInfo[1] - 4, $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0] - 11, $aCursorInfo[1], $aCursorInfo[0] - 4, $aCursorInfo[1], $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0], $aCursorInfo[1] + 11, $aCursorInfo[0], $aCursorInfo[1] + 4, $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0] + 11, $aCursorInfo[1], $aCursorInfo[0] + 4, $aCursorInfo[1], $hPen_Cursor)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "FPS " & Int($nFPS_Display), $hFont_FPS, $tLayout_FPS, $hStringFormat, $hBrush_FPS)

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

    _WinAPI_BitBlt($hDC, 0, 0, $iGUIWidth, $iGUIHeight, $hCDC_Buffer, 0, 0, 0x00CC0020)

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

    Switch _IsPressed("50", $vUser32Dll)
    Case True
    Dim $aTimerOffset[4 + $aEnemys[0][0]]

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

    $aTimerOffset[0] = TimerDiff($nT_Sleep)
    $aTimerOffset[1] = TimerDiff($nT_UpdateFPS)
    $aTimerOffset[2] = TimerDiff($nT_AdjustSleepTime)
    $aTimerOffset[3] = TimerDiff($nT_CoolDown)
    For $i = 1 To $aEnemys[0][0]
    $aTimerOffset[$i + 3] = TimerDiff($aEnemys[$i][5])
    Next

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

    _Pause()

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

    $nT_Sleep = TimerInit() - $aTimerOffset[0]
    $nT_UpdateFPS = TimerInit() - $aTimerOffset[1]
    $nT_AdjustSleepTime = TimerInit() - $aTimerOffset[2]
    $nT_CoolDown = TimerInit() - $aTimerOffset[3]
    For $i = 1 To $aEnemys[0][0]
    $aEnemys[$i][5] = TimerInit() - $aTimerOffset[$i + 3]
    Next
    EndSwitch
    Else
    Sleep(10)
    EndIf
    WEnd

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

    Func _Pause()
    $hBitmapBG = _GDIPlus_BitmapCreateFromHBITMAP($hGDI_Bitmap)
    $hGraphicTmp = _GDIPlus_ImageGetGraphicsContext($hBitmapBG)
    _GDIPlus_GraphicsFillRect($hGraphicTmp, 0, 0, $iGUIWidth, $iGUIHeight, $hBrush_BG_Menu)
    _GDIPlus_GraphicsDispose($hGraphicTmp)

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

    Do
    Sleep(20)
    Until Not _IsPressed("50", $vUser32Dll)

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

    $nT_Sleep = TimerInit() + $nSleepTime
    $nT_UpdateFPS = TimerInit()
    $nT_AdjustSleepTime = TimerInit()

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

    While Not _IsPressed("50", $vUser32Dll)
    DllStructSetData($tPrecSleep, "time", -10000 * ($nSleepTime - TimerDiff($nT_Sleep) + $nOffsetSleepTime))
    DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep)
    $nFrameTime = TimerDiff($nT_Sleep)
    $nT_Sleep = TimerInit()

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

    $nFPS_Cur = 1000 / $nFrameTime
    If TimerDiff($nT_UpdateFPS) >= 500 Then
    $nFPS_Average = ($nFPS_Average * ($iCounter - 1) + $nFPS_Cur) / $iCounter
    $iCounter += 1
    $nFPS_Display = $nFPS_Cur
    $nT_UpdateFPS = TimerInit()
    EndIf
    If TimerDiff($nT_AdjustSleepTime) >= 5000 Then
    If $nFPS_Average - $nFPS < -2 Then $nOffsetSleepTime -= 0.5
    If $nFPS_Average - $nFPS > 2 Then $nOffsetSleepTime += 0.5
    $iCounter = 1
    $nT_AdjustSleepTime = TimerInit()
    EndIf

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

    $aCursorInfo = GUIGetCursorInfo($hWnd)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmapBG, 0, 0, $iGUIWidth, $iGUIHeight)
    Switch $bNewGame
    Case True
    Switch _PointIsInRect($aCursorInfo[0], $aCursorInfo[1], DllStructGetData($tLayout_Menu_Start, "X"), DllStructGetData($tLayout_Menu_Start, "Y"), DllStructGetData($tLayout_Menu_Start, "Width"), DllStructGetData($tLayout_Menu_Start, "Height"))
    Case True
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Start", $hFont_Menu, $tLayout_Menu_Start, $hStringFormat, $hBrush_MenuTextHighlight)
    If $aCursorInfo[2] Then ExitLoop
    Case False
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Start", $hFont_Menu, $tLayout_Menu_Start, $hStringFormat, $hBrush_MenuTextNormal)
    EndSwitch
    Case False
    Switch _PointIsInRect($aCursorInfo[0], $aCursorInfo[1], DllStructGetData($tLayout_Menu_Continue, "X"), DllStructGetData($tLayout_Menu_Continue, "Y"), DllStructGetData($tLayout_Menu_Continue, "Width"), DllStructGetData($tLayout_Menu_Continue, "Height"))
    Case True
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Continue", $hFont_Menu, $tLayout_Menu_Continue, $hStringFormat, $hBrush_MenuTextHighlight)
    If $aCursorInfo[2] Then ExitLoop
    Case False
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Continue", $hFont_Menu, $tLayout_Menu_Continue, $hStringFormat, $hBrush_MenuTextNormal)
    EndSwitch
    EndSwitch
    Switch _PointIsInRect($aCursorInfo[0], $aCursorInfo[1], DllStructGetData($tLayout_Menu_Quit, "X"), DllStructGetData($tLayout_Menu_Quit, "Y"), DllStructGetData($tLayout_Menu_Quit, "Width"), DllStructGetData($tLayout_Menu_Quit, "Height"))
    Case True
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Quit", $hFont_Menu, $tLayout_Menu_Quit, $hStringFormat, $hBrush_MenuTextHighlight)
    If $aCursorInfo[2] Then _Close()
    Case False
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Quit", $hFont_Menu, $tLayout_Menu_Quit, $hStringFormat, $hBrush_MenuTextNormal)
    EndSwitch
    _GDIPlus_GraphicsDrawEllipse($hGraphic, $aCursorInfo[0] - 8, $aCursorInfo[1] - 8, 16, 16, $hPen_Cursor)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "FPS " & Int($nFPS_Display), $hFont_FPS, $tLayout_FPS, $hStringFormat, $hBrush_FPS)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0], $aCursorInfo[1] - 11, $aCursorInfo[0], $aCursorInfo[1] - 4, $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0] - 11, $aCursorInfo[1], $aCursorInfo[0] - 4, $aCursorInfo[1], $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0], $aCursorInfo[1] + 11, $aCursorInfo[0], $aCursorInfo[1] + 4, $hPen_Cursor)
    _GDIPlus_GraphicsDrawLine($hGraphic, $aCursorInfo[0] + 11, $aCursorInfo[1], $aCursorInfo[0] + 4, $aCursorInfo[1], $hPen_Cursor)
    _WinAPI_BitBlt($hDC, 0, 0, $iGUIWidth, $iGUIHeight, $hCDC_Buffer, 0, 0, 0x00CC0020)
    WEnd

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

    If $bNewGame Then
    $nT_DisplayWave = TimerInit()
    $bNewWave = True
    EndIf

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

    Do
    Sleep(20)
    Until Not _IsPressed("50", $vUser32Dll) And Not _IsPressed("01", $vUser32Dll)
    EndFunc ;==>_Pause

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

    Func _Restart()
    $iEnemys = Ceiling($iWaveCounter / 5)
    If $iEnemys > 8 Then $iEnemys = 8

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

    $nProjectileSpeedEnemy = 200 + $iWaveCounter * 5
    $nEnemySpeed = Random($iWaveCounter * 10 + 50, $iWaveCounter * 10 + 100, 1)
    If $nEnemySpeed > 500 Then $nEnemySpeed = Random(400, 500, 1)

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

    Dim $aEnemys[$iEnemys + 1][7] = [[$iEnemys]]
    For $i = 1 To $aEnemys[0][0]
    $aEnemys[$i][0] = Random(10, $iGUIWidth - 10)
    $aEnemys[$i][1] = Random(10, $iGUIHeight - 10)
    $aNormTmp = _Vector_Normalize(_Vector_Create(Random(-1, 1), Random(-1, 1)))
    $aEnemys[$i][2] = $aNormTmp[0] * $nEnemySpeed
    $aEnemys[$i][3] = $aNormTmp[1] * $nEnemySpeed
    $aEnemys[$i][4] = 5 + $iWaveCounter * 5
    $aEnemys[$i][5] = TimerInit()
    $aEnemys[$i][6] = Random(800 - $iWaveCounter * 5, 1000 - $iWaveCounter * 5, 1)
    If $aEnemys[$i][6] < 200 Then $aEnemys[$i][6] = Random(200, 250, 1)
    Next
    EndFunc ;==>_Restart

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

    Func _Close()
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _WinAPI_DeleteDC($hCDC_Buffer)
    _WinAPI_DeleteObject($hGDI_Bitmap)

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BitmapDispose($hBitmapBG)
    _GDIPlus_BrushDispose($hBrush_Player)
    _GDIPlus_BrushDispose($hBrush_Enemy)
    _GDIPlus_BrushDispose($hBrush_BG_Menu)
    _GDIPlus_BrushDispose($hBrush_FPS)
    _GDIPlus_BrushDispose($hBrush_ProjectileBG)
    _GDIPlus_BrushDispose($hBrush_MenuTextNormal)
    _GDIPlus_BrushDispose($hBrush_MenuTextHighlight)
    _GDIPlus_BrushDispose($hBrush_LifeBar)
    _GDIPlus_BrushDispose($hBrush_SlowMotionBar)
    _GDIPlus_BrushDispose($hBrush_Announcement)
    _GDIPlus_PenDispose($hPen_Bar)
    _GDIPlus_PenDispose($hPen_Cursor)
    _GDIPlus_StringFormatDispose($hStringFormat)
    _GDIPlus_FontFamilyDispose($hFamily_SegoeUI)
    _GDIPlus_FontDispose($hFont_FPS)
    _GDIPlus_FontDispose($hFont_Menu)
    _GDIPlus_Shutdown()

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

    DllClose($vUser32Dll)
    DllClose($vNTdll)
    Exit
    EndFunc ;==>_Close

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

    Func _PointIsInCircle($iX_Point, $iY_Point, $iX_Circle, $iY_Circle, $iRadius_Circle)
    $iDistPoints = _GetPointsDistance($iX_Point, $iY_Point, $iX_Circle, $iY_Circle)
    If ($iRadius_Circle > 0 And $iDistPoints < $iRadius_Circle) Or ($iRadius_Circle < 0 And $iDistPoints > $iRadius_Circle) Or $iDistPoints = 0 Then Return 1
    Return 0
    EndFunc ;==>_PointIsInCircle

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

    Func _CircleIsTouchingCircle($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2, $iRadius_Circle1, $iRadius_Circle2)
    $iDistCircles = _GetPointsDistance($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2)
    If $iDistCircles < $iRadius_Circle1 + $iRadius_Circle2 Then Return True
    Return False
    EndFunc ;==>_CircleIsTouchingCircle

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

    Func _PointIsInRect($iX_Point, $iY_Point, $iX_Rect, $iY_Rect, $iWidth_Rect, $iHeight_Rect)
    If $iX_Point >= $iX_Rect And $iX_Point <= $iX_Rect + $iWidth_Rect And $iY_Point >= $iY_Rect And $iY_Point <= $iY_Rect + $iHeight_Rect Then Return 1
    Return 0
    EndFunc ;==>_PointIsInRect

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

    Func _GetPointsDistance($iPointX1, $iPointY1, $iPointX2, $iPointY2)
    Return Sqrt(($iPointX1 - $iPointX2) ^ 2 + ($iPointY1 - $iPointY2) ^ 2)
    EndFunc ;==>_GetPointsDistance

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

    Func _istPause()
    If Not Winactive("AutoIt Arena Fight v1.0 - Author: name22(http://www.autoit.de)") Then
    $pause = True
    Else
    $pause = False
    EndIf
    EndFunc

    [/autoit]
  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 21:25

    BadBunny: Für mich bist du auch ein GDI+ kenner. Du hast es geschafft snake zu schreiben, kannst du mir vielleicht nen bisschen helfen?

    name22: sorry dass ich deinen Thread misbrauche :rolleyes:

  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 21:04

    also der Bug ist bei mir nicht mehr aufgetreten ;)
    aber bis 21!? wow heftig...

  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 20:15

    Ihr kommt nur bis 11?=) ich bin grad bis 18 gekommen aber dann wirds schon echt heavy:D

    Der Bug passiert einfach so...
    aber ich wüsste auch nich wie man das beheben könnte

    DFPWare

  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 19:58

    Den Zeitlupenmodus finde ich gut, auch die dazu passende Anzeige ist gelungen :)

    Ich würde das Fadenkreuz noch größer machen, etwa doppelt so groß.

    Ich habe noch einen Bug entdeckt, einen wirklich winzigen, manchmal buggen die Gegner am Rand fest, aber auch nur für 3-5 Sekunden.

    DFPWare

  • Virtuelles Mikrofon

    • DFPWare
    • 9. April 2011 um 19:46

    ?? über ein Mikrofon Musik abspielen?
    Meinst du, dass du zum beispiel den Sound eines Spiels aufnehmen kannst?
    Wenn ja dann kann man das bei Windows irgendwo umstellen..
    ich guck mal kurz
    Also bei Windows7 unten rechtsklick auf das Lautsprechersymbol > Aufnahmegeräte, dann müsste als Option einmal Mikrofon und noch eine andere kommen. Dann die andere Option wählen und dann auf "Als Standart". Dann kann man das ganz einfach aufnehmen, wie vom Mikro

    DFPWare

  • Calculate! Ein rasantes Mathe-Spiel(Mathe&Geschick&Schnelligkeit)

    • DFPWare
    • 9. April 2011 um 19:38

    Nicht schlecht fürs erste GDI+ spielchen ;)
    vielleicht kannst du ja noch einen HotKey oder soetwas für das Anzeigen der Highscoreliste einbauen
    DFPWare

  • Snake...

    • DFPWare
    • 9. April 2011 um 19:14

    Hey Leute

    wie einige vielleicht schon gemerkt haben versuche ich gerade GDI+ zu lernen.

    Ich wollte mal Snake nachprogrammieren, aber jetzt weiß ich nicht mehr weiter. Wie bekomme ich es hin, dass wenn die Schlange um die Ecke läuft, dass dann die Wurst nen knick bekommt?

    Ja ich hab die SuFu nach Snake abgesucht aber alle GDI+ sachen waren mir einfach viel zu umfangreich und deshalb hab ich nix kapiert -.-

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    OnAutoItExitRegister("_EXIT")

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

    $x = 100
    $y = 100
    $score = 1
    $width = 10

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

    $kx = 300
    $ky = 400
    $direction = "down"

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

    $Gui = GUICreate("Snake",500,500,100,100)

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

    _GDIPlus_Startup()
    $brushSchwarz = _GDIPlus_BrushCreateSolid(0xFF000000)
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $brushGruen = _GDIPlus_BrushCreateSolid(0xFF60CC3F)

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

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

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

    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case _IsPressed(25) ;links
    $direction = "left"
    Case _IsPressed(26) ;oben
    $direction = "up"
    Case _IsPressed(27) ;rechts
    $direction = "right"
    Case _IsPressed(28) ;unten
    $direction = "down"
    EndSelect

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

    If $direction == "left" And $x >= 0 Then $x -= 2
    If $direction == "up" And $y >= 0 Then $y -= 2
    If $direction == "right" And $x <= 500 Then $x += 2
    If $direction == "down" And $y <= 500 Then $y += 2

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

    _GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss)
    _GDIPlus_GraphicsFillRect($buffer, $x, $y, $width, 10, $brushSchwarz)
    _GDIPlus_GraphicsFillRect($buffer, $kx, $ky, 10, 10, $brushGruen)
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500)

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

    Select
    Case $x >= ($kx - 5) And $x <= ($kx + 5) And $y >= ($ky - 5) And $y <= ($ky + 5)
    $score += 1
    $kx = Random(1,490,1)
    $ky = Random(1,490,1)
    $width += 10
    EndSelect

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

    Until $msg = $GUI_EVENT_CLOSE

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

    Func _EXIT()
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit]
  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 19:06

    :D bin bei Wave 17 abgekackt-.-

    Also erstmal ein wirklich tolles Skript.

    Ich finde es auch eigentlich nicht schlecht designt, wenn alles rund ist ;)

    Ich habe nur einen Verbesserungsvorschlag: Wie wärs wenn du den Zielpunkt in ein Zielkreuz umwandeln könntest, weil der geht in dem Kugelhagel wirklich unter...

    DFPWare

  • GDI+ Spiel: AutoIt Arena Fight.

    • DFPWare
    • 9. April 2011 um 18:55

    Ähm wie startet man das?
    Bei mir kommt nur die GUI mit dem grauen Punkt unter der Maus ?(
    Edit: Ja Darter das ist bei Win7 32 Bit wohl auch so :D

  • Fuchs jagt Hase

    • DFPWare
    • 9. April 2011 um 14:31

    Hier mal ein Video ;)
    Zu erst sieht man dass wenn man noch nicht auf Start geklickt hat niemand gefangen werden kann ;)
    Grün fängt an, wenn Grün Blau gefangen hat dann ist Blau dran mit fangen.
    http://www.screencast.com/users/hacker33…9c-95bd16f4283a

  • Fuchs jagt Hase

    • DFPWare
    • 9. April 2011 um 13:49

    also bei mir klappt alles hervorragend.
    du musst auf start klicken bevor du anfängst, sonst kann man zwar die Rechtecke bewegen aber es werden keine Punkte gezählt und auch keine Kollisionen erkannt

  • Fuchs jagt Hase

    • DFPWare
    • 9. April 2011 um 11:25

    :D ne ne ki wollte ich mir dann doch nich antun

  • Fuchs jagt Hase

    • DFPWare
    • 9. April 2011 um 09:49

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

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

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

  • Fuchs jagt Hase

    • DFPWare
    • 8. April 2011 um 17:27

    Hey Leute ich hab mich die letzten 2 Tage mal mit Gdi+ beschäftigt und das ist dabei rumgekommen :D
    Man muss erst auf Start klicken, weil da der Timer initialisiert wird, aber nur beim ersten mal, danach passiert das von selbst.
    Das Ziel des Spiels ist den Gegner innerhalb von 30 Sekunden zu fangen. Je schneller desto mehr Punkte bekommt man. Gesteuert wird die Spielfigur mit W,A,S,D und den Pfeiltasten.

    Spoiler anzeigen
    [autoit]

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

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

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

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

    OnAutoItExitRegister("_EXIT")

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

    _GDIPlus_Startup()

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

    $Gui = GUICreate("Fuchs jagt Hase", 500, 550, 100, 100)
    $punkteGruen = GUICtrlCreateLabel("0", 10, 510, 60, 30)
    GUICtrlSetFont($punkteGruen, 20)
    $punkteBlau = GUICtrlCreateLabel("0", 430, 510, 60, 30, $SS_RIGHT)
    GUICtrlSetFont($punkteBlau, 20)
    $anzeigeGruen = GUICtrlCreateLabel("F", 80, 510, 30, 30)
    GUICtrlSetFont($anzeigeGruen, 20)
    $anzeigeBlau = GUICtrlCreateLabel("H", 390, 510, 30, 30)
    GUICtrlSetFont($anzeigeBlau, 20)
    $reset = GUICtrlCreateButton("Reset", 140, 510, 100, 30)
    GUICtrlSetFont($reset, 20)
    $start = GUICtrlCreateButton("Start", 250, 510, 100, 30)
    GUICtrlSetFont($start, 20)

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

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

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

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

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $started = True And $xg >= ($xb - 100) And $xg <= ($xb + 100) And $yg >= ($yb - 100) And $yg <= ($yb + 100)
    $zeit = Int(30 - (TimerDiff($zeitInit) / 1000))
    MsgBox(0, "Winner", $spieler & " hat gewonnen")
    $xg = 0
    $yg = 0
    $xb = 400
    $yb = 0
    If $spieler == "Grün" Then
    $spieler = "Blau"
    $altepunkte = GUICtrlRead($punkteGruen)
    GUICtrlSetData($punkteGruen, ($altepunkte + $zeit))
    GUICtrlSetData($anzeigeBlau, "F")
    GUICtrlSetData($anzeigeGruen, "H")
    $zeitInit = TimerInit()
    Else
    $spieler = "Grün"
    $altepunkte = GUICtrlRead($punkteBlau)
    GUICtrlSetData($punkteBlau, ($altepunkte + $zeit))
    GUICtrlSetData($anzeigeBlau, "H")
    GUICtrlSetData($anzeigeGruen, "F")
    $zeitInit = TimerInit()
    EndIf
    Case $msg = $reset
    GUICtrlSetData($punkteGruen, "0")
    GUICtrlSetData($punkteBlau, "0")
    Case $msg = $start
    $zeitInit = TimerInit()
    $started = True
    $xg = 0
    $yg = 0
    $xb = 400
    $yb = 0
    EndSelect

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

    If _IsPressed(25) And $xg >= 0 Then $xg -= 2 ; Links
    If _IsPressed(26) And $yg >= 0 Then $yg -= 2 ; Oben
    If _IsPressed(27) And $xg <= 400 Then $xg += 2 ; Rechts
    If _IsPressed(28) And $yg <= 400 Then $yg += 2 ; Unten

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

    If _IsPressed(41) And $xb >= 0 Then $xb -= 2 ; A
    If _IsPressed(57) And $yb >= 0 Then $yb -= 2 ; W
    If _IsPressed(44) And $xb <= 400 Then $xb += 2 ; D
    If _IsPressed(53) And $yb <= 400 Then $yb += 2 ; S

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

    _GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss)
    _GDIPlus_GraphicsFillRect($buffer, $xg, $yg, 100, 100, $brushGruen)
    _GDIPlus_GraphicsFillRect($buffer, $xb, $yb, 100, 100, $brushBlau)
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500)

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

    WEnd

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

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

    [/autoit]
  • GDI+ schnell??

    • DFPWare
    • 8. April 2011 um 16:45

    jaa danke :D
    komisch dass das bei select so ist...

  • GDI+ schnell??

    • DFPWare
    • 8. April 2011 um 16:24

    aber wenn ich jetzt s und pfeil unten gleichzeitig drücke dann wird nur ein quadrat bewegt.
    ich will daraus ein minispiel zum lernen machen, den rest kann ich eigentlich wohl, aber beide spieler sollen ihr quadrat gleichzeitig bewegen können.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™