Ein Script das eine sich ständig fortführende geschlängelte Linie in ein Fenster zeichnet:
Am anfang des Scripts sind Globale Variablen für die Einstellungen
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GDIPlus.au3>
Global $GUIWidth = 400 ;Breite des Fensters
Global $GUIHeight = 400 ;Höhe des Fensters
Global $Size = 3 ;Durchmesser des Kreises der die einzelnen Bögen vervollständigt
Global $PenSize = 1 ;Randstärke der Linie
Global $Angle = Random(0, 3, 1) * 90 ;Startwinkel (Gültige Werte: 0°, 90°, 180°, 270°)
Global $iX = Random($Size, $GUIWidth / $Size - $Size, 1) * $Size ;X-Startkoordinate
Global $iY = Random($Size, $GUIHeight / $Size - $Size, 1) * $Size ;Y-Startkoordinate
Global $GUIColorBG = 0xFFFFFFFF ;Hintergrundfarbe der GUI
Global $LineColor = 0xFF000000 ;Farbe der geschlängelten Linie
Global $RandomFactor = 40 ;Wahrscheinlichkeit eines Richtungswechsels (1 zu...)
If $Angle = 0 Then
Global $VectorX = $Size
Global $VectorY = 0
ElseIf $Angle = 90 Then
Global $VectorX = 0
Global $VectorY = $Size
ElseIf $Angle = 180 Then
Global $VectorX = $Size * - 1
Global $VectorY = 0
ElseIf $Angle = 270 Then
Global $VectorX = 0
Global $VectorY = $Size * - 1
EndIf
Global $Switch180 = 180
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Schlangenlinien", $GUIWidth, $GUIHeight)
GUISetState()
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $hGraphics)
Global $Buffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
_GDIPlus_GraphicsClear($Buffer, $GUIColorBG)
Global $hPen = _GDIPlus_PenCreate($LineColor, $PenSize)
[/autoit] [autoit][/autoit] [autoit]AdlibRegister("_DrawArc", 20)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_PenDispose($hPen)
_GDIPlus_Shutdown()
Exit
EndSwitch
WEnd
Func _DrawArc()
If Random(1, 40, 1) = 1 Then
_ChangeDirection()
EndIf
#Region CollisionCheck
If $iX >= $GUIWidth - $Size * 2 And $Angle = 0 And $iY < $GUIHeight / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size
$Angle = 90
EndIf
If $iX >= $GUIWidth - $Size * 2 And $Angle = 0 And $iY >= $GUIHeight / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size * - 1
$Angle = 270
EndIf
If $iX <= 0 And $Angle = 180 And $iY < $GUIHeight / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size
$Angle = 90
EndIf
If $iX <= 0 And $Angle = 180 And $iY >= $GUIHeight / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size * - 1
$Angle = 270
EndIf
If $iY >= $GUIHeight - $Size * 2 And $Angle = 90 And $iX < $GUIWidth / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size
$VectorY = 0
$Angle = 0
EndIf
If $iY >= $GUIHeight - $Size * 2 And $Angle = 90 And $iX >= $GUIWidth / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size * - 1
$VectorY = 0
$Angle = 180
EndIf
If $iY <= 0 And $Angle = 270 And $iX < $GUIHeight / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size
$VectorY = 0
$Angle = 0
EndIf
If $iY <= 0 And $Angle = 270 And $iX >= $GUIHeight / 2 Then
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size * - 1
$VectorY = 0
$Angle = 180
EndIf
#EndRegion CollisionCheck
$iX += $VectorX
$iY += $VectorY
$Switch180 *= -1
_GDIPlus_GraphicsDrawArc($Buffer, $iX, $iY, $Size, $Size, $Angle, $Switch180, $hPen)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $GUIWidth, $GUIHeight)
EndFunc ;==>_DrawArc
Func _ChangeDirection()
If $Angle = 0 Or $Angle = 180 Then
If Random(0, 1, 1) = 1 Then
$Angle = 90
Else
$Angle = 270
EndIf
ElseIf $Angle = 90 Or $Angle = 270 Then
If Random(0, 1, 1) = 1 Then
$Angle = 0
Else
$Angle = 180
EndIf
EndIf
If $iX >= $GUIWidth - $Size * 2 Then $Angle = 180
If $iY >= $GUIHeight - $Size * 2 Then $Angle = 270
If $iX <= 0 Then $Angle = 0
If $iY <= 0 Then $Angle = 90
If $Angle = 0 Then
$VectorX = $Size
$VectorY = 0
ElseIf $Angle = 90 Then
$VectorX = 0
$VectorY = $Size
ElseIf $Angle = 180 Then
$VectorX = $Size * - 1
$VectorY = 0
ElseIf $Angle = 270 Then
$VectorX = 0
$VectorY = $Size * - 1
EndIf
_GDIPlus_GraphicsDrawEllipse($hGraphics, $iX, $iY, $Size, $Size, $hPen)
EndFunc ;==>_ChangeDirection
Ich gehe nicht davon aus das das irgendjemand gebrauchen kann, aber nunja
Edit: Version mit Pfeiltastensteuerung
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
Global $GUIWidth = 400 ;Breite des Fensters
Global $GUIHeight = 400 ;Höhe des Fensters
Global $Size = 3 ;Durchmesser des Kreises der die einzelnen Bögen vervollständigt
Global $PenSize = 1 ;Randstärke der Linie
Global $Angle = Random(0, 3, 1) * 90 ;Startwinkel (Gültige Werte: 0°, 90°, 180°, 270°)
Global $iX = Random($Size, $GUIWidth / $Size - $Size, 1) * $Size ;X-Startkoordinate
Global $iY = Random($Size, $GUIHeight / $Size - $Size, 1) * $Size ;Y-Startkoordinate
Global $GUIColorBG = 0xFFFFFFFF ;Hintergrundfarbe der GUI
Global $LineColor = 0xFF000000 ;Farbe der geschlängelten Linie
Global $LEFT = False
Global $UP = False
Global $RIGHT = False
Global $DOWN = False
If $Angle = 0 Then
$RIGHT = True
Global $VectorX = $Size
Global $VectorY = 0
ElseIf $Angle = 90 Then
$DOWN = True
Global $VectorX = 0
Global $VectorY = $Size
ElseIf $Angle = 180 Then
$LEFT = True
Global $VectorX = $Size * - 1
Global $VectorY = 0
ElseIf $Angle = 270 Then
$UP = True
Global $VectorX = 0
Global $VectorY = $Size * - 1
EndIf
Global $Switch180 = 180
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Schlangenlinien", $GUIWidth, $GUIHeight)
GUISetState()
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $hGraphics)
Global $Buffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
_GDIPlus_GraphicsClear($Buffer, $GUIColorBG)
Global $hPen = _GDIPlus_PenCreate($LineColor, $PenSize)
[/autoit] [autoit][/autoit] [autoit]AdlibRegister("_DrawArc", 20)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_GraphicsDispose($Buffer)
_GDIPlus_ImageDispose($hBitmap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_Shutdown()
Exit
EndSwitch
If _IsPressed("25") Then
If $LEFT = False Then
$LEFT = True
$UP = False
$RIGHT = False
$DOWN = False
$Angle = 180
$VectorX = $Size * - 1
$VectorY = 0
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
Sleep(100)
EndIf
EndIf
If _IsPressed("26") Then
If $UP = False Then
$LEFT = False
$UP = True
$RIGHT = False
$DOWN = False
$Angle = 270
$VectorX = 0
$VectorY = $Size * - 1
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
Sleep(100)
EndIf
EndIf
If _IsPressed("27") Then
If $RIGHT = False Then
$LEFT = False
$UP = False
$RIGHT = True
$DOWN = False
$Angle = 0
$VectorX = $Size
$VectorY = 0
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
Sleep(100)
EndIf
EndIf
If _IsPressed("28") Then
If $DOWN = False Then
$LEFT = False
$UP = False
$RIGHT = False
$DOWN = True
$Angle = 90
$VectorX = 0
$VectorY = $Size
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
Sleep(100)
EndIf
EndIf
WEnd
Func _DrawArc()
#Region CollisionCheck
If $iX >= $GUIWidth - $Size * 2 And $Angle = 0 And $iY < $GUIHeight / 2 Then
$LEFT = False
$UP = False
$RIGHT = False
$DOWN = True
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size
$Angle = 90
EndIf
If $iX >= $GUIWidth - $Size * 2 And $Angle = 0 And $iY >= $GUIHeight / 2 Then
$LEFT = False
$UP = True
$RIGHT = False
$DOWN = False
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size * - 1
$Angle = 270
EndIf
If $iX <= 0 And $Angle = 180 And $iY < $GUIHeight / 2 Then
$LEFT = False
$UP = False
$RIGHT = False
$DOWN = True
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size
$Angle = 90
EndIf
If $iX <= 0 And $Angle = 180 And $iY >= $GUIHeight / 2 Then
$LEFT = False
$UP = True
$RIGHT = False
$DOWN = False
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = 0
$VectorY = $Size * - 1
$Angle = 270
EndIf
If $iY >= $GUIHeight - $Size * 2 And $Angle = 90 And $iX < $GUIWidth / 2 Then
$LEFT = False
$UP = False
$RIGHT = True
$DOWN = False
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size
$VectorY = 0
$Angle = 0
EndIf
If $iY >= $GUIHeight - $Size * 2 And $Angle = 90 And $iX >= $GUIWidth / 2 Then
$LEFT = True
$UP = False
$RIGHT = False
$DOWN = False
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size * - 1
$VectorY = 0
$Angle = 180
EndIf
If $iY <= 0 And $Angle = 270 And $iX < $GUIHeight / 2 Then
$LEFT = False
$UP = False
$RIGHT = True
$DOWN = False
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size
$VectorY = 0
$Angle = 0
EndIf
If $iY <= 0 And $Angle = 270 And $iX >= $GUIHeight / 2 Then
$LEFT = True
$UP = False
$RIGHT = False
$DOWN = False
_GDIPlus_GraphicsDrawEllipse($Buffer, $iX, $iY, $Size, $Size, $hPen)
$VectorX = $Size * - 1
$VectorY = 0
$Angle = 180
EndIf
#EndRegion CollisionCheck
$iX += $VectorX
$iY += $VectorY
$Switch180 *= -1
_GDIPlus_GraphicsDrawArc($Buffer, $iX, $iY, $Size, $Size, $Angle, $Switch180, $hPen)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $GUIWidth, $GUIHeight)
EndFunc ;==>_DrawArc
Edit2: Update
Bild verschwindet nicht mehr nachdem man das Fenster minimiert o.Ä. (Wird in Bitmap zwischengespeichert)