Tải bản đầy đủ (.pdf) (10 trang)

Microsoft WSH and VBScript Programming for the Absolute Beginner Part 37 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (96.61 KB, 10 trang )

340
End If
SplashScreen()
WScript.Quit()
‘Procedure Section
Function DoYouWantToPlay()
‘Display the splash screen and ask the user if he or she wants to play
strSplashimage = Space(100) & “***********” & vbCrLf & _
“W E L C O M E T O “ & Space(68) & “*” & Space(18) & “*” & _
vbCrLf & Space(100) & “0” & Space(18) & “*” & vbCrLf & _
“V B S c r i p t H A N G M A N !” & Space(50) & “—||—” & _
Space(15) & “*” & vbCrLf & Space(99) & “/” & Space(1) & “\” & _
Space(17) & “*” & vbCrLf & Space(120) & “*” & vbCrLf & _
Space(120) & “*” & vbCrLf & space(113) & “ ******* “ & _
vbCrLf & “Would you like to play a game?” & vbCrLf & “ “
DoYouWantToPlay = MsgBox(strSplashimage, 36, cTitlebarMsg)
End Function
Function PlayTheGame()
‘Initialize variables displayed in the game’s initial pop-up dialog
intNoMisses = 0
intNoRight = 0
strWrongGuesses = “”
strRightGuesses = “”
‘Get the game a mystery word
strGameWord = RetrieveWord()
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
‘Call the function that formats the initial pop-up dialog display string
strDisplayString = InitialDisplayString()
strTempStringOne = strGameWord
‘Let the player start guessing
Do Until intNoMisses = 6


‘Collect the player’s guess
strChoice = InputBox(vbCrLf & vbTab & strDisplayString & vbCrLf & _
vbCrLf & vbCrLf & “No. of Misses: “ & intNoMisses & “ “ & vbTab & _
“Incorrect:” & strWrongGuesses & vbCrLf & vbCrLf & vbCrLf & _
“Type a letter and click on OK.” , cTitleBarMsg)
‘Determine if the player has quit
If strChoice = “” Then
Exit Function
End If
strProcessGuess = FirstLevelValidation()
‘The Player wants to quit the game
If strProcessGuess = “ExitFunction” Then
Exit Function
End If
‘The player typed invalid input
If strProcessGuess <> “SkipRest” Then
strProcessGuess = SecondLevelValidation()
Select Case strProcessGuess
Case “DuplicateWrongAnswer”
MsgBox “Invalid: You’ve already guessed this incorrect letter.”
Case “DuplicateRightAnswer”
MsgBox “Invalid: You’ve already guessed this correct letter.”
Case Else
341
Chapter 10 • Using the Windows Registry to Configure Script Settings
342
strCheckAnswer = TestLetterGuess()
If strCheckAnswer <> “IncorrectAnswer” Then
‘Reset the value of the variable used to build a string
‘containing the interim stage of the word as currently

‘guessed by the player
strTempStringTwo = “”
NonGuessedString()
‘Check to see if the player has guessed the word
blnGameStatus = CheckIfGameWon()
If blnGameStatus = “yes” Then
blnWordGuessed = “True”
Exit Do
End If
‘Set the value of the temporary string equal to the string
‘created by the ‘Previous For Next loop
strTempStringOne = strTempStringTwo
‘Clear out the value of the strDisplayString variable
strDisplayString = “”
FlipString()
End If
End Select
End If
Loop
DisplayGameResults()
End Function
Function InitialDisplayString()
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
‘Create a loop that processes each letter of the word
For intLetterCounter = 1 to Len(strGameWord)
‘Use underscore characters to display string representing each letter
InitialDisplayString = InitialDisplayString & “_ “
Next
End Function
‘Determine if the player won or lost and display game results

Function DisplayGameResults()
‘Set message depending on whether or not player figured out the word
If blnWordGuessed = “True” Then
strMsgText = “Congratulations, You Win!”
Else
strMsgText = “Sorry, You Lose.”
End If
‘Display the results of the game
intPlayAgain = MsgBox(vbCrLf & “The word was: “ & _
UCase(strGameWord) & vbCrLf & vbCrLf & vbCrLf & strMsgText & vbCrLf & _
vbCrLf & vbCrLf & “Would you like to play again?” , 4, cTitleBarMsg)
‘Find out if the player wants to play another game
If intPlayAgain = 6 Then
‘If answer is yes reset the following variables and start a new game
strDisplayString = “”
strTempStringTwo = “”
PlayTheGame()
End If
End Function
‘This function retrieves a randomly selected word from a word file
Function RetrieveWord()
‘Locate the folder where collections of game words are stored
strGameFolder = GetstrWordFileLocation()
343
Chapter 10 • Using the Windows Registry to Configure Script Settings
344
‘Get the player to select a word category
strSelectCategory = SelectAWordCategory(strGameFolder)
‘Create the complete path and file name for the selected word file
strInputFile = strGameFolder & “\” & strSelectCategory

‘Open the file for reading
Set strWordFile = objFsoObject.OpenTextFile(strInputFile, 1)
‘Set this variable to zero. It represents the No of words in the file
intNoWordsInFile = 0
‘Count the number of words in the file
Do while False = strWordFile.AtEndOfStream
‘Read a line
strWordFile.ReadLine()
‘Keep count of the number of words (or lines) read
intNoWordsInFile = intNoWordsInFile + 1
‘If the loop iterates more than 50 times something is wrong
If intNoWordsInFile > 50 Then
Exit Do
End If
Loop
‘Close the file when done counting the number of words (or lines)
strWordFile.Close
‘Pick a random number between 1 and the number of words in the file
Randomize
intRandomNo = FormatNumber(Int((intNoWordsInFile + 1) * Rnd),0)
‘Open the file for reading
Set strWordFile = objFsoObject.OpenTextFile(strInputFile, 1)
‘Skip the reading of all words prior to the randomly selected word
For intLinesInFile = 1 to intRandomNo - 1
‘Read the randomly selected word
strWordFile.SkipLine()
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
Next
‘Return the randomly selected word to the calling statement
RetrieveWord = strWordFile.ReadLine()

‘Close the file when done
strWordFile.Close
End Function
‘This function retrieves location of folder where word files are stored
Function GetstrWordFileLocation()
‘Get the folder name and path from its assigned Registry value
GetstrWordFileLocation = _
objWshShl.RegRead(“HKCU\VBGames\Hangman\ListLocation”)
End Function
‘This function returns a word category
Function SelectAWordCategory(TargetFolder)
‘Specify the location of the folder that stores the word files
Set strGameFolder = objFsoObject.GetFolder(TargetFolder)
‘Get a list of files stored in the folder
Set objGameFiles = strGameFolder.Files
strSelection = “”
‘Loop through the list of word files
For Each strWordList In objGameFiles
‘Build a master string containing a list of all the word files
strFileString = strFileString & strWordList.Name
‘Remove the .txt portion of each file’s file name.
strCharactersToRemove = Len(strWordList.Name) - 4
345
Chapter 10 • Using the Windows Registry to Configure Script Settings
346
‘Build a display string showing the category names of each word file
strSelection = strSelection & _
Left(strWordList.Name, strCharactersToRemove) & vbCrLf
Next
blnValidResponse = “False”

‘Loop until a valid category strSelection has been made
Do Until blnValidResponse = “True”
‘Prompt the player to select a word category
strChoice = InputBox(“Please specify the name of a word category “ & _
“from which game words will be selected.” & vbCrLf & vbCrLf & _
“Available Categories:” & vbCrLf & vbCrLf & _
strSelection, “Pick a Category” , “General”)
‘If input is not in master string the player must try again
If InStr(UCase(strFileString), UCase(strChoice)) = 0 Then
MsgBox “Sorry but this is not a valid category. Please try again.”
Else
blnValidResponse = “True”
End If
Loop
‘If the player typed nothing then specify a default word category
If Len(strChoice) = 0 Then
strChoice = “General”
End If
‘Add the .txt portion of the file name back
SelectAWordCategory = strChoice & “.txt”
End Function
‘This function displays the game splash screen
Function SplashScreen()
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
MsgBox “Thank you for playing VBScript Hangman © Jerry Ford 2002.” & _
vbCrLf & vbCrLf & “Please play again soon!”, , cTitlebarMsg
End Function
‘Validate the player’s input
Function FirstLevelValidation()
‘See if the player clicked on cancel or failed to enter any input

If strChoice = “” Then
FirstLevelValidation = “ExitFunction”
Exit Function
End If
‘Make sure the player only typed 1 letter
If Len(strChoice) > 1 Then
MsgBox “Invalid: You must only enter 1 letter at a time!”
FirstLevelValidation = “SkipRest”
Else
‘Make sure the player did not type a number by accident
If IsNumeric(strChoice) = “True” Then
MsgBox “Invalid: Only letters can be accepted as valid input!”
FirstLevelValidation = “SkipRest”
Else
FirstLevelValidation = “Continue”
End If
End If
End Function
Function SecondLevelValidation()
‘Check to see if this letter is already on the incorrectly guessed list
If Instr(1, strWrongGuesses, UCase(strChoice), 1) <> 0 Then
SecondLevelValidation = “DuplicateWrongAnswer”
Else
‘Check to see if this letter is already on the correctly guessed list
If Instr(1, strRightGuesses, UCase(strChoice), 1) <> 0 Then
SecondLevelValidation = “DuplicateRightAnswer”
347
Chapter 10 • Using the Windows Registry to Configure Script Settings
348
End If

End If
End Function
Function CheckIfGameWon()
‘Check and see if player has guessed all the letters that make up the
‘word. If so set the indicator variable and exit the Do Until loop
If intNoRight = Len(strGameWord) Then
CheckIfGameWon = “yes”
End If
End Function
Function NonGuessedString()
‘Loop through the temporary string
For intLetterCounter = 1 to Len(strTempStringOne)
‘Examine each letter in the word one at a time
strWordLetter = Mid(strTempStringOne, intLetterCounter, 1)
‘Otherwise add a underscore character indicating a nonmatching guess
If UCase(strWordLetter) <> UCase(strChoice) Then
strTempStringTwo = strTempStringTwo & strWordLetter
Else
‘The letter matches the guess so add it to the temporary string
intNoRight = intNoRight + 1
strRightGuesses = strRightGuesses & “ “ & UCase(strChoice)
strTempStringTwo = strTempStringTwo & “_”
End If
Next
End Function
Function FlipString()
‘Spin through and reverse the letters in the strTempStringTwo variable
‘In order to switch letters to underscore characters and underscore
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
‘characters to the appropriate letters

For strFlipCounter = 1 to Len(strTempStringTwo)
‘Examine each letter in the word one at a time
strWordLetter = Mid(strTempStringTwo, strFlipCounter, 1)
‘Replace each letter with the underscore character
If strWordLetter <> “_” Then
strDisplayString = strDisplayString & “_ “
Else
‘Replace each underscore with its appropriate letter
strDisplayString = strDisplayString & _
Right(Left(strGameWord,strFlipCounter),1) & “ “
End If
Next
End Function
Function TestLetterGuess()
If Instr(1, UCase(strGameWord), UCase(strChoice), 1) = 0 Then
‘Add the letter to the list of incorrectly guessed letters
strWrongGuesses = strWrongGuesses & “ “ & UCase(strChoice)
‘Increment the number of guesses that the player has made by 1
intNoMisses = intNoMisses + 1
‘If player has missed 6 guesses then he has used up all his chances
If intNoMisses = 6 Then
blnWordGuessed = “False”
End If
TestLetterGuess = “IncorrectGuess”
Else
TestLetterGuess = “CorrectGuess”
End If
End Function
Summary
In this chapter, you learned how to write scripts that programmatically interact with the

Windows Registry; this included reading, writing, and modifying Registry keys and values.
349
Chapter 10 • Using the Windows Registry to Configure Script Settings

×