Jump to content

I need help checking an array.


Recommended Posts

Here is the code:

#include <GuiConstants.au3>
#include <Array.au3>
$Gui = GUICreate("Hangman", 299, 387, (@DesktopWidth - 299) / 2, (@DesktopHeight - 387) / 2)
$Pic = GUICtrlCreatePic("1.bmp", 10, 20, 280, 260)
GUICtrlCreateLabel("Used Letters:", 10, 320, 65, 20)
$Label_Used_Letters = GUICtrlCreateLabel("", 72, 320, 150, 20)
$Input = GUICtrlCreateInput("", 10, 350, 130, 20)
GUICtrlSetLimit($Input, 1)
$Button_Enter = GUICtrlCreateButton("Enter", 160, 350, 130, 20)
_setletters()
GUISetState(@SW_SHOW, $Gui)
Func _enter()
    ControlClick("Hangman", "Enter", 7)
EndFunc  ;==>_enter
HotKeySet("{ENTER}", "_enter")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func _setletters()
    Global $random = Random(1, 25)
;Global $string = FileReadLine("wordlist.txt", 3); using the 3rd word(seattle) for testing
    Global $string = "seattle"
    Global $stringsplit = StringSplit($string, "")
    Global $labels[20]
    Global $c
    For $c = 1 To $stringsplit[0]
        $labels[$c] = GUICtrlCreateLabel("_", $c * 10, 290, 10, 20)
    Next
    Return $stringsplit[0]
EndFunc  ;==>_setletters
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$lettersUsed = ""
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $Button_Enter
            If GUICtrlRead($Input) <> "" Then
                Local $Read_Input = GUICtrlRead($Input)
                If Not _isLetterUsed() Then
                    Global $Count = 0
                    Do
                        $Count = $Count + 1
                        Global $StringInStr = StringInStr($string, $Read_Input, 0, $Count)
;Help;Here;Here;Here;Here;Here;;;;;;;;;;;;;;;;;;;;;;;Help Here
                        If Not GUICtrlSetData($labels[$StringInStr], $Read_Input) Then
                    ;If Not $StringInStr Then
                            MsgBox(0, "failed", "Failed")
                        Else
                            MsgBox(0, "passed", "passed")
                        EndIf
;Help;Here;Here;Here;Here;Here;;;;;;;;;;;;;;;;;;;;;;;Help Here
                        GUICtrlSetData($labels[$StringInStr], $Read_Input)
                    Until $Count = $stringsplit[0]
                    
                EndIf
            EndIf
            GUICtrlSetData($Input, "")
            GUICtrlSetState($Input, $Gui_focus)
    EndSelect
WEnd
Exit
Func _isLetterUsed()
    If StringInStr($lettersUsed, $Read_Input) Then
        MsgBox(0, "", "letter used")
        Return 1
    Else
        $lettersUsed = $lettersUsed & $Read_Input
        GUICtrlSetData($Label_Used_Letters, $lettersUsed)
        
    EndIf
EndFunc  ;==>_isLetterUsed

I marked the area I need Help with. I want a way to know if the user typed a letter that is not in the word. The problem is that I am getting 7 msgboxs, One for every letter in the word. I want one msgbox that says "passed" if the letter is in the word and I want one msgbox if the letter is not in the word that says "failed".

Can someone show me how to trap when the user types in a bad letter. If so you have my thanks.

.

Link to comment
Share on other sites

$passed = 0
Do
    $Count = $Count + 1
    Global $StringInStr = StringInStr($string, $Read_Input, 0, $Count)
    If GUICtrlSetData($labels[$StringInStr], $Read_Input) Then
         $passed = 1
    EndIf
    GUICtrlSetData($labels[$StringInStr], $Read_Input)
Until $Count = $stringsplit[0]
if($passed) Then
    MsgBox(0, "passed", "passed")
Else
    MsgBox(0, "failed", "Failed")
EndIf

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Link to comment
Share on other sites

#include <GuiConstants.au3>
#include <Array.au3>
$Gui = GUICreate("Hangman", 299, 387, (@DesktopWidth - 299) / 2, (@DesktopHeight - 387) / 2)
$Pic = GUICtrlCreatePic("1.bmp", 10, 20, 280, 260)
GUICtrlCreateLabel("Used Letters:", 10, 320, 65, 20)
$Label_Used_Letters = GUICtrlCreateLabel("", 72, 320, 150, 20)
$Input = GUICtrlCreateInput("", 10, 350, 130, 20)
GUICtrlSetLimit($Input, 1)
$Button_Enter = GUICtrlCreateButton("Enter", 160, 350, 130, 20)
_setletters()
GUISetState(@SW_SHOW, $Gui)
Func _enter()
  ControlClick("Hangman", "Enter", 7)
EndFunc  ;==>_enter
HotKeySet("{ENTER}", "_enter")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func _setletters()
  Global $random = Random(1, 25)
 ;Global $string = FileReadLine("wordlist.txt", 3); using the 3rd word(seattle) for testing
  Global $string = "seattle"
  Global $stringsplit = StringSplit($string, "")
  Global $labels[20]
  Global $c
  For $c = 1 To $stringsplit[0]
    $labels[$c] = GUICtrlCreateLabel("_", $c * 10, 290, 10, 20)
  Next
  Return $stringsplit[0]
EndFunc  ;==>_setletters
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$lettersUsed = ""
While 1
  $msg = GUIGetMsg()
  Select
    Case $msg = $GUI_EVENT_CLOSE
      ExitLoop
    Case $msg = $Button_Enter
      If GUICtrlRead($Input) <> "" Then
        Local $Read_Input = GUICtrlRead($Input)
        If _isLetterValid($Read_Input) Then
          MsgBox(0, "", "passed")
        Else
          MsgBox(0, "", "failed")
        EndIf
        If Not _isLetterUsed() Then
;~         MsgBox(0, "passed", "passed")
          Global $Count = 0
          Do
            $Count = $Count + 1
            Global $StringInStr = StringInStr($string, $Read_Input, 0, $Count)
           ;Help;Here;Here;Here;Here;Here;;;;;;;;;;;;;;;;;;;;;;;Help Here
;~           If Not GUICtrlSetData($labels[$StringInStr], $Read_Input) Then
;~            ;If Not $StringInStr Then
;~             MsgBox(0, "failed", "Failed")
;~           Else
;~             MsgBox(0, "passed", "passed")
;~           EndIf
;~          ;Help;Here;Here;Here;Here;Here;;;;;;;;;;;;;;;;;;;;;;;Help Here
            GUICtrlSetData($labels[$StringInStr], $Read_Input)
          Until $Count = $stringsplit[0]
          
        EndIf
      EndIf
      GUICtrlSetData($Input, "")
      GUICtrlSetState($Input, $Gui_focus)
  EndSelect
WEnd
Exit
Func _isLetterUsed()
  If StringInStr($lettersUsed, $Read_Input) Then
    MsgBox(0, "", "letter used")
    Return 1
  Else
    $lettersUsed = $lettersUsed & $Read_Input
    GUICtrlSetData($Label_Used_Letters, $lettersUsed)
    
  EndIf
EndFunc  ;==>_isLetterUsed
Func _isLetterValid($letter)
  If StringInStr($string, $letter) Then
    Return 1
  Else
    Return 0
  EndIf
EndFunc  ;==>_isLetterValid

AutoIt3 online docs Use it... Know it... Live it...MSDN libraryglobal Help and SupportWindows: Just another pane in the glass.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...