Microsoft WSH and VBScript Programming for the Absolute Beginner Part 18 docx

10 318 0
Microsoft WSH and VBScript Programming for the Absolute Beginner Part 18 docx

Đang tải... (xem toàn văn)

Thông tin tài liệu

150 You can expand the If statement by adding one or more ElseIf keywords, each of which can test another alternative condition. For example, look at the following VBScript statements: If X = 250 Then WScript.Echo “Go and buy that TV!” WScript.Echo “Buy a TV Guide while you are at it.” WScript.Echo “And do not forget to say thank you.” ElseIf X = 200 Then WScript.Echo “Buy the VCR” ElseIf X = 100 Then WScript.Echo “Buy the Radio.” Else WScript.Echo “OK. Maybe you had best just eat lunch.” End If Nesting If Statements Another way to use If statements is to embed them within one another. This enables you to develop scripts that test for a condition and then further test other conditions based on the result of the previous test. To see what I mean, look at the following example (I have bolded the embedded If statement to make it easier to see): X = 250 If X = 250 Then Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition In the Real World A flowchart is a graphical depiction of the possible logical flow of a script or program. Pro- grammers sometimes begin script development by first creating a flowchart. The flowchart serves as a visual tool for script development and provides a valuable documentation tool. Flowchart development can be a big help in the creation of complex scripts. Flowcharts help programmers formalize their thoughts before script development begins. Sometimes an automation task requires the development of several scripts, all of which must work together. Flowcharts provide a way of designing and documenting the logical flow between each script. Flowcharts can also facilitate script development when multiple programmers are involved, as they can be used to break down a task into discrete parts, each of which can then be assigned to a different person to work on. If Weekday(date()) = 1 Then WScript.Echo “It’s Sunday. The TV store is closed on Sundays.” Else WScript.Echo “Go and buy that TV!” & vbCrLf & _ “Buy a TV Guide while you are at it.” & vbCrLf & _ “And do not forget to say thank you.” End If Else WScript.Echo “OK. Just purchase the radio for today.” End If In this example, the first statement performs a test to see whether the value assigned to a variable named X is equal to 250. If it’s not equal to 250, the script skips all the statements located between the If X = 250 Then line and the Else line and displays the message “OK. Just purchase the radio for today .” However, if the value of X is equal to 250, then the embedded If statement executes. This If statement begins by determining whether the cur- rent day of the week is Sunday, and if it is, the script informs the user that the TV store is closed. Otherwise, it tells the user to go and make the purchase. The test performed by the If statement in the previous example deserves a little extra explanation. As you saw, it retrieved a numeric value representing the current day of the week. Here’s how to break down the logic used by this state- ment: First, it executed the built-in VBScript Date() function. The value retrieved by this function was then used by the built-in VBScript Weekday() function to determinate the numeric value that represents the current day of the week. These values are 1 = Sunday, 2 = Monday, 3 = Tuesday, 4 = Wednesday, 5 = Thursday, 6 = Friday, 7 = Saturday. Once this value was established, the If statement simply checked to see if it was equal to 7 (Sunday). As you can see, by taking advantage of built-in VBScripts functions you can per- form some fairly complex tasks with minimal coding. It’s a good idea to always check to see whether VBScript has a built-in function before attempting to write a piece of code to perform a generic task, such as date manipulation or checking. By embedding, or nesting one If statement within another If statement, you can develop complex programming logic. There’s no limit on the number of If statements you can embed within one another, although going more than a few layers deep can become confusing and difficult to follow. HINT TRICK 151 Chapter 5 • Conditional Logic 152 Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition RockPaperScissors.vbs Revisited Okay. You’ve now learned a lot about the If statement, including its syntax and various ways in which it can be used. One of the biggest challenges that I faced in coming up with the VBScript examples for the first four chapters of this book was how to create VBScript-based games without using VBScript programming statements that I had not yet covered. For the most part I was successful, but there was one exception: I just could not avoid using the If statement—although I tried to use it as little as possible. In most cases, this meant limiting the completeness of the games presented. One such game was the RockPaperScissors.vbs game. Now that I’ve finally provided a com- plete review of the If statement, let’s revisit the game and see how we can make it better. ‘Formally declare each variable used by the script before trying to ‘use them Dim objWshShell, strAnswer, strCardImage, intGetRandomNumber ‘Create an instance of the WScript object in order to later use ‘the Popup method Set objWshShell = WScript.CreateObject(“WScript.Shell”) ‘Display the rules of the game objWshShell.Popup “Welcome to Rock, Paper, and Scissors game. “ & _ “Here are the “ & _ “rules of the game: 1. Guess the same thing as the computer “ & _ “to tie. 2. Paper covers rock and wins. 3. Rock breaks “ & _ “scissors and wins. 4. Scissors cut paper and win.” ‘Prompt the user to select a choice strAnswer = InputBox(“Type Paper, Rock, or Scissors.”, _ “Let’s play a game!”) ‘Time for the computer to randomly pick a choice Randomize intGetRandomNumber = Round(FormatNumber(Int((3 * Rnd) + 1))) ‘Assign a value to the randomly selected number If intGetRandomNumber = 3 then strCardImage = “rock” If intGetRandomNumber = 2 then strCardImage = “scissors” If intGetRandomNumber = 1 then strCardImage = “paper” ‘Display the game’s results so that the user can see if he won objWshShell.Popup “You picked: “ & strAnswer & Space(12) & _ “Computer picked: “ & strCardImage Figure 5.6 shows the output of a complete game as the script currently is written. First off, let’s update the script by adding the script template that was introduced back in Chapter 3, “VBScript Basics.” ‘************************************************************************* ‘Script Name: RockPaperScissors-2.vbs ‘Author: Jerry Ford ‘Created: 11/16/02 ‘Description: This script revisits the RockPaperScissors.vbs script, first ‘introduced in Chapter 2, and updates it using advanced conditional logic. ‘************************************************************************* Next, let’s rewrite the Dim statement by adding another variable called Results. Dim objWshShell, strAnswer, strCardImage, strResults Results is used later in the scripts to store the results of the game (that is, who wins and who loses). Next let’s add the following statement to the script: Set objWshShell = WScript.CreateObject(“WScript.Shell”) This statement creates an instance of the objWshShell object. This object’s Quit() method is used later in the script to terminate its execution in the event that the user fails to provide a valid selection (that is, the player does not pick rock, paper, or scissors). Now that the variables and objects to be used by the script have been defined, let’s assign a default value of None to the strResults variable, like this: strResults = “None” Unless the player provides a correction selection, this value will remain equal to None throughout the script’s execution, and will eventually cause the script to terminate and dis- play an error message. However, if the player supplies a correct response, the response will be assigned to the strResults variable and then will be analyzed by the script. 153 Chapter 5 • Conditional Logic Figure 5.6 Playing Rock, Paper, and Scissors. 154 The original RockPaperScissors.vbs script displayed the game’s instructions in one popup dialog, and then prompted the player to specify a selection of rock, paper, or scissors in a second pop-up dialog. This works, but using two pop-up dialogs is a bit clunky. Let’s modify the scripts to display the game’s directions and collect the player’s input at the same time, like this: strAnswer = InputBox(“Please type paper, rock, or scissors.” & _ vbCrLf & vbCrLf & “Rules:” & vbCrLf & vbCrLf & _ “1. Guess the same thing as the computer to tie.” & vbCrLf & _ “2. Paper covers rock and wins.” & vbCrLf & _ “3. Rock breaks scissors and wins.” & vbCrLf & _ “4. Scissors cut paper and win.” & vbCrLf, “Let’s play a game!”) As you can see, I used the VBScript InputBox() function to display the pop-up dialog, and I formatted the instructions for better presentation using the vbCrLf constant. The next two sections of the script remain the same as in the original script. Randomize intGetRandomNumber = Round(FormatNumber(Int((3 * Rnd) + 1))) If intGetRandomNumber = 3 then strCardImage = “rock” If intGetRandomNumber = 2 then strCardImage = “scissors” If intGetRandomNumber = 1 then strCardImage = “paper” As explained in Chapter 2, “Overview of the Windows Script Host,” the first pair of state- ments results in the selection of a random number with a value between 1 and 3. The next three lines assign a value of rock, paper, or scissors to each of these values. The rest of the script will be comprised of all new code. Instead of simply displaying the player’s and the script’s selection of rock, paper, or scissors and then leaving it up to the player to figure out who won, the script now performs the analysis. To begin, add the following lines to the bot- tom of the script: If strAnswer = “rock” Then If intGetRandomNumber = 3 Then strResults = “Tie” If intGetRandomNumber = 2 Then strResults = “You Win” If intGetRandomNumber = 1 Then strResults = “You Lose” End If Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition This set of statements executes only if the player typed rock. Three If statements then com- pare the user’s selection to the script’s randomly selected decisions and determine the results of the game. Now replicate this collection of statements two times, and then modify each set as follows to add tests for the selection of both scissors and paper: If strAnswer = “scissors” Then If intGetRandomNumber = 3 Then strResults = “You Lose” If intGetRandomNumber = 2 Then strResults = “Tie” If intGetRandomNumber = 1 Then strResults = “You Win” End If If strAnswer = “paper” Then If intGetRandomNumber = 3 Then strResults = “You Win” If intGetRandomNumber = 2 Then strResults = “You Lose” If intGetRandomNumber = 1 Then strResults = “Tie” End If Now add the following statements to the script: If strResults = “None” Then objWshShell.Popup “Sorry. Your answer was not recognized. “ & _ “Please type rock, paper, or scissors in all lowercase letters.” WScript.Quit End If These statements only execute if the player fails to provide a correct response when playing the game. If this happens, the value of strResults is never changed and will still be set equal to None as assigned at the beginning of the script. In this case, the objWshShell object’s Popup() and Quit() methods are used to display an error message and then end the game. Now let’s wrap up this script by adding these last few lines of code. objWshShell.Popup “You picked: “ & space(12) & strAnswer & vbCrLf & _ vbCrLf & “Computer picked: “ & space(2) & strCardImage & vbCrLf & _ vbCrLf & “================” & vbCrLf & vbCrLf & “Results: “ & _ strResults 155 Chapter 5 • Conditional Logic 156 These statements are only executed if the player provided a valid response. They used the objWshShell object’s Popup() method to display the results of the game, including both the player’s and the script’s selections. The fully assembled script should now look like the following: ‘************************************************************************* ‘Script Name: RockPaperScissor-2.vbs ‘Author: Jerry Ford ‘Created: 11/16/02 ‘Description: This script revisits the RockPaperScissors.vbs script first ‘introduced in Chapter 2 and updates it using advanced conditional logic. ‘************************************************************************* ‘Perform script initialization activities Dim objWshShell, strAnswer, strCardImage, strResults Set objWshShell = WScript.CreateObject(“WScript.Shell”) strResults = “None” ‘Prompt the user to select a choice strAnswer = InputBox(“Please type paper, rock, or scissors.” & _ vbCrLf & vbCrLf & “Rules:” & vbCrLf & vbCrLf & _ “1. Guess the same thing as the computer to tie.” & vbCrLf & _ “2. Paper covers rock and wins.” & vbCrLf & _ “3. Rock breaks scissors and wins.” & vbCrLf & _ “4. Scissors cut paper and win.” & vbCrLf, “Let’s play a game!”) ‘Time for the computer to randomly pick a choice Randomize intGetRandomNumber = Round(FormatNumber(Int((3 * Rnd) + 1))) If intGetRandomNumber = 3 then strCardImage = “rock” If intGetRandomNumber = 2 then strCardImage = “scissors” If intGetRandomNumber = 1 then strCardImage = “paper” Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition ‘When you select rock If strAnswer = “rock” Then If intGetRandomNumber = 3 Then strResults = “Tie” If intGetRandomNumber = 2 Then strResults = “You Win” If intGetRandomNumber = 1 Then strResults = “You Lose” End If ‘When you select scissors If strAnswer = “scissors” Then If intGetRandomNumber = 3 Then strResults = “You Lose” If intGetRandomNumber = 2 Then strResults = “Tie” If intGetRandomNumber = 1 Then strResults = “You Win” End If ‘When you select paper If strAnswer = “paper” Then If intGetRandomNumber = 3 Then strResults = “You Win” If intGetRandomNumber = 2 Then strResults = “You Lose” If intGetRandomNumber = 1 Then strResults = “Tie” End If If strResults = “None” Then objWshShell.Popup “Sorry. Your answer was not recognized. “ & _ “Please type rock, paper, or scissors in all lowercase letters.” WScript.Quit End If objWshShell.Popup “You picked: “ & space(12) & strAnswer & vbCrLf & _ vbCrLf & “Computer picked: “ & space(2) & strCardImage & vbCrLf & _ vbCrLf & “================” & vbCrLf & vbCrLf & “Results: “ & _ strResults Save and execute the script. Figure 5.7 shows the initial pop-up dialog displayed by the script. 157 Chapter 5 • Conditional Logic 158 Figure 5.8 shows the results of a typical game. The Select Case Statement The If statement provides a great tool for testing two expressions. Using ElseIf you can modify the If statement to perform additional tests. VBScripts supplies another statement, called Select Case, which also lets you perform comparative operations. Functionally, it’s not really very different from the If statement. However, the Select Case statement is better equipped to perform large numbers of tests against a single expression. Here is the syntax of the Select Case statement: Select Case expression Case value statements . . . Case value statements Case Else statements End Select Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition Figure 5.7 The new version of RockPaper Scissors.vbs displays a friendlier initial dialog. Figure 5.8 The results of a typical game of the new version of RockPaper Scissors.vbs. The Select Case statement begins with Select Case, and then specifies the expression to be compared against one or more values specified in Case statements that follow the Select Case statement and precede the End Select statement. Optionally, a Case Else statement can also be added to provide an alternative course of action should none of the Case statement’s values match up against the expression specified by the Select Case statement. Look at the following example: Select Case strAnswer Case “rock” If intGetRandomNumber = 3 Then strResults = “Tie” If intGetRandomNumber = 2 Then strResults = “You Win” If intGetRandomNumber = 1 Then strResults = “You Lose” Case “scissors” If intGetRandomNumber = 3 Then strResults = “You Lose” If intGetRandomNumber = 2 Then strResults = “Tie” If intGetRandomNumber = 1 Then strResults = “You Win” Case “paper” If intGetRandomNumber = 3 Then strResults = “You Win” If intGetRandomNumber = 2 Then strResults = “You Lose” If intGetRandomNumber = 1 Then strResults = “Tie” Case Else objWshShell.Popup “Sorry. Your answer was not recognized. “ & _ “Please type rock, paper, or scissors in all lowercase letters.” WScript.Quit End Select Here I have rewritten most of the logic implemented in the RockPaperScissors.vbs script. As the following complete script shows, not only did I reduce the number of lines of code required by the script to work, but I also improved the script’s readability: ‘************************************************************************* ‘Script Name: RockPaperScissors-3.vbs ‘Author: Jerry Ford ‘Created: 11/16/02 ‘Description: This script revisits the RockPaperScissors-2.vbs script, ‘replacing some of the If statement’s logic with a Case Select statement. ‘************************************************************************* ‘Perform script initialization activities 159 Chapter 5 • Conditional Logic . = 3 then strCardImage = “rock” If intGetRandomNumber = 2 then strCardImage = “scissors” If intGetRandomNumber = 1 then strCardImage = “paper” Microsoft WSH and VBScript Programming for the Absolute. intGetRandomNumber = 2 Then strResults = “You Win” If intGetRandomNumber = 1 Then strResults = “You Lose” End If Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition This. see): X = 250 If X = 250 Then Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition In the Real World A flowchart is a graphical depiction of the possible logical flow

Ngày đăng: 03/07/2014, 18:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan