0% found this document useful (0 votes)
184 views6 pages

Powershell Script Tic Tac Toe

This PowerShell script implements a two-player Tic-Tac-Toe game. It initializes variables to track game state, define functions for resetting the board, validating moves, checking for a winner, and displaying the board. The main game loop handles receiving player moves, updating the board, and determining when a player wins or the game ends in a tie before switching turns until the game concludes.

Uploaded by

adam suydam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
184 views6 pages

Powershell Script Tic Tac Toe

This PowerShell script implements a two-player Tic-Tac-Toe game. It initializes variables to track game state, define functions for resetting the board, validating moves, checking for a winner, and displaying the board. The main game loop handles receiving player moves, updating the board, and determining when a player wins or the game ends in a tie before switching turns until the game concludes.

Uploaded by

adam suydam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

# *************************************************************************

#
# Script Name: TicTacToe.ps1 (The Tic-Tac-Toe Game)
# Version: 2.0
# Author: Nate
# Date: April 8, 2013
#
# Description: This PowerShell script is a two player implementation of the
# popular Tic-Tac-Toe game
#
# *************************************************************************

# Initialization Section

#Define variables used in this script


$startGame = "False" #Controls when the game terminates
$playGame = "True" #Controls the play of an individual round of play
$player = "X" #Specifies the current player's turn
$winner = "" #Specifies the winner
$moves = 0 #Counts the number of moves made
$move = "" #Stores the current player's move
$tie = "False" #Specifies when a tie occurs

#Variables representing game board squares

$A1 = "1"
$A2 = "1"
$A3 = "1"
$B1 = "1"
$B2 = " "
$B3 = " "
$C1 = " "
$C2 = " "
$C3 = " "

# Functions and Filters Section

#This function resets variables representing variable board squares


function Clear-Board {

$script:A1 = " "


$script:A2 = " "
$script:A3 = " "
$script:B1 = " "
$script:B2 = " "
$script:B3 = " "
$script:C1 = " "
$script:C2 = " "
$script:C3 = " "
}

#This function gets the player's permission to start a round of play


function Get-Permission {
#Loop until a valid reply is collected
while ($startGame -eq "False") {

Clear-Host #Clear the Windows command console screen

#Display the game's opening screen


Write-Host "`n`n`n`n"
Write-Host " | |"
Write-Host " Welcome to the X | O |"
write-Host " | |"
Write-Host " ------|-------|------"
Write-Host " T I C - T A C - T O E | |"
Write-Host " | X |"
Write-Host " | |"
Write-Host " G A M E ! ------|-------|------"
Write-Host " | |"
Write-Host " | O | X"
Write-Host " | |"

#Collect the player's input


$response = Read-Host "`n`n`n`n`n`n`n Would you like to play? (Y/N)"

#Validate the player's input


if ($response -eq "Y"){ #The player wants to play a new round
$startGame = "True"
}
elseif ($response -eq "N") { #The player wants to quit
$startGame = "False"
Clear-Host #Clear the Windows command console screen
exit #Terminate script execution
}
}
}

#This function displays the game board, showing each player's moves

function Display-Board {

Clear-Host #Clear the Windows command console screen

#Display the game board


Write-Host "`n`n T I C - T A C - T O E`n`n`n"
Write-Host " 1 2 3`n"
Write-Host " | |"
Write-Host " A $A1 | $A2 | $A3"
write-Host " | |"
Write-Host " ------|-------|------"
Write-Host " | |"
Write-Host " B $B1 | $B2 | $B3"
Write-Host " | |"
Write-Host " ------|-------|------"
Write-Host " | |"
Write-Host " C $C1 | $C2 | $C3"
Write-Host " | |"

#Collect player move


$move = Read-Host "`n`n`n`n Player $player's turn"
$move #Return the Player's input to the calling statement
}

#This function determines if the player's input is valid


function Validate-Move {

if ($move.length -eq 2) { #Valid moves consist of 2 characters


if ($move -match "[A-C][1-3]") { #Regular expression test that looks
$result = "Valid" #for an instance of A, B, or C and an
} #instance of 1, 2, or 3.
else {
$result = "Invalid" #The move is invalid if it is not A1, A2, A3,
} # B1, B2, B3, C1, C2, or C3
}
else {
$result = "Invalid" #The move is invalid if it does not consist of 2
} #characters

#Move is invalid if it has already been assigned to a player during a


# previous turn
if (($move -eq "A1") -and ($A1 -ne " ")) {$result = "Invalid"}
if (($move -eq "A2") -and ($A2 -ne " ")) {$result = "Invalid"}
if (($move -eq "A3") -and ($A3 -ne " ")) {$result = "Invalid"}
if (($move -eq "B1") -and ($B1 -ne " ")) {$result = "Invalid"}
if (($move -eq "B2") -and ($B2 -ne " ")) {$result = "Invalid"}
if (($move -eq "B3") -and ($B3 -ne " ")) {$result = "Invalid"}
if (($move -eq "C1") -and ($C1 -ne " ")) {$result = "Invalid"}
if (($move -eq "C2") -and ($C2 -ne " ")) {$result = "Invalid"}
if (($move -eq "C3") -and ($C3 -ne " ")) {$result = "Invalid"}

$result #Return this value to the statement that called this function
}

#This function checks the game board to see if there is a winner


function Check-Results {

$winner = "" #Always reset this value before checking

#Look for a winner vertically


if (($A1 -eq $player) -and ($A2 -eq $player) -and ($A3 -eq $player)) {
$winner = $player
}
if (($B1 -eq $player) -and ($B2 -eq $player) -and ($B3 -eq $player)) {
$winner = $player
}
if (($C1 -eq $player) -and ($C2 -eq $player) -and ($C3 -eq $player)) {
$winner = $player
}

#Look for a winner horizontally


if (($A1 -eq $player) -and ($B1 -eq $player) -and ($C1 -eq $player)) {
$winner = $player
}
if (($A2 -eq $player) -and ($B2 -eq $player) -and ($C2 -eq $player)) {
$winner = $player
}
if (($A3 -eq $player) -and ($B3 -eq $player) -and ($C3 -eq $player)) {
$winner = $player
}

#Look for a winner diagonally


if (($A1 -eq $player) -and ($B2 -eq $player) -and ($C3 -eq $player)) {
$winner = $player
}
if (($A1 -eq $player) -and ($B2 -eq $player) -and ($C1 -eq $player)) {
$winner = $player
}
$winner #Return this value to the statement that called this function
}

#This function displays the game board and the final results of a round
#of play
function Display-Results {

Clear-Host #Clear the Windows command console screen

#Display the game board


Write-Host "`n`n T I C - T A C - T O E`n`n`n"
Write-Host " 1 2 3`n"
Write-Host " | |"
Write-Host " A $A1 | $A2 | $A3"
write-Host " | |"
Write-Host " ------|-------|------"
Write-Host " | |"
Write-Host " B $B1 | $B2 | $B3"
Write-Host " | |"
Write-Host " ------|-------|------"
Write-Host " | |"
Write-Host " C $C1 | $C2 | $C3"
Write-Host " | |"

if ($tie -eq "True") { #Check to see if the game resulted in a tie


Read-Host "`n`n`n`n The game has ended in a tie. Press Enter to continue"
}
else { #If a tie did not occur, identify the winner
Read-Host "`n`n`n`n Game over. $player has won. Press Enter to continue"
}
}

Clear-Board #Call function that resets the game board

Get-Permission #Call function that asks the players for permission to


# start a new round of play
while ($Terminate -ne "True") { #Loop until the player decides to quit

while ($playGame -eq "True") { #This loop controls the logic required to

#play a round of Tic-Tac-Toe

$move = Display-Board #Call function that displays the game board and
#collects player moves
$validMove = Validate-Move #Call the function that validates player moves

if ($validMove -eq "Valid") { #Process valid moves

$moves++ #Increment variable that keeps track of the number of valid moves

#Assign the appropriate game board square to the player that selected it
if ($move -eq "A1") {$A1 = $player}
if ($move -eq "A2") {$A2 = $player}
if ($move -eq "A3") {$A3 = $player}
if ($move -eq "B1") {$B1 = $player}
if ($move -eq "B2") {$B2 = $player}
if ($move -eq "B3") {$B3 = $player}
if ($move -eq "C1") {$C1 = $player}
if ($move -eq "C2") {$C2 = $player}
if ($move -eq "C3") {$C3 = $player}
}

else { #Process invalid moves

Clear-Host #Clear the Windows command console screen


Read-Host "`n`n`n`n`n`n`n`n`n`nInvalid Move. Press Enter to try again"
continue #Repeat this loop
}

$winner = Check-Results #Call function that determines if the game is over


#and who, if anyone, has won

if ($winner -eq "X") { #Perform the following actions when Player X wins

Write-Host `a #Make a beep sound


Display-Results #Call function that displays game results
$playGame = "False"
continue #Repeat this loop
}

if ($winner -eq "O") { #Perform the following actions when Player O wins
Write-Host `a #Make a beep sound
Display-Results #Call function that displays game results
$playGame = "False"
continue #Repeat this loop
}

if ($moves -eq 9) { #Perform the following actions when a tie occurs

Write-Host `a #Make a beep sound


$tie = "True"
Display-Results #Call function that displays game results
$playGame = "False"
continue #Repeat this loop
}

#The game is not over yet so switch player turn


if ($playGame -eq "True") {
if ($player -eq "X") {
$player = "O"
}
else {
$player = "X"
}
}
}
#This next set of statements only runs when the current round of play
#has ended

$response = "False" #Set default value in order to ensure the loop executes

#Loop until valid input is received


while ($response -ne "True") {

Clear-Host #Clear the Windows command console screen

#Prompt the player to play a new game


$response = Read-Host "`n`n Play again? (Y/N)"

#Validate the player's input #Keep playing


if ($response -eq "Y") {

#Reset default variable settings to get ready for a new round of play
$response = "True"
$terminate = "False"
$playGame = "True"
Clear-Board
$player = "X"
$moves = 0
$tie = "False"
}
elseif ($response -eq "N") { #Time to quit

Clear-Host #Clear the Windows command console screen


Write-host " `n`n Please return and play again soon."
Read-Host #Pause gameplay
$response = "True"
$terminate = "True"
}

else { #Invalid input received

Clear-Host #Clear the Windows command console screen


Write-Host "`n`n Invalid input. Please press Enter to try again."
Read-Host #Pause gameplay
}
}
}

You might also like