Hallo allerseits!
Ich habe folgende Frage: Wie kann ich dafür sorgen, dass im OnEventMode während eines Sleeps dafür sorgen, dass trotzdem auf Klick-Evente reagiert werden?
Danke schonmal im Voraus! ![]()
Hallo allerseits!
Ich habe folgende Frage: Wie kann ich dafür sorgen, dass im OnEventMode während eines Sleeps dafür sorgen, dass trotzdem auf Klick-Evente reagiert werden?
Danke schonmal im Voraus! ![]()
Spontan fällt mir dazu AdlibEnable/_AdlibEnable und GuiRegistermsg ein...
Oder statt Sleep(1000) _Sleep(1000) mit:
[autoit]
; _sleep by L3viathan2142
Func _sleep($ms)
$stamp=TimerInit()
Do
Sleep(1);Oder, wenn Prozessorlast kein Problem ist, weglassen
Until TimerDiff($stamp) >= $ms
EndFunc
Leider reagiert er auf das klicken eines Pics leider immern noch nicht:
; _sleep by L3viathan2142
Func _sleep($ms)
$stamp = TimerInit()
Do
Sleep(1)
Until TimerDiff($stamp) >= $ms
EndFunc ;==>_sleep
Func _Start()
Do
_Sleep(100)
Until $Karte_gespielt = 1
EndFunc ;==>_Start
Hast du die denn auch im OnEventMode?
Klar! Sonst hätte ich es oben nicht geschrieben ![]()
Hey,
bitte mal den gesamten Code posten, sonst kann man nur rumraten..
Gruß
Prajoss
Gut, ist aber ein bisschen lang, unsauber, auf italienisch und die Bilder und Sounds fehlen ![]()
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $Rueckseite = @ScriptDir & "\Karten\rueckseite.jpg", $Ausgewaehlt[8] = [0, 0, 0, 0, 0, 0, 0, 0], $Form_Label[8], $Karten[40], $Form_Pic[8], $Hand_Spieler1[3]
Global $Hand_Spieler2[3], $Hand_Spieler1_Pic[3], $Hand_Spieler2_Pic[3], $Moving_Ausnahme_Spieler2 = 0, $Karten_Daten[40][2], $Mischer = 0, $Zu_Bearbeiten[2]
Global $Karten_auf_der_Hand = 3, $Karte_gespielt = 0, $Ignoriere_Karte, $Ignoriere_Karte_Daten[2], $Aktuelle_Runde = 0, $Hand_Daten_Spieler1[3][2]
Global $Hand_Daten_Spieler2[3][2], $Feld_Daten[8][2]
For $i = 0 To 8
$Karten[$i] = @ScriptDir & "\Karten\denare\0" & $i + 1 & ".jpg"
$Karten_Daten[$i][0] = $i + 1
$Karten_Daten[$i][1] = 0
Next
$Karten[9] = @ScriptDir & "\Karten\denare\10.jpg"
$Karten_Daten[9][0] = 10
$Karten_Daten[9][1] = 0
For $i = 10 To 18
$Karten[$i] = @ScriptDir & "\Karten\bastone\0" & $i - 9 & ".jpg"
$Karten_Daten[$i][0] = $i - 9
$Karten_Daten[$i][1] = 1
Next
$Karten[19] = @ScriptDir & "\Karten\bastone\10.jpg"
$Karten_Daten[19][0] = 20
$Karten_Daten[19][1] = 1
For $i = 20 To 28
$Karten[$i] = @ScriptDir & "\Karten\coppa\0" & $i - 19 & ".jpg"
$Karten_Daten[$i][0] = $i - 19
$Karten_Daten[$i][1] = 2
Next
$Karten[29] = @ScriptDir & "\Karten\coppa\10.jpg"
$Karten_Daten[29][0] = 10
$Karten_Daten[29][1] = 2
For $i = 30 To 38
$Karten[$i] = @ScriptDir & "\Karten\spada\0" & $i - 29 & ".jpg"
$Karten_Daten[$i][0] = $i - 29
$Karten_Daten[$i][1] = 3
Next
$Karten[39] = @ScriptDir & "\Karten\spada\10.jpg"
$Karten_Daten[39][0] = 10
$Karten_Daten[39][1] = 3
$Kartenstapel = GUICreate("mazzo di carte", 254, 226, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose")
$Kartenstapel_Pic1 = GUICtrlCreatePic("", 0, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$Kartenstapel_Pic2 = GUICtrlCreatePic($Rueckseite, 128, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$Kartenstapel_Button1 = GUICtrlCreateButton("prendi una carta", 0, 200, 253, 25, 0)
GUICtrlSetOnEvent(-1, "Kartenstapel_Button1Click")
GUISetState()
Func _ArrayShuffle()
Local $temp, $rand, $temp2, $temp3
For $i = 0 To 39
$temp = $Karten[$i]
$temp2 = $Karten_Daten[$i][0]
$temp3 = $Karten_Daten[$i][1]
$rand = Random(0, 39, 1)
$Karten[$i] = $Karten[$rand]
$Karten[$rand] = $temp
$Karten_Daten[$i][0] = $Karten_Daten[$rand][0]
$Karten_Daten[$rand][0] = $temp2
$Karten_Daten[$i][1] = $Karten_Daten[$rand][1]
$Karten_Daten[$rand][1] = $temp3
Next
EndFunc ;==>_ArrayShuffle
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Form = GUICreate("Scopa", 511, 649, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "FormMinimize")
GUISetOnEvent($GUI_EVENT_RESTORE, "FormRestore")
$Form_Pic[0] = GUICtrlCreatePic("", 0, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic1Click")
$Form_Pic[1] = GUICtrlCreatePic("", 128, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic2Click")
$Form_Pic[2] = GUICtrlCreatePic("", 256, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic3Click")
$Form_Pic[3] = GUICtrlCreatePic("", 384, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic4Click")
$Form_Pic[4] = GUICtrlCreatePic("", 0, 224, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic5Click")
$Form_Pic[5] = GUICtrlCreatePic("", 128, 224, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic6Click")
$Form_Pic[6] = GUICtrlCreatePic("", 256, 224, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic7Click")
$Form_Pic[7] = GUICtrlCreatePic("", 384, 224, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Form_Pic8Click")
$Form_Label[0] = GUICtrlCreateLabel("", 0, 200, 124, 17)
$Form_Label[1] = GUICtrlCreateLabel("", 128, 200, 124, 17)
$Form_Label[2] = GUICtrlCreateLabel("", 256, 200, 124, 17)
$Form_Label[3] = GUICtrlCreateLabel("", 384, 200, 124, 17)
$Form_Label[4] = GUICtrlCreateLabel("", 0, 424, 124, 17)
$Form_Label[5] = GUICtrlCreateLabel("", 128, 424, 124, 17)
$Form_Label[6] = GUICtrlCreateLabel("", 256, 424, 124, 17)
$Form_Label[7] = GUICtrlCreateLabel("", 384, 424, 124, 17)
For $i = 0 To 7
GUICtrlSetBkColor($Form_Label[$i], 0xFFFFFF)
Next
$Form_Stapel1 = GUICtrlCreatePic("", 0, 448, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "_Show_Stapel")
$Form_Stapel2 = GUICtrlCreatePic("", 384, 448, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "_Zurueck")
$Form_StatusLabel1 = GUICtrlCreateLabel("0", 144, 512, 46, 49, $SS_CENTER)
GUICtrlSetFont(-1, 24, 800, 0, "Arial Black")
$Form_StatusLabel2 = GUICtrlCreateLabel("0", 320, 512, 46, 49, $SS_CENTER)
GUICtrlSetFont(-1, 24, 800, 0, "Arial Black")
$Form_Doppelpunkt_Label = GUICtrlCreateLabel(":", 232, 512, 46, 49, $SS_CENTER)
GUICtrlSetFont(-1, 24, 800, 0, "Arial Black")
GUIRegisterMsg($WM_MOVE, "_Moving")
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func _Karte_Computer_zufall($Random)
$Random2 = Random(0, 39, 1)
If $Random = $Random2 Then
_Karte_Computer_zufall($Random)
Else
Return $Random2
EndIf
EndFunc ;==>_Karte_Computer_zufall
Func Kartenstapel_Button1Click()
Switch GUICtrlRead($Kartenstapel_Button1)
Case "prendi una carta"
GUICtrlSetState($Kartenstapel_Button1, $GUI_DISABLE)
SoundPlay(@ScriptDir & "\Sound\ziehen1.wav")
$Random = Random(0, 39, 1)
GUICtrlSetImage($Kartenstapel_Pic1, $Karten[$Random])
Sleep(1000)
SoundPlay(@ScriptDir & "\Sound\ziehen2.wav")
$Random2 = _Karte_Computer_zufall($Random)
GUICtrlSetImage($Kartenstapel_Pic2, $Karten[$Random2])
Sleep(1000)
If $Karten_Daten[$Random][0] > $Karten_Daten[$Random2][0] Then
MsgBox(64, "Scopa", "Io debbo mischiare!")
$Mischer = 2
GUICtrlSetImage($Kartenstapel_Pic1, $Rueckseite)
GUICtrlSetImage($Kartenstapel_Pic2, "")
GUICtrlSetData($Kartenstapel_Button1, "mischiare")
Kartenstapel_Button1Click()
ElseIf $Karten_Daten[$Random][0] < $Karten_Daten[$Random2][0] Then
MsgBox(64, "Scopa", "Tu devi mischiare!")
$Mischer = 1
GUICtrlSetImage($Kartenstapel_Pic1, $Rueckseite)
GUICtrlSetImage($Kartenstapel_Pic2, "")
GUICtrlSetState($Kartenstapel_Button1, $GUI_ENABLE)
GUICtrlSetData($Kartenstapel_Button1, "mischiare")
ElseIf $Karten_Daten[$Random][0] = $Karten_Daten[$Random2][0] Then
MsgBox(64, "Scopa", "Dobbiamo tirare di nuovo!")
GUICtrlSetImage($Kartenstapel_Pic1, "")
GUICtrlSetImage($Kartenstapel_Pic2, $Rueckseite)
GUICtrlSetState($Kartenstapel_Button1, $GUI_ENABLE)
GUICtrlSetData($Kartenstapel_Button1, "prendi una carta")
EndIf
Case "mischiare"
GUICtrlSetState($Kartenstapel_Button1, $GUI_DISABLE)
SoundPlay(@ScriptDir & "\Sound\mischen.wav")
_ArrayShuffle()
For $i = 0 To 3
GUICtrlSetImage($Form_Pic[$i], $Karten[$i])
$Feld_Daten[$i][0] = $Karten_Daten[$i][0]
$Feld_Daten[$i][1] = $Karten_Daten[$i][1]
Next
Sleep(5100)
For $i = 0 To 2
$Hand_Spieler1[$i] = GUICreate("", 126, 201, 5, $i * (@DesktopHeight / 3), BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
$Hand_Spieler1_Pic[$i] = GUICtrlCreatePic($Karten[$i + 4], 0, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$Hand_Daten_Spieler1[$i][0] = $Karten_Daten[$i + 4][0]
$Hand_Daten_Spieler1[$i][1] = $Karten_Daten[$i + 4][1]
$Hand_Spieler2[$i] = GUICreate("", 126, 201, @DesktopWidth - 131, $i * (@DesktopHeight / 3), BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
$Hand_Spieler2_Pic[$i] = GUICtrlCreatePic($Rueckseite, 0, 0, 125, 200, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$Hand_Daten_Spieler2[$i][0] = $Karten_Daten[$i + 7][0]
$Hand_Daten_Spieler2[$i][1] = $Karten_Daten[$i + 7][1]
Next
GUICtrlSetData($Kartenstapel_Button1, "alsare")
If $Mischer = 2 Then
GUICtrlSetState($Kartenstapel_Button1, $GUI_ENABLE)
Else
Kartenstapel_Button1Click()
EndIf
Case "alsare"
GUICtrlSetState($Kartenstapel_Button1, $GUI_DISABLE)
SoundPlay(@ScriptDir & "\Sound\heben.wav")
GUICtrlSetImage($Kartenstapel_Pic2, $Rueckseite)
Sleep(1000)
GUICtrlSetImage($Kartenstapel_Pic1, "")
Sleep(1000)
GUICtrlDelete($Kartenstapel_Pic1)
For $i = 126 To 0 Step -2
GUICtrlSetPos($Kartenstapel_Pic2, $i, 0)
GUICtrlSetPos($Kartenstapel_Button1, 0, 200, $i + 125, 25)
Sleep(50)
Next
Switch $Mischer
Case 1
WinMove($Kartenstapel, "", 0, 0, 128, Default, 5)
Case 2
WinMove($Kartenstapel, "", @DesktopWidth - 128, 0, 128, Default, 5)
EndSwitch
GUICtrlSetData($Kartenstapel_Button1, "distribuire")
Switch $Mischer
Case 1
GUICtrlSetState($Kartenstapel_Button1, $GUI_ENABLE)
Case 2
Sleep(500)
Kartenstapel_Button1Click()
EndSwitch
Case "distribuire"
GUICtrlSetState($Kartenstapel_Button1, $GUI_DISABLE)
GUISetState(@SW_SHOW, $Form)
GUISetState(@SW_HIDE, $Kartenstapel)
For $i = 0 To 2
GUISetState(@SW_SHOW, $Hand_Spieler1[$i])
GUISetState(@SW_SHOW, $Hand_Spieler2[$i])
Next
_Start()
EndSwitch
EndFunc ;==>Kartenstapel_Button1Click
Func _Show_Stapel()
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Show_Stapel
[/autoit] [autoit][/autoit] [autoit]Func _Zurueck()
For $i = 0 To 2
WinMove($Hand_Spieler2[$i], "", @DesktopWidth - 131, $i * (@DesktopHeight / 3))
Next
MsgBox(48, "Scopa", "Per favore lascia i mei carte!")
EndFunc ;==>_Zurueck
Func _Moving($hWnd)
Switch $hWnd
Case $Hand_Spieler1[0]
_Check($Hand_Spieler1[0])
Case $Hand_Spieler1[1]
_Check($Hand_Spieler1[1])
Case $Hand_Spieler1[2]
_Check($Hand_Spieler1[2])
Case $Hand_Spieler2[0]
If $Moving_Ausnahme_Spieler2 = 0 Then _Zurueck()
Case $Hand_Spieler2[1]
If $Moving_Ausnahme_Spieler2 = 0 Then _Zurueck()
Case $Hand_Spieler2[2]
If $Moving_Ausnahme_Spieler2 = 0 Then _Zurueck()
EndSwitch
EndFunc ;==>_Moving
Func _Check($hWnd)
Local $Pos = WinGetPos($hWnd), $Main_Pos = WinGetPos($Form)
If $Pos[0] > $Main_Pos[0] And $Pos[0] < $Main_Pos[0] + $Main_Pos[2] And $Pos[1] > $Main_Pos[1] And $Pos[1] < $Main_Pos[1] + $Main_Pos[3] Then
If $Karte_gespielt = 1 And $Ignoriere_Karte <> $hWnd Then
MsgBox(64, "Scopa", "Aspetta!")
Switch $hWnd
Case $Hand_Spieler1[0]
WinMove($Hand_Spieler1[0], "", 0, 0, Default, Default, 10)
Case $Hand_Spieler1[1]
WinMove($Hand_Spieler1[1], "", 0, @DesktopHeight / 3, Default, Default, 10)
Case $Hand_Spieler1[2]
WinMove($Hand_Spieler1[2], "", 0, @DesktopHeight / 3 * 2, Default, Default, 10)
EndSwitch
Else
$Karte_gespielt = 1
$Ignoriere_Karte = $hWnd
Switch $Ignoriere_Karte
Case $Hand_Spieler1[0]
$Zu_Bearbeiten[0] = $Hand_Daten_Spieler1[0][0]
$Zu_Bearbeiten[1] = $Hand_Daten_Spieler1[0][1]
Case $Hand_Spieler1[1]
$Zu_Bearbeiten[0] = $Hand_Daten_Spieler1[1][0]
$Zu_Bearbeiten[1] = $Hand_Daten_Spieler1[1][1]
Case $Hand_Spieler1[2]
$Zu_Bearbeiten[0] = $Hand_Daten_Spieler1[2][0]
$Zu_Bearbeiten[1] = $Hand_Daten_Spieler1[2][1]
EndSwitch
EndIf
Else
If $Ignoriere_Karte = $hWnd Then
MsgBox(48, "Scopa", "Per favore lacia la carta sul tavolo!")
WinMove($hWnd, "", $Main_Pos[0] + 100, $Main_Pos[1] + 100, Default, Default, 10)
EndIf
EndIf
EndFunc ;==>_Check
Func _sleep($ms)
$stamp = TimerInit()
Do
Sleep(1)
Until TimerDiff($stamp) >= $ms
EndFunc ;==>_sleep
Func _Start()
Switch $Mischer
Case 1
For $i = 1 To 6
Next
Case 2
For $i = 1 To 6
$Runde = $i
MsgBox(64, "Scopa", "Tocca a te!")
Do
_sleep(100)
Until $Karte_gespielt = 1
MsgBox(0, "", $Zu_Bearbeiten[0] & " " & $Zu_Bearbeiten[1])
$Karte_gespielt = 0
Local $Zahl = 0
For $i = 0 To 7
MsgBox(0, $Ausgewaehlt[$i], $Zahl & " " & $Feld_Daten[$i][0])
If $Ausgewaehlt[$i] = 1 Then $Zahl += $Feld_Daten[$i][0]
Next
If $Zahl = $Zu_Bearbeiten[0] Then
MsgBox(64, "Scopa", "Non poi prendere queste carte.")
Else
MsgBox(0, "", "genommen")
EndIf
Next
EndSwitch
EndFunc ;==>_Start
Func Form_Pic1Click()
Form_PicClick(1)
EndFunc ;==>Form_Pic1Click
Func Form_Pic2Click()
Form_PicClick(2)
EndFunc ;==>Form_Pic2Click
Func Form_Pic3Click()
Form_PicClick(3)
EndFunc ;==>Form_Pic3Click
Func Form_Pic4Click()
Form_PicClick(4)
EndFunc ;==>Form_Pic4Click
Func Form_Pic5Click()
Form_PicClick(5)
EndFunc ;==>Form_Pic5Click
Func Form_Pic6Click()
Form_PicClick(6)
EndFunc ;==>Form_Pic6Click
Func Form_Pic7Click()
Form_PicClick(7)
EndFunc ;==>Form_Pic7Click
Func Form_Pic8Click()
Form_PicClick(8)
EndFunc ;==>Form_Pic8Click
Func Form_PicClick($Pic)
Switch $Ausgewaehlt[$Pic - 1]
Case 0
$Ausgewaehlt[$Pic - 1] = 1
GUICtrlSetBkColor($Form_Label[$Pic - 1], 0x00FF00)
Case 1
$Ausgewaehlt[$Pic - 1] = 0
GUICtrlSetBkColor($Form_Label[$Pic - 1], 0xFFFFFF)
EndSwitch
EndFunc ;==>Form_PicClick
Func FormClose()
If MsgBox(292, "Scopa", "Veramente chiudere?") = 6 Then Exit
EndFunc ;==>FormClose
Func FormMinimize()
For $i = 0 To 2
GUISetState(@SW_HIDE, $Hand_Spieler1[$i])
GUISetState(@SW_HIDE, $Hand_Spieler2[$i])
Next
EndFunc ;==>FormMinimize
Func FormRestore()
For $i = 0 To 2
GUISetState(@SW_SHOW, $Hand_Spieler1[$i])
GUISetState(@SW_SHOW, $Hand_Spieler2[$i])
Next
EndFunc ;==>FormRestore
Muss noch ein bisschen rumschrauben, aber er läuft soweit ![]()
Gedacht ist es so: Also bis die Karte gepielt wurde, soll der Computer warten, dann soll er schauen, ob der Spieler die Karten aufnehmen kann (werden erst ausgewählt: Das Label färbt sich grün), dann wird die Karte gespielt...