220 function DoYouWantToPlay() strCardImage = “ ===============” & Space(15) & “Rules and “ & _ “Instructions” & vbCrLf & _ “| * “ & Space(32) & “|” & Space(15) & “================” & _ “========” & vbCrLf & _ “| * * “ & Space(31) & “|” & Space(15) & “1. Try to get to “ & _ “21 without going over.” & vbCrLf & _ “| *** “ & Space(31) & “|” & Space(15) & “2. Aces count as “ & _ “11s (not 1s).” & vbCrLf & _ “| * * “ & Space(31) & “|” & Space(15) & “3. The dealer “ & _ “must stop at 17 or later.” & vbCrLf & _ “|” & Space(15) & “****” & Space(16) & “|” & vbCrLf & _ “|” & Space(17) & “**” & Space(18) & “|” & vbCrLf & _ “|” & Space(14) & “* ** *” & Space(15) &”|” & vbCrLf & _ “|” & Space(11) & “********” & Space(12) &”|” & vbCrLf & _ “|” & Space(9) & “**********” & Space(10) & “|” & vbCrLf & _ “|” & Space(9) & “**********” & Space(10) & “|” & vbCrLf & _ “|” & Space(11) & “********” & Space(12) & “|” & vbCrLf & _ “|” & Space(13) & “******” & Space(14) & “|” & vbCrLf & _ “|” & Space(15) & “****” & Space(16) & “|” & vbCrLf & _ “|” & Space(17) & “ *” & Space(19) & “|” & vbCrLf & _ “|” & Space(32) & “* * |” & vbCrLf & _ “|” & Space(32) & “*** |” & vbCrLf & _ “|” & Space(32) & “* * |” & vbCrLf & _ “|” & Space(33) & “ * |” & vbCrLf & _ “ ===============” & vbCrLf & vbCrLf & vbCrLf & vbCrLf & _ “Would you like to play a game of Blackjack Lite? “ DoYouWantToPlay = MsgBox(strCardImage, 36, “BlackJack Lite”) End Function If the player clicks on the Yes button, the value of DoYouWantToPlay is set to 6. This value will later be tested in the script’s main processing section to determine whether the game should continue. Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition Creating the NowGoPlay() Function The NowGoPlay() function is called when the player clicks on the Yes button on the script’s initial pop-up dialog, indicating that he or she wants to play the game. function NowGoPlay() DealFirstHand() PlayTheGame() If strUserBusted = “False” Then ComputerPlay() End If DetermineWinner() End Function This function controls the actual play of the game. It is made up of calls to several other functions. First it calls the DealFirstHand() function, which deals both the user and the com- puter their initial cards. Next it calls the PlayTheGame() function, which allows the user to continue to take hits or hold, and determines whether the player busted. The NowGoPlay() function then checks the value of the strUserBusted variable to see whether the game should continue. If the user decides to hold, then the ComputerPlay() function is called so the computer’s (or dealer’s) hand can finish being dealt. Regardless of whether the user busts or the ComputerPlay() function is called, eventually control returns to the NowGoPlay() function and the DetermineWinner() function is called. This function determines the winner of the hand and gives the player an opportunity to play another hand. Creating the DealFirstHand() Function The DealFirstHand() function makes two calls to the GetRandomNumber() function to deal both the player’s and the computer’s initial cards. function DealFirstHand() intUserCard = GetRandomNumber() intComputerCard = GetRandomNumber() End Function 221 Chapter 7 • Using Procedures to Organize Scripts 222 Creating the PlayTheGame() Function The PlayTheGame() function, shown next, sets up a Do Until loop that executes until either the player busts or decides to hold. The first statement in the loop prompts the player to decide whether he or she wants another card. If the player clicks Yes, the DealAnotherCard() function is called. The PlayTheGame() function then checks to see whether the player has busted, setting the value of the strUserBusted and strUserDone variables if appropriate (True). If the player decides to hold and clicks the No button, the value of strUserDone is also set to True. function PlayTheGame() Do Until strUserDone = “True” intAnotherCard = MsgBox(“User: “ & Space(8) & intUserCard & vbCrLf & _ “Computer: “ & intComputerCard & vbCrLf & vbCrLf & _ “[Click on YES for another card]” & vbCrLf & _ “[Click on NO to stick]”, 4, “Initial Deal”) Select Case intAnotherCard Case 6 ‘User clicked on Yes ‘MsgBox “You decided to take a hit.” DealAnotherCard() Case 7 ‘User clicked on No strUserDone = “True” End Select If intUserCard > 21 then strUserBusted = “True” strUserDone = “True” End If Loop End Function Creating the DealAnotherCard() Function The DealAnotherCard() function is called from the PlayTheGame() function when the player elects to take a hit (asks for another card). This function consists of two statements. The first Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition statement assigns the card number returned to it from the GetRandomNumber() function to a variable named intUserNextCard. The second statement tallies the player’s hand by adding the value of the new card to the cards already in the player’s hand. function DealAnotherCard() intUserNextCard = GetRandomNumber() tinUserCard = intUserCard + intUserNextCard End Function Creating the ComputerPlay() Function The ComputerPlay() function, shown here, is responsible for dealing the computer’s hand. It uses a Do While loop to continue dealing the computer’s hand until either the computer’s hand exceeds a total of 17 but remains under 21, or it busts. function ComputerPlay() Do While intComputerCard < 17 intNewComputerCard = GetRandomNumber() intComputerCard = intComputerCard + intNewComputerCard Loop End Function Inside the Do While loop are two statements. The first statement deals the computer a new card by calling the GetRandomNumber() function. The second statement uses the value returned by the GetRandomNumber() function to update the computer’s hand (that is, its total). Creating the DetermineWinner() Function The DetermineWinner() function, shown here, checks to see whether the value of strUserBusted is set to True. It also checks to see whether the computer has busted, by checking to see whether the value of intComputerCard is greater than 21. If either of these conditions is true, the script assigns an appropriate text message to the strTextMsg variable. This variable is used as input in an InputBox() pop-up dialog that shows the player the results of the game. If neither of these conditions is true, the DetermineWinner() function performs three tests to determine whether the player won, the computer won, or whether there was a tie; the func- tion then sets the value of strTextMsg accordingly. 223 Chapter 7 • Using Procedures to Organize Scripts 224 function DetermineWinner() If strUserBusted = “True” Then strTextMsg = “The user has busted!” Else If intComputerCard > 21 then strTextMsg = “The Computer has busted!” Else If intUserCard > intComputerCard Then strTextMsg = “The user wins!” If intUserCard = intComputerCard Then strTextMsg = “Push (e.g. Tie)!” If intUserCard < intComputerCard Then strTextMsg = “The “ & _ “Computer wins!” End If End If intPlayAgain = MsgBox(strTextMsg & vbCrLf & vbCrLf & “User: “ & _ Space(8) & intUserCard & vbCrLf & “Computer: “ & intComputerCard & _ vbCrLf & vbCrLf & vbCrLf & _ “Would you like to play another game?”, 4, “Initial Deal”) If intPlayAgain = 6 Then strUserBusted = “False” strUserDone = “False” NowGoPlay() End If DisplaySplashScreen() End Function Finally, the game’s results are displayed by showing the value of strTextMsg and the value of the player’s and the computer’s final hands. The pop-up dialog also asks the player whether he or she would like to play again. If the player clicks the Yes button, then the NowGoPlay() function is called and the game starts over again. Otherwise, the DisplaySplashScreen() function is called and the game ends. Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition Creating the DisplaySplashScreen() Function This final function displays the game’s splash screen, providing a little information about the game and its creator, as well as offering an invitation to the player to return and play the game again another time. function DisplaySplashScreen() MsgBox “Thank you for playing BlackJack Lite © Jerry Ford 2002.” & _ vbCrLf & vbCrLf & “Please play again soon!”, 4144, “BlackJack Lite” WScript.Quit() End Function After displaying the splash screen in a pop-up dialog, the DisplaySplashScreen() function ends the game by executing the WScript Quit() method. The Final Result That’s it. You are all done. Your fully assembled script should look as follows. ‘************************************************************************* ‘Script Name: BlackJack.vbs ‘Author: Jerry Ford ‘Created: 11/28/02 ‘Description: This script creates a scaled down version of the casino ‘version of the BlackJack card game ‘************************************************************************* ‘Initialization Section Option Explicit Dim intPlayGame, strCardImage, intUserCard, intComputerCard, intAnotherCard Dim intUserNextCard, strUserDone, intNewComputerCard, intPlayAgain Dim strUserBusted, strTextMsg strUserDone = “False” strUserBusted = “False” 225 Chapter 7 • Using Procedures to Organize Scripts 226 ‘Main Processing Section ‘Ask the user if he or she wants to play intPlayGame = DoYouWantToPlay() Select Case intPlayGame Case 6 ‘User clicked on Yes NowGoPlay() Case 7 ‘User clicked on No DisplaySplashScreen() End Select ‘Procedure Section function DoYouWantToPlay() strCardImage = “ ===============” & Space(15) & “Rules and “ & _ “Instructions” & vbCrLf & _ “| * “ & Space(32) & “|” & Space(15) & “================” & _ “========” & vbCrLf & _ “| * * “ & Space(31) & “|” & Space(15) & “1. Try to get to “ & _ “21 without going over.” & vbCrLf & _ “| *** “ & Space(31) & “|” & Space(15) & “2. Aces count as “ & _ “11s (not 1s).” & vbCrLf & _ “| * * “ & Space(31) & “|” & Space(15) & “3. The dealer “ & _ “must stop at 17 or later.” & vbCrLf & _ “|” & Space(15) & “****” & Space(16) & “|” & vbCrLf & _ “|” & Space(17) & “**” & Space(18) & “|” & vbCrLf & _ “|” & Space(14) & “* ** *” & Space(15) &”|” & vbCrLf & _ “|” & Space(11) & “********” & Space(12) &”|” & vbCrLf & _ “|” & Space(9) & “**********” & Space(10) & “|” & vbCrLf & _ “|” & Space(9) & “**********” & Space(10) & “|” & vbCrLf & _ “|” & Space(11) & “********” & Space(12) & “|” & vbCrLf & _ “|” & Space(13) & “******” & Space(14) & “|” & vbCrLf & _ “|” & Space(15) & “****” & Space(16) & “|” & vbCrLf & _ “|” & Space(17) & “ *” & Space(19) & “|” & vbCrLf & _ “|” & Space(32) & “* * |” & vbCrLf & _ “|” & Space(32) & “*** |” & vbCrLf & _ “|” & Space(32) & “* * |” & vbCrLf & _ Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition “|” & Space(33) & “ * |” & vbCrLf & _ “ ===============” & vbCrLf & vbCrLf & vbCrLf & vbCrLf & _ “Would you like to play a game of Blackjack Lite? “ DoYouWantToPlay = MsgBox(strCardImage, 36, “BlackJack Lite”) End Function function NowGoPlay() DealFirstHand() PlayTheGame() If strUserBusted = “False” Then ComputerPlay() End If DetermineWinner() End Function function DealFirstHand() intUserCard = GetRandomNumber() intComputerCard = GetRandomNumber() End Function function PlayTheGame() Do Until strUserDone = “True” intAnotherCard = MsgBox(“User: “ & Space(8) & intUserCard & vbCrLf & _ “Computer: “ & intComputerCard & vbCrLf & vbCrLf & _ “[Click on YES for another card]” & vbCrLf & _ “[Click on NO to stick]”, 4, “Initial Deal”) Select Case intAnotherCard Case 6 ‘User clicked on Yes ‘MsgBox “You decided to take a hit.” 227 Chapter 7 • Using Procedures to Organize Scripts 228 DealAnotherCard() Case 7 ‘User clicked on No strUserDone = “True” End Select If intUserCard > 21 then strUserBusted = “True” strUserDone = “True” End If Loop End Function function GetRandomNumber() Randomize GetRandomNumber = Round(FormatNumber(Int((13 * Rnd) + 1))) If GetRandomNumber = 1 then GetRandomNumber = 11 If GetRandomNumber > 10 then GetRandomNumber = 10 End Function function DealAnotherCard() intUserNextCard = GetRandomNumber() tinUserCard = intUserCard + intUserNextCard End Function function ComputerPlay() Do While intComputerCard < 17 intNewComputerCard = GetRandomNumber() intComputerCard = intComputerCard + intNewComputerCard Loop End Function Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition function DetermineWinner() If strUserBusted = “True” Then strTextMsg = “The user has busted!” Else If intComputerCard > 21 then strTextMsg = “The Computer has busted!” Else If intUserCard > intComputerCard Then strTextMsg = “The user wins!” If intUserCard = intComputerCard Then strTextMsg = “Push (e.g. Tie)!” If intUserCard < intComputerCard Then strTextMsg = “The “ & _ “Computer wins!” End If End If intPlayAgain = MsgBox(strTextMsg & vbCrLf & vbCrLf & “User: “ & _ Space(8) & intUserCard & vbCrLf & “Computer: “ & intComputerCard & _ vbCrLf & vbCrLf & vbCrLf & _ “Would you like to play another game?”, 4, “Initial Deal”) If intPlayAgain = 6 Then strUserBusted = “False” strUserDone = “False” NowGoPlay() End If DisplaySplashScreen() End Function function DisplaySplashScreen() MsgBox “Thank you for playing BlackJack Lite © Jerry Ford 2002.” & _ vbCrLf & vbCrLf & “Please play again soon!”, 4144, “BlackJack Lite” WScript.Quit() End Function 229 Chapter 7 • Using Procedures to Organize Scripts . then the NowGoPlay() function is called and the game starts over again. Otherwise, the DisplaySplashScreen() function is called and the game ends. Microsoft WSH and VBScript Programming for the. function when the player elects to take a hit (asks for another card). This function consists of two statements. The first Microsoft WSH and VBScript Programming for the Absolute Beginner, Second. continue. Microsoft WSH and VBScript Programming for the Absolute Beginner, Second Edition Creating the NowGoPlay() Function The NowGoPlay() function is called when the player clicks on the Yes