In diesem Spiel geht es darum, mit der Maus die herunterfallenden Zielscheiben möglichst weit in der Mitte "abzuschießen" bevor das Zeitlimit erreicht ist (kleinere Zielscheiben bringen mehr Punkte). Escape bringt euch zurück ins Hauptmenü.
Es ist zwar noch nicht ganz fertig, aber hat immerhin schon:
- Ein Menü
- Eine Funktion die überprüft, ob ein Punkt innerhalb eines Kreises liegt ohne dabei imaginäre Rechtecke zu verwenden.
- Eine Score Funktion.
- Ein einigermaßen akzeptables Physics Engine (wenn auch ohne Kreiskollisionen).
- Ein sich bewegendes Hintergrundbild.
- Soundeffekte
- Brushs mit linearem Farbverlauf
- Einige Funktionen die zwar im Script nicht benutzt werden, aber dennoch sehr nützlich sein können.
Ich würde mich über Tipps für das Game Balancing und sonstige produktive Krtitik freuen .
Edit: Dank eines kleinen Rechtschreibfehlers war die komplette Score Funktion außer Kraft gesetzt Ist jetzt aber verbessert. Außerdem werden die Scores jetzt sortiert.Version 1.1 mit kleinen Extras, wie einer nützlichen Beep Funktion die einem die letzten Sekunden des Spiels einläutet, ist up. Version 1.2 mit einem völlig neuen Menü Design ist da. (Die benötigte Schriftart im zip Archiv muss vorher installiert werden)
Version 1.3 mit leichten Veränderungen und die Schriftart wird jetzt mit MemFont "includet" und muss nicht mehr installiert werden.
Version 1.0 (zip mit Script + benötigten Dateien im Anhang)
Spoiler anzeigen
#include <Date.au3>
#include <Misc.au3>
#include <Sound.au3>
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
If FileExists("Scores.ini") = 0 Then
$hFile = FileOpen("Scores.ini", 1)
FileWrite($hFile, "[ScoreTable]" & @CRLF)
FileClose($hFile)
EndIf
$iGUIWidth = 400
$iGUIHeight = 700
$iScore = 0
$sScores = ""
$sUser = ""
$Found = False
$iTimelimit = 20000
$iTime = $iTimelimit
Global $Timer = 0
$iX_Cloud1 = Random(-100, $iGUIWidth + 100, 1)
$iX_Cloud2 = Random(-100, $iGUIWidth + 100, 1)
$vX_Cloud1 = Round(Random(-0.5, 0.5), 2)
$vX_Cloud2 = Round(Random(-0.5, 0.5), 2)
$iY_Cloud1 = $iGUIHeight / 3
$iY_Cloud2 = $iGUIHeight / 3 * 2
Global $iX_Explosion = 0, $iY_Explosion = 0, $bExplosion = False
Global $iX_IncDec = 0, $iY_IncDec = 0, $sIncDec = 0, $iTimerIncDec = 0
Global $iHours, $iMins, $iSecs
[/autoit] [autoit][/autoit] [autoit]$Gravitation = 0.1
$Reibung = 0.98
$Reibung2 = 0.95
$hGunSound = _SoundOpen(@ScriptDir & "\Gun.wav")
$hBGMusic = _SoundOpen(@ScriptDir & "\BGMusic.mp3")
$hWndUserName = GUICreate("Namen eingeben", 200, 55, -1, -1, $WS_CAPTION)
$UserInput = GUICtrlCreateInput("Name", 0, 0, 200, 25, 0x0001)
GUICtrlSetLimit(-1, 6)
GUICtrlSetFont(-1, 12)
$OKButton = GUICtrlCreateButton("OK", 0, 25, 200, 15)
$ExitButton = GUICtrlCreateButton("Beenden", 0, 40, 200, 15)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $ExitButton
Exit
Case $OKButton, $UserInput
$sUser = GUICtrlRead($UserInput)
If StringReplace($sUser, " ", "") <> "" Then
GUIDelete($hWndUserName)
ExitLoop
EndIf
EndSwitch
WEnd
$hWnd = GUICreate("Targets", $iGUIWidth, $iGUIHeight, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
GUISetCursor(3, 1)
GUISetState()
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
_GDIPlus_GraphicsClear($hGraphic)
$Cloud1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Wolke1.png")
$Cloud2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Wolke2.png")
$hExplosion = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Explosion.png")
$hBrushWhite = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hBrushRed = _GDIPlus_BrushCreateSolid(0xFFFF0000)
$hBrushGreen = _GDIPlus_BrushCreateSolid(0xFF00FF00)
$hBrushBlue = _GDIPlus_BrushCreateSolid(0xFF0000FF)
$hBrushYellow = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
$hBrushBlack = _GDIPlus_BrushCreateSolid(0xFF000000)
$hBrushScore = _GDIPlus_BrushCreateLinear($iGUIWidth - 15, $iGUIHeight - 50, $iGUIWidth - 105, $iGUIHeight, 0xFFFF0000, 0xFF000000)
$hBrushTime = _GDIPlus_BrushCreateLinear(0, $iGUIHeight - 50, 105, $iGUIHeight, 0xFFFF0000, 0xFF000000)
$hBrushBG = _GDIPlus_BrushCreateLinear(0, 0, 0, $iGUIHeight, 0xFF7BCFF, 0xFF0057B5)
$hBrushButtonGreen2 = _GDIPlus_BrushCreateLinear($iGUIWidth / 2 - 110, $iGUIHeight / 2 + 50, $iGUIWidth / 2 - 10, $iGUIHeight / 2 + 200, 0xFF86F586, 0xFF0F3704)
$hBrushButtonRed = _GDIPlus_BrushCreateLinear($iGUIWidth / 2 + 10, $iGUIHeight / 2 + 50, $iGUIWidth / 2 + 110, $iGUIHeight / 2 + 200, 0xFFFFA4A8, 0xFF800000)
$hBrushScoreTable = _GDIPlus_BrushCreateLinear(0, 0, 0, $iGUIHeight / 2 + 50, 0xFF00FF00, 0xFFFF0000)
$hPenBlack1 = _GDIPlus_PenCreate(0xFF000000, 6)
$hPenBlack2 = _GDIPlus_PenCreate(0xFF000000, 6)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Tahoma")
$hFont = _GDIPlus_FontCreate($hFamily, 25, 1)
$hFont2 = _GDIPlus_FontCreate($hFamily, 18, 1)
$tLayoutScore = _GDIPlus_RectFCreate($iGUIWidth - 120, $iGUIHeight - 50, 0, 0)
$tLayoutTime = _GDIPlus_RectFCreate(5, $iGUIHeight - 50, 0, 0)
$tLayoutStart = _GDIPlus_RectFCreate($iGUIWidth / 2 - 102, $iGUIHeight / 2 + 85, 0, 0)
$tLayoutExit = _GDIPlus_RectFCreate($iGUIWidth / 2 + 26, $iGUIHeight / 2 + 85, 0, 0)
$tLayoutScoreTable = _GDIPlus_RectFCreate(20, 5, 0, $iGUIHeight / 2 - 20)
Dim $aCircles[3][6]
For $i = 0 To UBound($aCircles) - 1
$aCircles[$i][0] = Random(70, 340, 1)
$aCircles[$i][1] = -100
$aCircles[$i][2] = Random(30, 60, 1)
$aCircles[$i][3] = Random(-20, 20, 1)
$aCircles[$i][4] = Random(-10, 0, 1)
$aCircles[$i][5] = Round($aCircles[$i][2] / 5)
Next
GUIRegisterMsg($WM_PAINT, "WM_PAINT")
HotKeySet("{ESC}", "_Menu")
_Menu()
[/autoit] [autoit][/autoit] [autoit]Func _MainLoop()
_SoundPlay($hBGMusic)
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
_Exit()
Case $GUI_EVENT_PRIMARYDOWN
_SoundStop($hGunSound)
_SoundPlay($hGunSound)
$iX_IncDec = $nMsg[3] + 20
$iY_IncDec = $nMsg[4] - 10
For $i = 0 To UBound($aCircles) - 1
$iDistFromMiddle = _PointIsInCircle($nMsg[3], $nMsg[4], $aCircles[$i][0] + $aCircles[$i][2] / 2, $aCircles[$i][1] + $aCircles[$i][2] / 2, $aCircles[$i][2] / 2)
If $iDistFromMiddle <> -1 Then
$bExplosion = True
$iX_Explosion = $nMsg[3] - 10
$iY_Explosion = $nMsg[4] - 10
$Found = True
$iTimerIncDec = TimerInit()
Switch Round($iDistFromMiddle)
Case 0 To $aCircles[$i][5] / 2
Switch $aCircles[$i][2]
Case 30 To 40
$iScore += 20
$sIncDec = 20
Case 41 To 50
$iScore += 15
$sIncDec = 15
Case 51 To 60
$iScore += 10
$sIncDec = 10
Case 300
$iScore += 100
$sIncDec = 100
EndSwitch
Case $aCircles[$i][5] / 2 + 1 To $aCircles[$i][5] * 2 / 2
Switch $aCircles[$i][2]
Case 30 To 40
$iScore += 16
$sIncDec = 16
Case 41 To 50
$iScore += 12
$sIncDec = 12
Case 51 To 60
$iScore += 8
$sIncDec = 8
Case 300
$iScore += 80
$sIncDec = 80
EndSwitch
Case $aCircles[$i][5] * 2 / 2 + 1 To $aCircles[$i][5] * 3 / 2
Switch $aCircles[$i][2]
Case 30 To 40
$iScore += 8
$sIncDec = 8
Case 41 To 50
$iScore += 6
$sIncDec = 6
Case 51 To 60
$iScore += 4
$sIncDec = 4
Case 300
$iScore += 70
$sIncDec = 70
EndSwitch
Case $aCircles[$i][5] * 3 / 2 + 1 To $aCircles[$i][5] * 4 / 2
Switch $aCircles[$i][2]
Case 30 To 40
$iScore += 4
$sIncDec = 4
Case 41 To 50
$iScore += 3
$sIncDec = 3
Case 51 To 60
$iScore += 2
$sIncDec = 2
Case 300
$iScore += 60
$sIncDec = 60
EndSwitch
Case $aCircles[$i][5] * 4 / 2 + 1 To $aCircles[$i][5] * 5 / 2 + 2
Switch $aCircles[$i][2]
Case 30 To 40
$iScore += 3
$sIncDec = 3
Case 41 To 50
$iScore += 2
$sIncDec = 2
Case 51 To 60
$iScore += 1
$sIncDec = 1
Case 300
$iScore += 50
$sIncDec = 50
EndSwitch
EndSwitch
$aCircles[$i][0] = 10
$aCircles[$i][1] = $iGUIHeight + 200
ExitLoop
EndIf
Next
If $Found = False And $iScore > 0 Then
$iScore -= 1
$sIncDec = -1
EndIf
$Found = False
EndSwitch
$iTime = Round(TimerDiff($Timer))
If $iTime >= $iTimelimit Then
_Menu()
EndIf
If _SoundStatus($hBGMusic) = "stopped" Then
_SoundPlay($hBGMusic)
EndIf
WEnd
EndFunc ;==>_MainLoop
Func _Menu()
AdlibUnRegister()
$Gravitation = 0.2
If $iScore <> 0 Then
While StringInStr($iScore, "0") = 1
$iScore = StringTrimLeft($iScore, 1)
WEnd
FileWrite("Scores.ini", @CRLF & $sUser & "=" & $iScore)
EndIf
$aScores_Ini = IniReadSection("Scores.ini", "ScoreTable")
_ArraySortNum($aScores_Ini)
If Not @error Then
$sScores = "Players | Scores" & @CRLF
For $i = 1 To $aScores_Ini[0][0]
$sScores &= @CRLF & $aScores_Ini[$i][0] & ": " & $aScores_Ini[$i][1]
Next
EndIf
$iScore = 0
For $i = 0 To UBound($aCircles) - 1
$aCircles[$i][1] = $iGUIHeight + 200
Next
_ReDrawMenu()
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
_Exit()
Case $GUI_EVENT_RESTORE
WM_PAINT()
Case $GUI_EVENT_PRIMARYDOWN
If _PointIsInCircle($nMsg[3], $nMsg[4], $iGUIWidth / 2 - 60, $iGUIHeight / 2 + 100, 50) <> -1 Then
While _IsPressed("01")
If _GDIPlus_PenGetWidth($hPenBlack1) <> 12 Then
_GDIPlus_PenSetWidth($hPenBlack1, 12)
_ReDrawMenu()
EndIf
Sleep(30)
WEnd
_GDIPlus_PenSetWidth($hPenBlack1, 6)
_ReDrawMenu()
Sleep(50)
$Timer = TimerInit()
AdlibRegister("_ReDraw", 30)
_MainLoop()
EndIf
If _PointIsInCircle($nMsg[3], $nMsg[4], $iGUIWidth / 2 + 60, $iGUIHeight / 2 + 100, 50) <> -1 Then
While _IsPressed("01")
If _GDIPlus_PenGetWidth($hPenBlack2) <> 12 Then
_GDIPlus_PenSetWidth($hPenBlack2, 12)
_ReDrawMenu()
EndIf
Sleep(30)
WEnd
_GDIPlus_PenSetWidth($hPenBlack2, 6)
_ReDrawMenu()
Sleep(50)
_Exit()
EndIf
EndSwitch
WEnd
EndFunc ;==>_Menu
Func _Swap(ByRef $sItem1, ByRef $sItem2)
$sTemp = $sItem1
$sItem1 = $sItem2
$sItem2 = $sTemp
EndFunc ;==>_Swap
Func _ReDrawMenu()
_GDIPlus_GraphicsClear($hBuffer)
_GDIPlus_GraphicsFillRect($hBuffer, 0, 0, $iGUIWidth, $iGUIHeight, $hBrushBG)
_GDIPlus_GraphicsDrawEllipse($hBuffer, $iGUIWidth / 2 - 110, $iGUIHeight / 2 + 50, 100, 100, $hPenBlack1)
_GDIPlus_GraphicsDrawEllipse($hBuffer, $iGUIWidth / 2 + 10, $iGUIHeight / 2 + 50, 100, 100, $hPenBlack2)
_GDIPlus_GraphicsFillEllipse($hBuffer, $iGUIWidth / 2 - 110, $iGUIHeight / 2 + 50, 100, 100, $hBrushButtonGreen2)
_GDIPlus_GraphicsFillEllipse($hBuffer, $iGUIWidth / 2 + 10, $iGUIHeight / 2 + 50, 100, 100, $hBrushButtonRed)
_GDIPlus_GraphicsDrawStringEx($hBuffer, $sScores, $hFont2, $tLayoutScoreTable, $hFormat, $hBrushScoreTable)
_GDIPlus_GraphicsDrawStringEx($hBuffer, "START", $hFont2, $tLayoutStart, $hFormat, $hBrushBlack)
_GDIPlus_GraphicsDrawStringEx($hBuffer, "EXIT", $hFont2, $tLayoutExit, $hFormat, $hBrushBlack)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc ;==>_ReDrawMenu
Func _ReDraw()
$Gravitation += 0.0001
$iX_Cloud1 += $vX_Cloud1
$iX_Cloud2 += $vX_Cloud2
If $vX_Cloud1 > 0 And $iX_Cloud1 >= $iGUIWidth Then $iX_Cloud1 = -100
If $vX_Cloud1 < 0 And $iX_Cloud1 <= -100 Then $iX_Cloud1 = $iGUIWidth
If $vX_Cloud2 > 0 And $iX_Cloud2 >= $iGUIWidth Then $iX_Cloud2 = -100
If $vX_Cloud2 < 0 And $iX_Cloud2 <= -100 Then $iX_Cloud2 = $iGUIWidth
_GDIPlus_GraphicsClear($hBuffer)
_GDIPlus_GraphicsFillRect($hBuffer, 0, 0, $iGUIWidth, $iGUIHeight, $hBrushBG)
_GDIPlus_GraphicsDrawImageRect($hBuffer, $Cloud1, $iX_Cloud1, $iY_Cloud1, 100, 50)
_GDIPlus_GraphicsDrawImageRect($hBuffer, $Cloud2, $iX_Cloud2, $iY_Cloud2, 100, 50)
For $i = 0 To UBound($aCircles) - 1
If $aCircles[$i][3] > 0 And $aCircles[$i][0] + $aCircles[$i][2] >= $iGUIWidth Then
$aCircles[$i][3] *= -$Reibung2
$aCircles[$i][4] *= $Reibung2
EndIf
If $aCircles[$i][4] > 0 And $aCircles[$i][1] - $aCircles[$i][2] >= $iGUIHeight Then
$aCircles[$i][0] = Random(70, 340, 1)
$aCircles[$i][1] = -100
$aCircles[$i][2] = Random(30, 60, 1)
$aCircles[$i][3] = Random(-20, 20, 1)
$aCircles[$i][4] = Random(-10, 0, 1)
$aCircles[$i][5] = Round($aCircles[$i][2] / 5)
EndIf
If $aCircles[$i][3] < 0 And $aCircles[$i][0] <= 0 Then
$aCircles[$i][3] *= -$Reibung2
$aCircles[$i][4] *= $Reibung2
EndIf
$aCircles[$i][0] += $aCircles[$i][3]
$aCircles[$i][1] += $aCircles[$i][4]
$aCircles[$i][4] += $Gravitation
$aCircles[$i][3] *= $Reibung
$aCircles[$i][4] *= $Reibung
_GDIPlus_GraphicsFillEllipse($hBuffer, $aCircles[$i][0], $aCircles[$i][1], $aCircles[$i][2], $aCircles[$i][2], $hBrushWhite)
_GDIPlus_GraphicsFillEllipse($hBuffer, $aCircles[$i][0] + $aCircles[$i][5] / 2, $aCircles[$i][1] + $aCircles[$i][5] / 2, $aCircles[$i][2] - $aCircles[$i][5], $aCircles[$i][2] - $aCircles[$i][5], $hBrushBlack)
_GDIPlus_GraphicsFillEllipse($hBuffer, $aCircles[$i][0] + $aCircles[$i][5] * 2 / 2, $aCircles[$i][1] + $aCircles[$i][5] * 2 / 2, $aCircles[$i][2] - $aCircles[$i][5] * 2, $aCircles[$i][2] - $aCircles[$i][5] * 2, $hBrushBlue)
_GDIPlus_GraphicsFillEllipse($hBuffer, $aCircles[$i][0] + $aCircles[$i][5] * 3 / 2, $aCircles[$i][1] + $aCircles[$i][5] * 3 / 2, $aCircles[$i][2] - $aCircles[$i][5] * 3, $aCircles[$i][2] - $aCircles[$i][5] * 3, $hBrushRed)
_GDIPlus_GraphicsFillEllipse($hBuffer, $aCircles[$i][0] + $aCircles[$i][5] * 4 / 2, $aCircles[$i][1] + $aCircles[$i][5] * 4 / 2, $aCircles[$i][2] - $aCircles[$i][5] * 4, $aCircles[$i][2] - $aCircles[$i][5] * 4, $hBrushYellow)
Next
If $bExplosion = True Then
_GDIPlus_GraphicsDrawImageRect($hBuffer, $hExplosion, $iX_Explosion, $iY_Explosion, 25, 25)
$bExplosion = False
EndIf
For $i = 1 To 5 - StringLen($iScore)
$iScore = "0" & $iScore
Next
_TicksToTime($iTimelimit - $iTime, $iHours, $iMins, $iSecs)
If StringLen($iMins) = 1 Then $iMins = "0" & $iMins
If StringLen($iSecs) = 1 Then $iSecs = "0" & $iSecs
_GDIPlus_GraphicsDrawStringEx($hBuffer, $iMins & ":" & $iSecs, $hFont, $tLayoutTime, $hFormat, $hBrushTime)
_GDIPlus_GraphicsDrawStringEx($hBuffer, $iScore, $hFont, $tLayoutScore, $hFormat, $hBrushScore)
$tLayoutIncDec = _GDIPlus_RectFCreate($iX_IncDec, $iY_IncDec, 0, 0)
If $sIncDec > 0 Then _GDIPlus_GraphicsDrawStringEx($hBuffer, $sIncDec, $hFont, $tLayoutIncDec, $hFormat, $hBrushGreen)
If $sIncDec < 0 Then _GDIPlus_GraphicsDrawStringEx($hBuffer, $sIncDec, $hFont, $tLayoutIncDec, $hFormat, $hBrushRed)
If TimerDiff($iTimerIncDec) >= 1000 Then $sIncDec = 0
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc ;==>_ReDraw
Func _Exit()
AdlibUnRegister()
_SoundClose($hGunSound)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_ImageDispose($Cloud1)
_GDIPlus_ImageDispose($Cloud2)
_GDIPlus_ImageDispose($hExplosion)
_GDIPlus_BrushDispose($hBrushBlack)
_GDIPlus_BrushDispose($hBrushWhite)
_GDIPlus_BrushDispose($hBrushRed)
_GDIPlus_BrushDispose($hBrushGreen)
_GDIPlus_BrushDispose($hBrushYellow)
_GDIPlus_BrushDispose($hBrushBlue)
_GDIPlus_BrushDispose($hBrushScore)
_GDIPlus_BrushDispose($hBrushTime)
_GDIPlus_BrushDispose($hBrushScoreTable)
_GDIPlus_BrushDispose($hBrushButtonGreen2)
_GDIPlus_BrushDispose($hBrushButtonRed)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontDispose($hFont2)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Func _ArraySortNum(ByRef $array); Von Oscar https://autoit.de/index.php?page…5912#post105912, Bearbeitet von ????
Local $tmp,$tmp2
For $i = 1 To UBound($array) - 2
For $j = $i + 1 To UBound($array) - 1
If Number($array[$j][1]) > Number($array[$i][1]) Then
$tmp = $array[$i][0]
$tmp2 = $array[$i][1]
$array[$i][0] = $array[$j][0]
$array[$i][1] = $array[$j][1]
$array[$j][0] = $tmp
$array[$j][1] = $tmp2
EndIf
Next
Next
EndFunc
Func _GDIPlus_BrushCreateLinear($iX1, $iY1, $iX2, $iY2, $iARGB1 = 0xFF000000, $iARGB2 = 0xFFFFFFFF)
Local $aResult, $Start, $End, $pStart, $pEnd
$Start = DllStructCreate("int X;int Y")
DllStructSetData($Start, "X", $iX1)
DllStructSetData($Start, "Y", $iY1)
$pStart = DllStructGetPtr($Start)
$End = DllStructCreate("int X;int Y")
DllStructSetData($End, "X", $iX2)
DllStructSetData($End, "Y", $iY2)
$pEnd = DllStructGetPtr($End)
$aResult = DllCall($ghGDIPDll, "int", "GdipCreateLineBrushI", "ptr", $pStart, "ptr", $pEnd, "int", $iARGB1, "int", $iARGB2, "int", 0, "int*", 0)
If @error Then Return 0
Return SetError(0, $aResult[0], $aResult[6])
EndFunc ;==>_GDIPlus_BrushCreateLinear
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 $iDistPoints
Return -1
EndFunc ;==>_PointIsInCircle
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
Func _CircleIsInCircle($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2, $iRadius_Circle1, $iRadius_Circle2)
$iDistCircles = _GetPointsDistance($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2)
If $iRadius_Circle1 > $iRadius_Circle2 And $iDistCircles <= $iRadius_Circle1 - $iRadius_Circle2 Then Return True
If $iRadius_Circle1 < $iRadius_Circle2 And $iDistCircles <= $iRadius_Circle2 - $iRadius_Circle1 Then Return True
Return False
EndFunc ;==>_CircleIsInCircle
Func _GetPointsDistance($iPointX1, $iPointY1, $iPointX2, $iPointY2)
Return Sqrt(($iPointX1 - $iPointX2) ^ 2 + ($iPointY1 - $iPointY2) ^ 2)
EndFunc ;==>_GetPointsDistance
Func WM_PAINT()
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc ;==>WM_PAINT