Würfeln in GDI+

  • Hi, ich hab ein kleines Programm geschrieben, mit dem man mit einem Würfel würfeln kann.
    Bis jetzt ist es zwar noch nicht so nützlich, aber man könnte es in ein Spiel einbauen.

    Hier ist das Skript, allerdings braucht man die Bilder noch dazu:

    Spoiler anzeigen
    [autoit]


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

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

    Global $GUIWidth = 700
    Global $GUIHeight = 700
    Global $WurfeliX
    Global $WurfeliY
    Global $WurfelStepiX = Random(25, 30)
    Global $WurfelStepiY = Random(15, 20)
    Global $WurfelWidth = 408
    Global $WurfelHeight = 392
    Global $WurfelPhase = 1 ;1, 2 oder 3
    Global $WurfZeit = 0
    Global $Zahl[6]
    Global $VZahl[6]
    Global $WurfelBewegtSich = False
    Global $RandomNumber = Random(1, 6, 1)
    Global $MaxWurfZeit = 255

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

    _GDIPlus_Startup()

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

    $GUI = GUICreate("Würfel", $GUIWidth, $GUIHeight, -1, -1)
    GUISetState()

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

    Opt("MouseCoordMode", 2)

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

    $GDIPlusGUI = _GDIPlus_GraphicsCreateFromHWND($GUI)
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $GDIPlusGUI)
    $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
    _GDIPlus_GraphicsClear($Buffer, 0xFFFFFFFF)

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

    GUIRegisterMsg($WM_PAINT, "_WM_PAINT")

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

    _GDIPlus_GraphicsDrawImageRect($GDIPlusGUI, $Bitmap, 0, 0, $GUIWidth, $GUIHeight)

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

    #Region ## Bilder reinladen ##

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

    $WurfelBewegung1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\data\Würfel1verwischt.png")
    $WurfelBewegung2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\data\Würfel2verwischt.png")
    $WurfelBewegung3 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\data\Würfel3verwischt.png")
    For $i = 1 To 6 Step 1
    $Zahl[$i - 1] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\data\" & $i & ".png")
    Next
    For $i = 1 To 6 Step 1
    $VZahl[$i - 1] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\data\v" & $i & ".png")
    Next

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

    #EndRegion ## Bilder reinladen ##

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    _Exit()
    Case $GUI_EVENT_RESTORE
    _WM_PAINT()
    Case $GUI_EVENT_PRIMARYDOWN
    If $WurfelBewegtSich = False Then
    $WurfelBewegtSich = True
    $WurfZeit = 0
    $WurfelStepiX = Random(25, 30)
    $WurfelStepiY = Random(15, 20)
    $RandomNumber = Random(1, 6, 1)
    $WurfeliX = MouseGetPos(0) - $WurfelWidth / 2
    $WurfeliY = MouseGetPos(1) - $WurfelHeight / 2
    AdlibRegister("_Draw", 70)
    EndIf
    EndSwitch
    WEnd

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

    Func _Exit()
    AdlibUnRegister()
    #Region ## Bilder Disposen ##
    _GDIPlus_ImageDispose($WurfelBewegung1)
    _GDIPlus_ImageDispose($WurfelBewegung2)
    _GDIPlus_ImageDispose($WurfelBewegung3)
    For $i = 1 To 6 Step 1
    _GDIPlus_ImageDispose($Zahl[$i - 1])
    Next
    For $i = 1 To 6 Step 1
    _GDIPlus_ImageDispose($VZahl[$i - 1])
    Next
    #EndRegion ## Bilder Disposen ##

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

    _GDIPlus_GraphicsDispose($Buffer)
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_GraphicsDispose($GDIPlusGUI)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

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

    Func _Draw()
    If $WurfZeit < 250 Then
    _GDIPlus_GraphicsClear($Buffer, 0xFFFFFFFF)
    If $WurfelPhase = 1 Then
    _GDIPlus_GraphicsDrawImageRect($Buffer, $WurfelBewegung1, $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    $WurfelPhase = 2
    ElseIf $WurfelPhase = 2 Then
    _GDIPlus_GraphicsDrawImageRect($Buffer, $WurfelBewegung2, $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    $WurfelPhase = 3
    ElseIf $WurfelPhase = 3 Then
    _GDIPlus_GraphicsDrawImageRect($Buffer, $WurfelBewegung3, $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    $WurfelPhase = 1
    EndIf

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

    _GDIPlus_GraphicsDrawImageRect($GDIPlusGUI, $Bitmap, 0, 0, $GUIWidth, $GUIHeight)

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

    $WurfeliX += $WurfelStepiX
    $WurfeliY += $WurfelStepiY
    If $WurfeliX <= 0 - 130 Then $WurfelStepiX *= -1
    If $WurfeliX >= $GUIWidth - 270 Then $WurfelStepiX *= -1
    If $WurfeliY <= 0 - 130 Then $WurfelStepiY *= -1
    If $WurfeliY >= $GUIHeight - 270 Then $WurfelStepiY *= -1

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

    $WurfZeit += 1

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

    EndIf

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

    If $WurfZeit = $MaxWurfZeit Then
    $WurfZeit += 0
    Else
    $WurfZeit += 1
    EndIf

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

    If $WurfZeit = 70 Then
    If $WurfelStepiX > 0 Then
    $WurfelStepiX -= 10
    ElseIf $WurfelStepiX < 0 Then
    $WurfelStepiX += 10
    EndIf

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

    If $WurfelStepiY > 0 Then
    $WurfelStepiY -= 10
    ElseIf $WurfelStepiY < 0 Then
    $WurfelStepiY += 10
    EndIf

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

    $WurfZeit = 200
    EndIf

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

    If $WurfZeit = 230 Then
    If $WurfelStepiX > 0 Then
    $WurfelStepiX = 7
    ElseIf $WurfelStepiX < 0 Then
    $WurfelStepiX = -7
    EndIf

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

    If $WurfelStepiY > 0 Then
    $WurfelStepiY = 7
    ElseIf $WurfelStepiY < 0 Then
    $WurfelStepiY = -7
    EndIf
    EndIf

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

    If $WurfZeit = 250 Then
    _GDIPlus_GraphicsClear($Buffer, 0xFFFFFFFF)
    $WurfelStepiX = 0
    $WurfelStepiY = 0
    If $RandomNumber = 1 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $VZahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 2 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $VZahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 3 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $VZahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 4 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $VZahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 5 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $VZahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 6 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $VZahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    _WM_PAINT()
    EndIf

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

    If $WurfZeit = $MaxWurfZeit Then
    $WurfelStepiX = 0
    $WurfelStepiY = 0
    If $RandomNumber = 1 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $Zahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 2 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $Zahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 3 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $Zahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 4 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $Zahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 5 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $Zahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    If $RandomNumber = 6 Then _GDIPlus_GraphicsDrawImageRect($Buffer, $Zahl[$RandomNumber - 1], $WurfeliX, $WurfeliY, $WurfelWidth, $WurfelHeight)
    _WM_PAINT()
    $WurfelBewegtSich = False
    AdlibUnRegister("_Draw")
    EndIf
    EndFunc ;==>_Draw

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

    Func _WM_PAINT()
    _GDIPlus_GraphicsDrawImageRect($GDIPlusGUI, $Bitmap, 0, 0, $GUIWidth, $GUIHeight)
    EndFunc ;==>_WM_PAINT

    [/autoit]

    Im Anhang hab ich noch das Skript mit den Bildern.
    Hoffe auf Feedback :D