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. Moombas

Beiträge von Moombas

  • Skript mit F10 starten und mit F9 beenden

    • Moombas
    • 14. Februar 2024 um 13:46
    Zitat von DivineFaith

    Wenn ich "F10" Daraufhin drücke startet die While schleife von vorne, das ist mir aber vollkomen ausreichend.

    Dann mache z.B. anstatt

    AutoIt
    IF $Run Then
    	; Go to the top part of the Website
    	MouseWheel("up", 20) 
    		
    	; Execute the left Click on Overview
    	MouseClick("left", 210, 125) 
    		
    	; Pause for 2 Minutes
    	Sleep(120000) 
    Endif

    folgendes:

    AutoIt
    While $Run
    	sleep(100)
    Wend
    ; Go to the top part of the Website
    MouseWheel("up", 20) 
    		
    ; Execute the left Click on Overview
    MouseClick("left", 210, 125) 
    		
    ; Pause for 2 Minutes
    Sleep(120000) 
    Alles anzeigen

    Er bleibt dann solange in der While Schleife bis Run auf False gesetzt wird und macht dann mit den Sachen danach weiter.

  • Skript mit F10 starten und mit F9 beenden

    • Moombas
    • 14. Februar 2024 um 08:57

    Das Else kannst du weg lassen DivineFaith, das war wie gesagt nur zum Testen/Veranschaulichen. Und das Sleep sitzt an der falschen Stelle (muss vor das Wend)

    Ich empfehle dennoch mal an deiner Stelle das mit dem Webdriver, das SOLVE-SMART netterweise zu diesem Zweck einmal erläutert hat, umzubauen, einfach weil du dann auch unabhängig von Monitorauflösungen und sonstigen Faktoren bist, die zum Beispiel die Position der relevanten Felder beeinflusst oder ob die Webseite/Unterseite überhaupt geladen werden kann. Zudem sieht man dann keinen Cursor umherhuschen, was das ganze dann auch für den Betrachter etwas professioneller macht und teilweise ggf. sogar schneller, weil du nicht zwangsläufig 2Sekunden warten musst, sondern einfach wartest bis das entsprechende Element/Seite fertig geladen wurde.

    Ich vermeide best möglich MouseClick und dein aktuelles Skript kann auch dabei noch optimiert werden, da MouseClick auch Koordinaten unterstützt:

    AutoIt
    ; Set Variable on False so that the script will not start by itself
    $Run = False
    
    ; Set a Hotkey for starting changing the Dashboard
    HotKeySet("{F10}", "_start")
    
    ; Set a Hotkey for stopping changing the Dashboard
    HotKeySet("{F9}", "_pause") 
    
    While True
        If $Run Then 
    			MouseClick("left", 550,125)
    			
    			Sleep(150)
    			MouseClick("left", 550, 170) 
    			
    			; Pause for 2 Minutes for changing the Dashboard
    			Sleep(1200)
    			MouseClick("left", 460, 125)
    
    			MouseClick("left", 45, 185)
    
    			Sleep(150)
    			MouseClick("left", 45, 420) 
    			
    			; Pause for 2 Minutes 
    			Sleep(1200) 
    			
    			; Show lower part of the Website
    			MouseWheel("down", 10)
    			
    			; Pause for 2 Minutes
    			Sleep(1200)
    			
    			; Go to the top part of the Website
    			MouseWheel("up", 20) 
    			
    			; Pause just before clicking
    			MouseClick("left", 210, 125) 
    			
    			; Pause for 2 Minutes
    			Sleep(1100) ;1200-100			
    	EndIf
    	Sleep(100)
    WEnd
    
    Func _start()
    
        $Run = True
    EndFunc
    
    func _pause()
    
        $Run = False
    EndFunc
    Alles anzeigen

    Um aber weitergehend helfen zu können, müsste man die Webseite kennen bzw. ich selber nutze (bisher, mangels fehlender Anforderung) den Webdriver nicht, kann daher dabei dann nicht wirklich helfen.

  • Skript mit F10 starten und mit F9 beenden

    • Moombas
    • 14. Februar 2024 um 08:09
    Zitat von DivineFaith

    ja das problem ist mir auch erst jetzt klar geworden. Es gibt nicht zufällig einen Befehl der das Skript nur pausiert und nicht gleich beendet?

    Siehe mein Beispiel oben.

    Zitat von DivineFaith

    punkt 2: ja genau die Website wird über den Browser angezeigt. Wie funktioniert denn eine solche Webseitensteuerung?

    Siehe dazu den neuen Crashkurs von SOLVE-SMART : AutoIt WebDriver Crashkurs

  • Skript mit F10 starten und mit F9 beenden

    • Moombas
    • 13. Februar 2024 um 14:21

    Und um das ganze hier einmal mit einem funktionierendem minimal Beispiel zu füllen:

    AutoIt
    Opt('MustDeclareVars', 1)
    
    HotKeySet("{F10}", "_Start")
    HotKeySet("{F9}", "_Pause")
    HotKeySet("{ESC}", "_End"); just to provide a possibility to stop entire script, you can add a "password" prompt, if needed.
    
    Global $Run = False
    Global Const $time = 500
    
    While 1
    	If $Run then
    		Consolewrite('Runs and wait ' & $time & 'ms.' & @CRLF); here would be your code
    	Else
    		Consolewrite('Does not run but wait ' & $time & 'ms.' & @CRLF); Just for showing that the script is paused
    	EndIf
    	sleep($time)
    WEnd
    
    Func _Start()
    	$Run = True
    EndFunc
    
    Func _Pause()
    	$Run = False
    EndFunc
    
    Func _End()
    	Exit
    EndFunc
    Alles anzeigen
  • Skript mit F10 starten und mit F9 beenden

    • Moombas
    • 13. Februar 2024 um 07:55

    WhiteHorse : Ich glaube das er kein Exit haben will, sondern das Skript im Hintergrund (ohne Aktivität) weiterläuft.

  • Skript mit F10 starten und mit F9 beenden

    • Moombas
    • 12. Februar 2024 um 15:38

    Punkt 1: Dein Skript wie du es hier gepostet hast ist unvollständig, wir müssen schon eine funktionierende Variante hier haben. (kein Wend, kein EndFunc, kein Endif,...).

    Punkt 2: Ich empfehle anstatt der MouseMove geschichten hier auf evtl. eine direkte Webseitensteuerung zu gehen. Oder wird die Webseite nicht in einem Browser angezeigt?

  • Outlookex Schriftgröße ändern

    • Moombas
    • 9. Februar 2024 um 09:07

    Hier mal eine aktualisierte Funktion (mit den entsprechenden Einwänden von water und SOLVE-SMART ), einfach weil ich dabei bleibe das du mit einer Funktion flexibler für spätere Anpassungen bist:

    AutoIt
    Opt('MustDeclareVars', 1)
    #include<Array.au3>
    
    Global $aWeine[2][3] = [['02', 1, '2021er Silvaner, trocken'],['01', 1, '2022er']]
    
    ;~ ConsoleWrite(_Generate_HTML_Table($aWeine, False) & @CRLF); Tabelle ohne Rahmen und ohne Überschrift mit Default Farben etc.
    ;~ ConsoleWrite(_Generate_HTML_Table($aWeine, True, 'White', 1, 'solid', 'red', 'no', 10, 'black'));Tabelle mit weißer Schrift, Überschrift, schwarzem Hintergrund, rotem Rahmen mit runden Ecken. Sieht schueßlich aus, soll aber nur zeigen was passiert.
    ConsoleWrite(_Generate_HTML_Table($aWeine, True, 'black', 1, 'solid', 'black', 'collapse'));Dies sollte die Tabelle so erzeugen wie du es möchtest
    
    ;Parameter Erklärung (alle bis auf den ersten sind Optional!):
    ;1: Das Array mit allen Daten incl. Überschrift falls notwendig
    ;2: Definiert ob eine Überschrift vorhanden ist. Default: True (mit Überschirft). Bei False: keine Überschrift
    ;3: Die Farbe der Schrift. Default: Schwarz (black)
    ;4: Die Dicke des Rahmens. Default: 0 = kein Rahmen
    ;5: Die Art des Rahmens. Default: solid (weitere Arten findest du z.B. hier: https://www.w3schools.com/html/html_table_borders.asp)
    ;6: Die Farbe des Rahmens. Default: Schwarz (black)
    ;7: Rahmenlinien verschmelzen. Default: collapse (ja, verschmelzen, sonst: kannst du hier z.B. "no" nutzen damit dies nicht passiert)
    ;8: Radius des Rahmens für Runde Ecken. Default: 0 = keine Rundungen Achtung: Funktioniert nicht für den äußersten Rahmen, der bleibt eckig, wenn collapse an ist (Parameter 7)!
    ;9: Hintergrundfarbe der Zellen. Default: Weiß (white)
    ;Es wäre laut HTML noch mehr möglich aber ich denke damit sind 95% der normalen Anwendungsfälle abgedeckt.
    Func _Generate_HTML_Table(Const $aArray, Const $Headline = True, Const $FontColor = 'black', Const $Border = 0, Const $Borderstyle = 'solid', Const $BorderColor = 'black', Const $Collapse = 'collapse', Const $Radius = 0, $Background = 'white')
    Local Const $Rows = Ubound($aArray, $UBOUND_ROWS) - 1, $Cols = Ubound($aArray, $UBOUND_COLUMNS) - 1
    Local Const $style = 'style="color: ' & $FontColor & ';border: ' & $Border & 'px ' & $Borderstyle &' ' & $Bordercolor &'; border-collapse: ' & $Collapse & '; border-radius: ' & $Radius & 'px; background: ' & $Background & '"'
    Local $Value, $Start = 0
    Local $table = '<table ' & $style & '>' & @CRLF
    	If $Headline then
    		$Start = 1
    		$table &= @TAB & '<tr>' & @CRLF
    		For $Col = 0 to $Cols
    			$table &= @TAB & @TAB & '<th ' & $style & '>' & $aArray[0][$Col] & '</th>' & @CRLF
    		Next
    		$table &= @TAB & '</tr>' & @CRLF
    	EndIf
    
    	For $Row = $Start to $Rows
    		$table &= @TAB & '<tr>' & @CRLF
    		For $Col = 0 to $Cols
    			$Value  = BinaryToString(StringToBinary($aArray[$Row][$Col], 4), 1)
    			$table &= @TAB & @TAB & '<td ' & $style & '>' & $Value & '</td>' & @CRLF
    		Next
    		$table &= @TAB & '</tr>' & @CRLF
    	Next
    	$table &= '</table>' & @CRLF
    	Return $table
    EndFunc
    Alles anzeigen

    Ausgabe:

    Code
    <table style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">
        <tr>
            <th style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">02</th>
            <th style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">1</th>
            <th style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">2021er Silvaner, trocken</th>
        </tr>
        <tr>
            <td style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">01</td>
            <td style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">1</td>
            <td style="color: black;border: 1px solid black; border-collapse: collapse; border-radius: 0px; background: white">2022er</td>
        </tr>
    </table>
    Alles anzeigen
  • Outlookex Schriftgröße ändern

    • Moombas
    • 8. Februar 2024 um 15:47

    Kleine Verbesserung:

    Ich würd das ganze in eine separate Funktion auslagern:

    AutoIt
    ;....
    ; Array heißt $aWeine
    $AlleArtikel &= _Generate_HTML_Table($aWeine, False)
    
    ; Mail zusammen bauen
    ; Betreff funktioniert
    Global $Betreff = "Von Shop: " & $RechAdress
    ;MsgBox(0,"Betreff", $Betreff)
    
    ; Erstelle das E-Mail-Element
    $FontSize = $FontSize / $DefaultFontsize
    Local $oItems = _OL_ItemCreate($oOutlook, $olMailItem, "*\\" & $MailFolder1 & "\", "", _
    "Subject=" & $Betreff, "BodyFormat=" & $olFormatHTML, 'HTMLBody= <p style="font-size:' & $FontSize & 'em">' & $AlleArtikel & "</p>", "To=" & $To)
    
    ;...
    
    
    Func _Generate_HTML_Table(Const $aArray, Const $Headline = True)
    Local Const $Rows = Ubound($aArray, $UBOUND_ROWS) - 1, $Cols = Ubound($aArray, $UBOUND_COLUMNS) - 1
    Local $Start = 0
    Local $table = '<table>'
    	If $Headline then
    		$Start = 1
    		For $Col = 0 to $Cols
    			$table &= '<th>' & $aArray[0][$Col] & '</th>'
    		Next
    	EndIf
    	For $Row = $Start to $Rows
    		$table &= '<tr>'
    		For $Col = 0 to $Cols
    			$table &= '<td>' & $aArray[$Row][$Col] & '</td>'
    		Next
    		$table &= '</tr>'
    	Next
    	$table &= '</table>'
    	Return $table
    EndFunc
    Alles anzeigen
  • Outlookex Schriftgröße ändern

    • Moombas
    • 8. Februar 2024 um 15:38

    Ein kurzes Beispiel wäre hier:

    AutoIt
    Opt('MustDeclareVars', 1)
    #include<Array.au3>
    ; Array heißt $aWeine
    ;~ Global $AlleArtikel = _ArrayToString($aWeine, " ")
    Global $aWeine[2][3] = [['02', 1, '2021er Silvaner, trocken'],['01', 1, '2022er']]
    ;MsgBox(0,"Alle Artikel", $AlleArtikel)
    _ArrayDisplay($aWeine)
    ;~ For $Col = 0 to $Cols - 1 ;wird nur benötigt wenn die Spalten überschriften haben
    ;~ $AlleArtikel &= '<th>' & $aWeine[0][$Col] & '</th>'
    ;~ Next
    Global $Tabelle = '<table>'
        For $Row = 0 to Ubound($aWeine, $UBOUND_ROWS) - 1
            $Tabelle &= '<tr>'
            For $Col = 0 to Ubound($aWeine, $UBOUND_COLUMNS) - 1
                $Tabelle &= '<td>' & $aWeine[$Row][$Col] & '</td>'
            Next
            $Tabelle &= '</tr>'
        Next
        $Tabelle &= '</table>'
    ConsoleWrite($Tabelle & @CRLF)
    ;Ergebnis: <table><tr><td>02</td><td>1</td><td>2021er Silvaner, trocken</td></tr><tr><td>01</td><td>1</td><td>2022er</td></tr></table>
    Alles anzeigen
  • Code Kata - Galgenraten

    • Moombas
    • 8. Februar 2024 um 14:48

    Ich habe bei der GUI bewusst auf den "echten Galgen" verzichtet, da dies noch sehr weit greifende Anpassungen erfordern würde, besonders wenn die Anzahl der Versuche dynamisch ist.

  • Dateinamen in einem Ordner in Variable speichern

    • Moombas
    • 8. Februar 2024 um 08:10

    Dank gebührt hioer auch BugFix , da ich selber nicht an die _ArrayToString() Funktion gedacht und das dann per Schleife gemacht hätte :D
    Ich mags halt kompliziert XD

  • Code Kata - Galgenraten

    • Moombas
    • 7. Februar 2024 um 13:37

    Hmm, ich komme nicht drumrum das ich durchaus auch über einen dynamisch berechneten Wert für die Versuche nachgedacht habe, es aber verworfen habe und bei Stochastik wäre ich definitiv raus ;)

  • Dateinamen in einem Ordner in Variable speichern

    • Moombas
    • 7. Februar 2024 um 13:10

    Ein Blick in die Hilfe hilft beim Pfad, außerdem würde ich die Funktion ohne Rec nutzen. Also Q&D so:

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    
    $sAutoItDir = @ScriptDir & "\Data\"
    ConsoleWrite($sAutoItDir & @CRLF)
    
    ; A sorted list of all files and folders in the AutoIt installation
    Local $aArray = _FileListToArray($sAutoItDir, "*", $FLTA_FILESFOLDERS, True); True gibt den kompletten Pfad zurück
    
    _ArrayDelete($aArray, 0); entfernt den Counter
    _ArraySort($aArray); sortiert
    
    $Anhang = _ArrayToString($aArray, ";")
    
    MsgBox($MB_SYSTEMMODAL, "Test2", $Anhang)
    Alles anzeigen
  • Dateinamen in einem Ordner in Variable speichern

    • Moombas
    • 7. Februar 2024 um 11:43

    Meine Frage: Untereinander schaffst du deiner Aussage nach aber dann nciht deren Umwandlung.
    Stelle doch dein Skript hier bereit wo das der Fall ist und dann helfen wir dir gerne auf die Sprünge.

    Oder du nutzt den Hinweis von Bugfix mit deren Funktionen das am einfachsten zu bewerkstelligen ist ;)

  • Problem: git & StdoutRead

    • Moombas
    • 7. Februar 2024 um 11:37

    Ich kanns leider mangels nicht installiertem git nicht testen aber so wie du es jetzt hast, bekomme ich (ohne git) durchaus die entsprechende Rückgabe.

    Daher stellt sich mir die Frage ob es in diesem Fall anders zurück gegeben wird.

  • Code Kata - Galgenraten

    • Moombas
    • 7. Februar 2024 um 11:01

    Hier noch meine Variante mit GUI, wobei ich versucht habe so wenig wie möglich am ursprünglichen Code zu verändern (und ja, normalerweise würde ich start des Programms und GUI-Erstellung trennen, ka warum ich das diesmal anders gemacht habe^^):

    Spoiler anzeigen
    AutoIt
    Opt('MustDeclareVars', 1)
    
    #include "word-list.au3"
    #include <Array.au3>
    #include <AutoItConstants.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    
    ;~ GUI
    Global $Main, $LGreeting, $LWord, $EWord, $BEnter, $LInfo
    ;~ Script
    Global Const $aWords = _WordList()
    
    While 1
    	_start($aWords)
    	GUIDelete($Main)
    WEnd
    
    Func _GUICreate(Const $sTitle, Const $aLength, Const $iTries)
    Local $Word
    Local Const $Width  = 800
    Local Const $Height = $Width /2
    Local Const $LineHeight = 20
    Local Const $InputWidth = 80
    Local $Greeting = '+---------------+' & @CRLF & _
    				  '|--' & StringUpper($sTitle) &'--|' & @CRLF & _
    				  '+---------------+' & @CRLF & @CRLF & _
    				  'Errate ein Wort mit ' & $aLength[0][0] & ' Buchstaben'
    	For $Char = 1 to $aLength[0][0]
    		$Greeting &= ' _'
    		$Word &= ' _'
    	Next
    	$Greeting &=  ' , aus der Kategorie Software Entwicklung.' & @CRLF & _
    				  'Du hast ' & $iTries & ' Versuche, jeder falsche Buchstabe reduziert deine Versuche.' & @CRLF &@CRLF
    
    	$Main = GUICreate($sTitle, $Width, $Height)
    	$LGreeting = GUICtrlCreateLabel($Greeting, 0, 0, $Width, 6*$LineHeight, $SS_CENTER)
    	GUICtrlSetFont($LGreeting, Default, Default, Default, 'Courier New')
    
    	$LWord = GUICtrlCreateLabel('', 0, 6*$LineHeight, $Width, $LineHeight, $SS_CENTER)
    	GUICtrlSetFont($LWord, Default, Default, Default, 'Courier New')
    	_Try($aLength, $iTries)
    
    	$EWord = GUICtrlCreateEdit('', ($Width - (3*$InputWidth))/2, 8*$LineHeight, $InputWidth, $LineHeight, $SS_CENTER)
    	GUICtrlSetFont($EWord, Default, Default, Default, 'Courier New')
    
    	$BEnter = GUICtrlCreateButton('Versuchen', ($Width + $InputWidth)/2, 8*$LineHeight, $InputWidth, $LineHeight, BitOR($SS_CENTER, $BS_DEFPUSHBUTTON))
    	GUICtrlSetFont($BEnter, Default, Default, Default, 'Courier New')
    
    	$LInfo = GUICtrlCreateLabel('', 0, 10*$LineHeight, $Width, $LineHeight, $SS_CENTER)
    	GUICtrlSetFont($LInfo, Default, Default, Default, 'Courier New')
    
    	GUISetState(@SW_SHOW, $Main)
    EndFunc
    
    Func _start(Const $Words, $tries = 8)
    Local $input, $hit, $text, $used[0]
    Local $search = StringLower($Words[Random(0, Ubound($Words, $UBOUND_ROWS) - 1)])
    Local Const $Title  = 'Galgenraten'
    Local Const $Lost  = 'Verloren! Das gesuchte Wort war "' & $search & '".'
    Local Const $tried = 'Diesen Buchstaben hast du bereits ausprobiert!'
    Local Const $searchComplete = $search
    	$search = Stringsplit($search, '')
    
    		_ArrayColInsert($search, 1)
    	For $Row = 1 to $search[0][0]
    		$search[$Row][1] = '_'
    	Next
    
    	_GUICreate($Title, $search, $tries)
    	While 1
    		Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
    				Exit
    			Case $BEnter
    				$input = StringSplit(GUICtrlRead($EWord), '')
    				GUICtrlSetData($EWord, '')
    				GUICtrlSetData($LInfo, '')
    				If ($input[0] > $search[0][0]) and _
    					$input[0] <> 1 then
    					GUICtrlSetData($LInfo, 'Du hast ein zu langes Wort eingegeben. Versuche es nochmal.')
    					$tries -= 1
    					_Try($search, $tries)
    				ElseIf $input[0] > 1 Then
    					$text = ''
    					For $Char = 1 to $input[0]
    						$text &= $input[$Char]
    					Next
    					If $text = $searchComplete Then
    						_Won($tries)
    						Return True
    					Else
    						$tries -= 1
    						_Try($search, $tries)
    					EndIf
    				ElseIf $input[0] = 1 Then
    					$hit = false
    					If _ArraySearch($used, $input[1]) = -1 Then
    						_ArrayAdd($used, $input[1])
    						For $Char = 1 to $search[0][0]
    							If $input[1] = $search[$Char][0] then
    								$search[$Char][1] = $search[$Char][0]
    								$hit = true
    							EndIf
    						Next
    					Else
    						GUICtrlSetData($LInfo, $tried)
    						Consolewrite($tried & @CRLF)
    					EndIf
    					If not $hit Then $tries -= 1
    
    					_Try($search, $tries)
    				EndIf
    
    				If $tries = 0 then
    					GUICtrlSetData($LInfo, $Lost)
    					ConsoleWrite(@CRLF & $Lost & @CRLF)
    					Return False
    				Else
    					If _ArraySearch($search, '_') = -1 Then
    						_Won($tries)
    						Return True
    					EndIf
    				EndIf
    				ControlFocus($Main, '', $EWord)
            EndSwitch
    	WEnd
    EndFunc
    
    Func _Try(Const $aArray, Const $iTries)
    Local $text = 'Wort:'
    	For $Row = 1 to $aArray[0][0]
    		$text &= ' ' & $aArray[$Row][1]
    	Next
    	$text &= ' (' & $iTries & ' Versuche noch)' & @CRLF
    	GUICtrlSetData($LWord, $text)
    	ConsoleWrite($text)
    EndFunc
    
    Func _Won(Const $iTries)
    Local Const $Message = 'Gewonnen! ' & $iTries & ' Versuche übrig, gut gemacht.'
    	GUICtrlSetData($LInfo, $Message)
    	Consolewrite(@CRLF & $Message & @CRLF)
    EndFunc
    Alles anzeigen
  • Code Kata - Galgenraten

    • Moombas
    • 6. Februar 2024 um 15:41

    Hmm, ich weiß nicht warum aber ich befürchte das auch meine Abweichungen bewusst gewählt wurden aber schauen wir mal auf deine Auflistung XD

    Ich weiß schon warum ich früher mit div. Lehrern aneinander gerasselt bin :rofl:

  • Code Kata - Galgenraten

    • Moombas
    • 6. Februar 2024 um 13:48

    Schnuffel hab es mal in einen Spiler gepackt :P

  • Outlookex Schriftgröße ändern

    • Moombas
    • 6. Februar 2024 um 10:28

    Beratungsresistente lasse ich im Zweifelsfall auflaufen und das "Siehste, habe ich doch gesagt." verkniefe ich mir dann auch nicht :P

    Auch wenn sie es irgendwann hin bekommen, stelle ich gerne den zeitlichen Mehraufwand durch ihre "Lösung" in den Raum^^

    Ich bin ja so gemein.

  • Code Kata - Galgenraten

    • Moombas
    • 6. Februar 2024 um 08:35

    Hier ist meine Variante für Teil 1 (ggf. etwas umständlich und 1-2 Sachen zusätzlich XD).

    Ca. 52 Min.

    Edit: Hatte die Version ohne die Konsolenausgabe für doppelte Buchstaben kopiert (die Prüfung darauf war bereits enthalten) XD hier mal nachgeliefert.

    Spoiler anzeigen
    AutoIt
    Opt('MustDeclareVars', 1)
    
    #include "word-list.au3"
    #include <Array.au3>
    #include <AutoItConstants.au3>
    #include <MsgBoxConstants.au3>
    
    
    Global Const $aWords   = _WordList()
    
    
    _start($aWords)
    
    Func _start(Const $Words, $tries = 8)
    Local $input, $hit, $text, $used[0]
    Local $search = StringLower($Words[Random(0, Ubound($Words, $UBOUND_ROWS) - 1)])
    Local Const $Title  = 'Galgenraten'
    Local Const $Lost = @CRLF & 'Verloren! Das gesuchte Wort war "' & $search & '".' & @CRLF
    Local Const $searchComplete = $search
    	$search = Stringsplit($search, '')
    Local $Greeting = '+---------------+' & @CRLF & _
    				  '|--' & StringUpper($Title) &'--|' & @CRLF & _
    				  '+---------------+' & @CRLF & @CRLF & _
    				  'Errate ein Wort mit ' & $search[0] & ' Buchstaben'
    	For $Char = 1 to $search[0]
    		$Greeting &= ' _'
    	Next
    	$Greeting &=  ' , aus der Kategorie Software Entwicklung.' & @CRLF & _
    				  'Du hast ' & $tries & ' Versuche, jeder falsche Buchstabe reduziert deine Versuche.' & @CRLF &@CRLF
    	Consolewrite($Greeting)
    
    	_ArrayColInsert($search, 1)
    	For $Row = 1 to $search[0][0]
    		$search[$Row][1] = '_'
    	Next
    	While 1
    		$input = StringSplit(StringLower(InputBox($Title, 'Gib einen Buchstabe oder Wort ein.')), '')
    		If $input[0] = 0 Then Return False
    		If ($input[0] > $search[0][0]) and _
    			$input[0] <> 1 then
    			Consolewrite('Du hast ein zu langes Wort eingegeben. Versuche es nochmal.' & @CRLF)
    			$tries -= 1
    			_Try($search, $tries)
    		ElseIf $input[0] > 1 Then
    			$text = ''
    			For $Char = 1 to $input[0]
    				$text &= $input[$Char]
    			Next
    			If $text = $searchComplete Then
    				_Won($tries)
    				Return True
    			Else
    				$tries -= 1
    				_Try($search, $tries)
    			EndIf
    		ElseIf $input[0] = 1 Then
    			$hit = false
    			If _ArraySearch($used, $input[1]) = -1 Then
    				_ArrayAdd($used, $input[1])
    				For $Char = 1 to $search[0][0]
    					If $input[1] = $search[$Char][0] then
    						$search[$Char][1] = $search[$Char][0]
    						$hit = true
    					EndIf
    				Next
    			Else
    				Consolewrite(@CRLF & 'Diesen Buchstaben hast du bereits ausprobiert!' & @CRLF)
    			EndIf
    			If not $hit Then $tries -= 1
    
    			_Try($search, $tries)
    		EndIf
    
    		If $tries = 0 then
    			ConsoleWrite($Lost)
    			Return False
    		Else
    			If _ArraySearch($search, '_') = -1 Then
    				_Won($tries)
    				Return True
    			EndIf
    		EndIf
    	WEnd
    EndFunc
    
    Func _Try(Const $aArray, Const $iTries)
    Local $text = 'Wort:'
    	For $Row = 1 to $aArray[0][0]
    		$text &= ' ' & $aArray[$Row][1]
    	Next
    	$text &= ' (' & $iTries & ' Versuche noch)' & @CRLF
    	ConsoleWrite($text)
    EndFunc
    
    Func _Won(Const $iTries)
    	Consolewrite(@CRLF & 'Gewonnen! ' & $iTries & ' Versuche übrig, gut gemacht.' & @CRLF)
    EndFunc
    Alles anzeigen

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™