‘Script Name: TicTacToe.vbs ‘Author: Jerry Ford ‘Created: 11/15/04 ‘Description: This script is a VBScript implementation of the ‘ Tic-Tac-Toe game ‘*************************************
Trang 1‘Script Name: TicTacToe.vbs
‘Author: Jerry Ford
‘Created: 11/15/04
‘Description: This script is a VBScript implementation of the
‘ Tic-Tac-Toe game
‘*************************************************************************
‘Initialization Section
Option Explicit
Const cTitleBarMsg = “VBScript T I C T A C T O E”
Dim A1, A2, A3, B1, B2, B3, C1, C2, C3 ‘Variables representing sections
‘of the Tic Tac Toe game board
Dim blnGameOver ‘Boolean variable that determines when to end game Dim blnPlayerTypedQuit ‘Variable used to track whether a player typed Quit Dim blnStopGame ‘Variable used in Main Processing section to
‘determine when to stop the game Dim blnValidCell ‘Boolean variable that determines whether a player
‘specified a valid cell
Dim intNoMoves ‘Variable used to keep track of the number of plays Dim intPlayAgain ‘Variable holds player response when asked to play
‘again
Dim strNotificationMsg ‘Variable used to display messages to player
Dim strPlayer ‘Variable used to identify whose turn it is
Dim strWinner ‘Variable used to determine whether the game is won Dim strPlayerInput ‘Variable used to hold the player’s cell selection Dim strDirection ‘Variable identifies how the player won the game
blnStopGame = “False”
Trang 2Developing the Logic for the Main Processing Section
The game’s main processing section is made up of a Do Untilloop and a series of procedure calls The loop is set up to execute until the players decide to stop playing the game as tracked using a Boolean variable named blnStopGame
Do Until blnStopGame = “True” ‘Keep playing until players decide to stop
SetVariableDefaults()
ClearGameBoard()
ManageGamePlay()
If blnPlayerTypedQuit = “True” Then ‘One of the players typed Quit
blnStopGame = “True”
Else ‘The game is over Ask the players whether they’d like to play again
intPlayAgain = MsgBox(“Would you like to play another game of “ & _
“Tic Tac Toe?”, 4, cTitleBarMsg)
If intPlayAgain = 7 Then ‘A player clicked on No B break out of loop
blnStopGame = “True”
End If
End If
Loop
DisplaySplashScreen()
Building the SetVariableDefaults() Function
The SetVariableDefaults() function, shown here, is straightforward and is responsible for setting default variable values.
Function SetVariableDefaults() ‘Establish default variable settings
blnGameOver = “False”
blnPlayerTypedQuit = “False”
blnValidCell = “False”
Trang 3intNoMoves = 0
strNotificationMsg = “Welcome! To play Tic Tac Toe follow the “ & _
“instruction at the bottom of the screen Type Quit to terminate “ & _
“the game at any time.”
strPlayer = “X”
strWinner = “None”
strDirection = “”
End Function
Building the ClearGameBoard() Function
The ClearGameBoard()function that follows is executed to clear out the contents of the game board to prepare it for a new game As you can see, the game board is cleared by assigning
a blank space to each cell of the board, thus removing any Xs or Os that may be present from
a previous game.
Function ClearGameBoard() ‘Reset the game board
A1 = “ “
A2 = “ “
A3 = “ “
B1 = “ “
B2 = “ “
B3 = “ “
C1 = “ “
C2 = “ “
C3 = “ “
End Function
Building the ManageGamePlay() Function
The ManageGamePlay()function that follows is controlled by a Do Untilloop that executes until the value assigned to a variable name blnGameOveris set equal to True Within the loop, the function begins by performing a series of checks to determine whether the game has already been won The first check looks to see whether player Xhas won If this is the case, the value assigned to strNotificationMsgis set to Game over! Player X Winsand the value assigned to a variable named strDirectionis used to identify how the game was won The
Trang 4display string assigned to strNotificationMsgis later used by the DisplayGameResults() func-tion The next check looks to see whether player Owon The last check looks to see whether the game has ended in a tie.
Function ManageGamePlay() ‘Manage the overall execution of the game
Do Until blnGameOver = “True”
‘Start by checking to see if the game has already been completed
If strWinner = “X” Then
strNotificationMsg = “Game over! Player X Wins “ & strDirection
DisplayGameResults()
blnGameOver = “True”
End If
If strWinner = “O” Then
strNotificationMsg = “Game over! Player O Wins “ & strDirection
DisplayGameResults()
blnGameOver = “True”
End If
If strWinner = “Nobody” Then
strNotificationMsg = “Game over It’s a tie!”
DisplayGameResults()
blnGameOver = “True”
End If
If blnGameOver <> “True” Then ‘If game is not over display the board
DisplayBoard() ‘in order to collect next player’s input
ValidateInput() ‘Validate the input
If UCase(strPlayerInput) = “QUIT” Then ‘See if a player type Quit
blnPlayerTypedQuit = “True”
blnValidCell = “False”
blnGameOver = “True”
End If
End If
Trang 5‘Count the number of valid cell selections
If blnValidCell = “True” Then
intNoMoves = intNoMoves + 1
MarkPlayerSelection()
End If
‘If all 9 cells have been filled in we have a tie
If intNoMoves = 9 Then
SeeIfWon()
If strWinner = “None” Then
strWinner = “Nobody”
End If
Else
SeeIfWon()
End If
‘Time to switch player turns
If blnValidCell = “True” Then
If strPlayer = “X” Then
strPlayer = “O”
Else
strPlayer = “X”
End If
End If
Loop
End Function
If the game is not over yet (e.g., blnGameOver <> “True”), then the game board is displayed and a player is prompted to make a move The player’s move is then validated If the player typed Quit, then the script sets a number of controlling variables to indicate that the game
is about to be terminated Otherwise, the value assigned to intNoMovesis incremented by 1
to keep track of the game’s progress and the MarkPlayerSelection() function is called to associate the player’s move with a specific cell on the game board Next the value assigned
to intNoMovesis examined If it is equal to 9, then the game is over and the script calls on SeeIfWon()to ascertain whether there was a winner If nine moves were made and no winner
Trang 6is identified, the game is declared a tie and the value assigned to strWinneris set equal to Nobody If nine moves have not been made yet, the script still executes the SeeIfWon() func-tion to see whether player Xor Ohas managed to line up three cells in a row Finally, the last set of statements inside the loop controls player turns by switching the value assigned to strPlayerto either Xor O.
Building the DisplayBoard() Function
The DisplayBoard() function consists of text designed to provide a graphic-like display Embedded inside the game board displayed by this function are nine variables named A1 – A3, B1 – B3, and C1 – C3—each of which represent a different cell on the game board Function DisplayBoard() ‘Display the game board
strPlayerInput = UCase(InputBox(vbCrLf & _
strNotificationMsg & _
vbCrLf & vbCrLf & vbCrLf & vbCrLf & _
vbTab & “1” & vbTab & vbTab & “2” & vbTab & vbTab & “3” & vbCrLf & _
vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & “|” & vbTab & _
vbCrLf & “A” & vbTab & A1 & vbTab & “|” & vbTab & A2 & vbTab & _
“|” & vbTab & A3 & vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & _
“|” & vbTab & vbCrLf & “ ————————————————-” & _
“———————————————————” & vbCrLf & vbTab & _
vbTab & “|” & vbTab & vbTab & “|” & vbTab & vbCrLf & “B” & vbTab & _
B1 & vbTab & “|” & vbTab & B2 & vbTab & “|” & vbTab & B3 & _
vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & “|” & vbTab & _
vbCrLf & “ ———————————————————————” & _
“————————————-” & vbCrLf & vbTab & vbTab & “|” & _
vbTab & vbTab & “|” & vbTab & vbCrLf & “C” & vbTab & C1 & vbTab & _
“|” & vbTab & C2 & vbTab & “|” & vbTab & C3 & vbCrLf & vbTab & _
vbTab & “|” & vbTab & vbTab & “|” & vbTab & vbCrLf & vbCrLf & _
vbCrLf & vbCrLf & “Player “ & strPlayer & _
“‘s turn Type your move:”, cTitleBarMsg))
End Function
Whenever this function is called it displays the game board, including the values assigned to each of its nine embedded variables (as either Xs or Os) This gives the game the capability
to dynamically display each move made as the game progresses.
Trang 7Building the DisplayGameResults() Function
The DisplayGameResults()function that follows is responsible for displaying the final results
of the game The dialog generated by this function is not much different than the dialog created by the DisplayBoard()function, except that this function uses the MsgBox()function
in place of the InputBox()function The MsgBox()function is more appropriate for this func-tion because it can be used to display a dialog with a single OKbutton, whereas using the InputBox()function would have resulted in the unnecessary display on a text input field at the bottom of the dialog.
Function DisplayGameResults() ‘Game is over Display the results
MsgBox vbCrLf & _
strNotificationMsg & _
vbCrLf & vbCrLf & vbCrLf & vbCrLf & _
vbTab & “1” & vbTab & vbTab & “2” & vbTab & vbTab & “3” & vbCrLf & _
vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & “|” & vbTab & _
vbCrLf & “A” & vbTab & A1 & vbTab & “|” & vbTab & A2 & vbTab & _
“|” & vbTab & A3 & vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & _
“|” & vbTab & vbCrLf & _
“ ————————————————————————————” & _
“———————-” & vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & _
“|” & vbTab & vbCrLf & “B” & vbTab & B1 & vbTab & “|” & vbTab & _
B2 & vbTab & “|” & vbTab & B3 & vbCrLf & vbTab & vbTab & “|” & _
vbTab & vbTab & “|” & vbTab & vbCrLf & “ —————————” & _
“——————————————————————————-” & vbCrLf & _
vbTab & vbTab & “|” & vbTab & vbTab & “|” & vbTab & vbCrLf & _
“C” & vbTab & C1 & vbTab & “|” & vbTab & C2 & vbTab & “|” & vbTab & _
C3 & vbCrLf & vbTab & vbTab & “|” & vbTab & vbTab & “|” & vbTab & _
vbCrLf & vbCrLf & vbCrLf & vbCrLf, , cTitleBarMsg
End Function
Building the ValidateInput() Function
The ValidateInput() function, shown here, uses a Select Case statement to process the input provided by players to determine whether valid input has been provided Input is valid only if it is provided in the form of a valid cell range Next, the function checks to be sure the player did not accidentally click on OKbefore entering a move The last validation test performed by this function checks to make sure that the cell specified by the player has not
Trang 8already been selected This is done by checking to see whether the value assigned to the cell
is anything other than a blank space If it is, then regardless of whether a value of Xor Ohas been assigned, the cell not available.
Function ValidateInput() ‘Run several tests valid correct player input
Select Case strPlayerInput ‘Ensure a valid cell was specified
Case “A1”
blnValidCell = “True”
Case “A2”
blnValidCell = “True”
Case “A3”
blnValidCell = “True”
Case “B1”
blnValidCell = “True”
Case “B2”
blnValidCell = “True”
Case “B3”
blnValidCell = “True”
Case “C1”
blnValidCell = “True”
Case “C2”
blnValidCell = “True”
Case “C3”
blnValidCell = “True”
Case Else
blnValidCell = “False”
strNotificationMsg = “Invalid cell Please try again.”
End Select
If strPlayerInput = “” Then ‘Player must type something
strNotificationMsg = “Missing entry Please try again.”
blnValidCell = “False”
End If
‘Check each cell to make sure that it has not already been selected
If strPlayerInput = “A1” Then
If A1 <> “ “ Then
blnValidCell = “False”
Trang 9strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “A2” Then
If A2 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “A3” Then
If A3 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “B1” Then
If B1 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “B2” Then
If B2 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “B3” Then
Trang 10If B3 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “C1” Then
If C1 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “C2” Then
If C2 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
If strPlayerInput = “C3” Then
If C3 <> “ “ Then
blnValidCell = “False”
strNotificationMsg = “Invalid entry Cell already selected “ & _
“Please try again.”
End If
End If
End Function
Building the MarkPlayerSelection() Function
The MarkPlayerSelection()function that follows, is responsible for associating the player’s move with the appropriate cell on the game board It does this by assigning the value stored
in strPlayerto the specified cell Remember, the value assigned to strPlayeris either an X
or an O, depending on whose turn it is.