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

Microsoft WSH and VBScript Programming for the Absolute Beginner Part 33 pptx

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 (101.23 KB, 10 trang )

300
‘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
strCheckAnswer = TestLetterGuess()
If strCheckAnswer <> “IncorrectAnswer” Then
‘Reset the value of variable used to build a string containing
‘the interim stage of the word as currently guessed by player
strTempStringTwo = “”
NonGuessedString()
‘Check to see if the player has guessed the word
blnGameStatus = CheckIfGameWon()
If blnGameStatus = “True” 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
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition


strDisplayString = “”
FlipString()
End If
End Select
End If
Loop
DisplayGameResults()
End Function
Building the RetrieveWord() Function
This function is designed to retrieve a randomly selected word to be used by the game.
RetrieveWord() first selects a random number between 1 and 10, and then uses that number
to retrieve a game word from the
WordList() array. This function randomly retrieves a word
from an array.
Function RetrieveWord()
Randomize
intRandomNo = FormatNumber(Int(10 * Rnd))
RetrieveWord = astrWordList(intRandomNo)
End Function
This is a good place to perform another test. This time, open the temporary script that you
created a little earlier and cut and paste it into the statements located in the previous func-
tion. Paste the three statements into the temporary file, making them lines 3 though 5 in
the script. Next, add the following statement as line 6:
MsgBox RetrieveWord
Save and run the script. Each time you execute the temporary script, a different randomly
selected word should be displayed. If this is not the case, then something is wrong. Locate
and fix any errors that may occur until the temporary script works as expected. Then, cut and
paste any corrected script statements back into your Hangman script and move on to the next
section.
301

Chapter 9 • Handling Script Errors
302
Building the InitialDisplayString() Function
This function is used to display a series of underscore characters representing each letter
that makes up the mystery game word:
Function InitialDisplayString()
‘Create a loop that processes each letter of the word
For intLetterCounter = 1 to Len(strGameWord)
‘Use underscore characters to display a string representing each
‘letter
InitialDisplayString = InitialDisplayString & “_ “
Next
End Function
You can run a quick test of this function by creating a new temporary VBScript, cutting and
pasting the statements from within this function into the temporary script, and modifying
it.
For intLetterCounter = 1 to Len(“DOG”)
‘Use underscore characters to display a string representing each letter
InitialDisplayString = InitialDisplayString & “_ “
Next
MsgBox InitialDisplayString
You should see three underscore characters separated by blank spaces, indicating the length
of the word. If anything is wrong, fix it and then copy the corrected statement(s) back into
the Hangman script.
Building the FirstLevelValidation() Function
The FirstLevelValidation() function, shown next, ensures that the player is providing valid
input. It checks to make sure that the player typed in something, that the player did not
type in more than one character, and that a number was not provided as input.
‘Validate the player’s input
Function FirstLevelValidation()

‘See if the player clicked on Cancel or failed to enter any input
If strChoice = “” Then
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
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
Building the SecondLevelValidation() Function
Like the previous function, the SecondLevelValidation() function, shown here, performs
additional tests on the player’s guess to make sure that the player is not trying to guess the
same letter twice.
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”
End If
End If
End Function
303
Chapter 9 • Handling Script Errors
304
Building the TestLetterGuess() Function
The TestLetterGuess() function, shown here, checks to see whether the letter is part of the
word and keeps track of missed guesses. If the total number of missed guesses equals
6, then
this function assigns a value of
False to the blnWordGuessed variable. This variable is a flag
that is later checked to see whether the player has lost the game.
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 the player has missed 6 guesses then he has used up all chances
If intNoMisses = 6 Then
blnWordGuessed = “False”
End If
TestLetterGuess = “IncorrectGuess”
Else
TestLetterGuess = “CorrectGuess”
End If
End Function

Building the NonGuessedString() Function
This game displays as a string the letters that make up the game’s mystery word and uses
VBScript string manipulation functions to control the display of correctly and incorrectly
guessed letters. As I was creating the game, I wanted an easy way of seeing what game word
had been randomly selected and of tracking which letters had yet to be guessed. The
NonGuessedString() function, shown next, builds a string that, if it were displayed, would
show all the letters that make up the word, less the letters that the player has correctly
guessed. This function gave me a tool for displaying how the game was keeping track of the
game word.
Function NonGuessedString()
‘Loop through the temporary string
For intLetterCounter = 1 to Len(strTempStringOne)
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
‘Examine each letter in the word one at a time
strWordLetter = Mid(strTempStringOne, intLetterCounter, 1)
‘Otherwise add an underscore character indicating a nonmatching guess
If UCase(strWordLetter) <> UCase(strChoice) Then
strTempStringTwo = strTempStringTwo & strWordLetter
Else
‘The letter matches player’s guess. Add it to the temporary string
intNoRight = intNoRight + 1
strRightGuesses = strRightGuesses & “ “ & UCase(strChoice)
strTempStringTwo = strTempStringTwo & “_”
End If
Next
End Function
After I developed this function, I added the following statement as the last statement in the
function:
MsgBox “ **** = “ & strTempStringTwo
This way, each time the function ran, I was able to see the contents of the string. For exam-

ple, if the game word is DOG and the player has missed his or her first guess, this string
would be displayed in a pop-up dialog as
D O G. If the player then guessed the letter O, then
the string would display as
D_G the next time this function ran. This function allowed me to
visually track the progress of the string as the game ran and manipulated its contents.
Building the CheckIfGameWon() Function
The CheckIfGameWon() function checks to see whether the number of correctly guessed let-
ters is equal to the length of the word. If this is the case, then the player has guessed all the
letters that make up the word and won the game.
Function CheckIfGameWon()
‘Check and see if the player has guessed all the letters that make up
‘the word. If so, set indicator variable and exit the Do Until loop
If intNoRight = Len(strGameWord) Then
CheckIfGameWon = “True”
End If
End Function
305
Chapter 9 • Handling Script Errors
306
Again, a well-placed MsgBox() in this function can be used to track the value of the
blnCheckIfGameWon variable.
Building the FlipString() Function
The problem with the string produced by the NonGuessedString() function was that it dis-
played a string in exactly the opposite format that I wanted to ultimately display. In other
words, if the game word was
DOG and the player had correctly guessed the letter O, then I
wanted the game to display the word as
_O_ and not as D_G. So I developed the FlipString()
function. It loops through each character of the string created by the NonGuessedString()

function and reverses the display of character data.
Function FlipString()
‘Spin through and reverse the letters in the strTempStringTwo variable
‘In order to switch letters to underscore characters and underscore
‘characters to the appropriate letters
For intFlipCounter = 1 to Len(strTempStringTwo)
‘Examine each letter in the word one at a time
strWordLetter = Mid(strTempStringTwo, intFlipCounter, 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,intFlipCounter),1) & “ “
End If
Next
End Function
Here again, a well-placed statement that contains the MsgBox() function can be used to dis-
play the activity of this function as it attempts to spin through and reverse the display of
the letters that make up the game word.
Building the DisplayGameResults() Function
The DisplayGameResults() function, shown here, determines whether the player won or lost
the game and is responsible for displaying the results of the game and for determining
whether the player wants to play again. If the user elects to play another game, the strings
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
that are used to track the status of the game word are blanked out and the PlayTheGame()
function is called. Otherwise, the function ends and processing control is passed back to the
end of the current iteration of the
PlayTheGame() function, which then returns control to

the Main Processing Section where the
SplashScreen() function is called.
‘Determine if the player won or lost and display game results
Function DisplayGameResults()
‘Select message based on whether or not the 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 the answer is yes reset the following variables & start a new game
strDisplayString = “”
strTempStringTwo = “”
PlayTheGame()
End If
End Function
Building the SplashScreen() Function
The SplashScreen() function is the last function in the script. As you have seen in other
games in this book, this function displays some information about the game and its creator.
After this function is processed, the Main Processing Section executes the
WScript.Quit()
method, terminating the game’s execution.
‘This function displays the game splash screen

Function SplashScreen()
307
Chapter 9 • Handling Script Errors
308
MsgBox “Thank you for playing VBScript Hangman © Jerry Ford 2002.” & _
vbCrLf & vbCrLf & “Please play again soon!”, , cTitlebarMsg
End Function
The Final Result
By now you should have all the pieces and parts of the Hangman script assembled and ready
for execution. Save your work and give it a shot. After you have everything working correctly,
you can remove or comment out any of the extra statements that use the
MsgBox() function
to track the game’s intermediate results.
‘*************************************************************************
‘Script Name: Hangman.vbs
‘Author: Jerry Ford
‘Created: 02/30/02
‘Description: This script demonstrates how to create a game of Hangman
‘ using VBScript and the WSH.
‘*************************************************************************
‘Initialization Section
Option Explicit
Const cTitlebarMsg = “VBScript HANGMAN”
Dim strChoice, strGameWord, intNoMisses, intNoRight, strSplashImage
Dim intPlayOrNot, strMsgText, intPlayAgain, strWrongGuesses
Dim strRightGuesses, blnWordGuessed, intLetterCounter
Dim strTempStringOne, strTempStringTwo, strWordLetter, strDisplayString
Dim intFlipCounter, intRandomNo, strProcessGuess, blnGameStatus
Dim strCheckAnswer
Dim astrWordList(9) ‘Define an array that can hold 10 game words

‘Main Processing Section
intPlayOrNot = DoYouWantToPlay()
Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition
If intPlayOrNot = 6 Then ‘User elected to play the game
FillArray()
PlayTheGame()
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 FillArray()
‘Add the words to the array
astrWordList(0) = “AUTOMOBILE”
astrWordList(1) = “NETWORKING”
astrWordList(2) = “PRACTICAL”
astrWordList(3) = “CONGRESS”
astrWordList(4) = “COMMANDER”
astrWordList(5) = “STAPLER”

309
Chapter 9 • Handling Script Errors

×