Topics: User Defined Functions and MATLAB Conditionals A Childrens game studio n
ID: 3856738 • Letter: T
Question
Topics: User Defined Functions and MATLAB Conditionals
A Childrens game studio needs you to write a MATLAB Program to allow two players to play the game Tic-Tac-Toe on a computer:
This is a two player (X's and O's) board game.
The game board is a 3 X 3 grid, where each location can hold either an 'X' an 'O' or a space (empty)
Note: we will linearize the grid and refer to the its locations as 1 - 9, for conveyance.
The players take turns placing their mark into one of the (empty) locations in the grid.
The game is won when a player has their mark in all three locations of any row, column, or diagonal.
The game can also reach a stalemate: neither player has won (by above criteria) however all there are no more empty locations in the grid.
Outline:
Create a MATLAB Script .m file
Establish variable(s) to represent the nine board locations
Create the game loop
i.Display the current state of the board – using separate displayBoard function
ii.Get a “valid” move location – note this can only be an empty location [1, 9]
iii.Modify the board variable(s)
iv.Check for a win and report it if so – game must end
v.Check for a stalemate – game must end
Create a MATLAB Function .m file
Establish its name (displayBoard), input(s) , and output (there really is not any)
Write the necessary MATLAB commands to display the Tic-Tac-Toe board, using the given input(s)
Make sure to test your script and function when they are done¸
Notes(s):
Keep track of the total number of moves, for an easy stalemate detection.
Your location choice user-validation loop must also not accept any location that is not currently empty.
At times things will feel very tedious - doing the "same" thing nine times ...
Sample Run(s):
Welcome to Tic-Tac-Toe : X goes first
-------------------------------------
| |
---------------
| |
---------------
| |
Please enter location to move [1 - 9] : 10
Please enter location to move [1 - 9] : -1
Please enter location to move [1 - 9] : 1
X | |
---------------
| |
---------------
| |
Please enter location to move [1 - 9] : 1
Please enter location to move [1 - 9] : 2
X | O |
---------------
| |
---------------
| |
Please enter location to move [1 - 9] : 3
X | O | X
---------------
| |
---------------
| |
Please enter location to move [1 - 9] : 4
X | O | X
---------------
O | |
---------------
| |
Please enter location to move [1 - 9] : 5
X | O | X
---------------
O | X |
---------------
| |
Please enter location to move [1 - 9] : 6
X | O | X
---------------
O | X | O
---------------
| |
Please enter location to move [1 - 9] : 7
X | O | X
---------------
O | X | O
---------------
X | |
Congrats - X Wins!
Explanation / Answer
state = [[-1 -1 -1]
[-1 -1 -1]
[-1 -1 -1]];
function displayBoard(state)
for i = (1:3)
for j = (1:3)
if state(i,j) == -1
fprintf('%c | ', ' ');
elseif state(i,j) == 1
fprintf('%c | ', 'X');
else
fprintf('%c | ', 'o');
end
end
disp(" -----------");
end
end
function valid = isValidMove(state, row, col)
valid = false;
if state(row,col) == -1
valid = true;
end
end
function won = won(state)
% Horizontal Checks
if (state(1,1) == state(1,2) && state(1,1) == state(1,3) && state(1,1) ~= -1)
won = state(1,1);
elseif (state(2,1) == state(2,2) && state(2,1) == state(2,3) && state(2,1) ~= -1)
won = state(2,1);
elseif (state(3,1) == state(3,2) && state(3,1) == state(3,3) && state(3,1) ~= -1)
won = state(3,1);
% Vertical Checks
elseif (state(1,1) == state(2,1) && state(1,1) == state(3,1) && state(3,1) ~= -1)
won = state(1,1);
elseif (state(1,2) == state(2,2) && state(1,2) == state(3,2) && state(1,2) ~= -1)
won = state(1,2);
elseif (state(1,3) == state(2,3) && state(1,3) == state(3,3) && state(1,3) ~= -1)
won = state(1,3);
% Diagonal Check
elseif (state(1,1) == state(2,2) && state(1,1) == state(3,3) && state(1,1) ~= -1)
won = state(1,1);
elseif (state(1,3) == state(2,2) && state(1,3) == state(3,1) && state(2,2) ~= -1)
won = state(1,3);
% If no more slots are open, it's a tie
elseif ~ismember(state, -1)
won = 0;
else
won = -1;
end
end
player = 1;
while (true)
% take Input
prompt = 'Please enter location to move [1 - 9] : ';
pos = input(prompt);
% Check if the input is within the range
if (pos>9 && pos <1)
disp("Incorrect option. Please re-enter");
continue;
end
% Get the 2D, row and column
row = fix((pos-1)/3)+1;
col = mod(pos,3);
if (col == 0)
col = 3;
end
% 1. Check if the move is valid
% 2. Make the move
% 3. Check if the game has ended
if (isValidMove(state, row, col)==false)
disp("Incorrect move. Please re-enter");
continue;
end
state(row, col) = player;
winner = won(state)
if (winner == 1 || winner == 2)
fprintf("Player %d has won! ", winner);
displayBoard(state);
break;
end
if (winner == 0)
fprintf("The game has been a tie ");
displayBoard(state);
break;
end
% Flip Player
if (player == 1)
player = 2;
else
player = 1;
end
% Display current state of the Board
displayBoard(state);
end
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.