Tic-tac-toe winner check

13 views (last 30 days)
Nathan Ross
Nathan Ross on 16 Apr 2021
Commented: Nathan Ross on 16 Apr 2021
I have designed a game of tic tac toe and am now trying to implement some way of displaying a winner for either player . I know there are multiple ways of going about this but am unsure of which route to take. Should I be using "if" statements of some kind ? And how should i be defining my X or O in that scope? I have put my code below.
%start of game file
TTCboard = zeros(3,3);% creates a 3x3 matrix of zeros
% for creating the standard tic-tac-toe board in blue and red
figure
plot([0 3],[-1 -1], 'b','linewidth',1);% creates top horizontal line in board
hold on
plot([2 2],[0 -3], 'b','linewidth',1)% creates right-most vertical line
plot([3 3],[0 -3], 'r','linewidth',2)% boxes in right-most lines
plot([0 3],[-3 -3], 'r','linewidth',2)% boxes in the bottom-most lines
plot([0 3],[0 0], 'r','linewidth',2)% boxes in top -most lines
plot([0 3],[-2 -2], 'b','linewidth',1)% creates bottom horizontal line
plot([0 0],[0 -3], 'r','linewidth',2 ...
)% boxes in left-most lines
plot([1 1],[0 -3], 'b','linewidth',1)% creates left-most vertical line
title('welcome to tic-tac-toe! Good Luck!');% creates title above the game
axis off % keeps the X & y-axis off, creating a better looking natural board
hold off% ensures later commands are added to existing board
xticks([0 1 2 3]); yticks([0 1 2 3]);
xticklabels([]); yticklabels([]);
player = 'X'; % designates the first player as X
while true % when it is player x's turn, the following holds true
fprintf('%s click to place an X\n', player); % creates X in the cell clicked on
[x, y] = ginput(1);
x = floor(x)+0.5 ;
y = floor(y)+0.5;
while TTCboard(x+0.5,-(y-0.5)) ~= 0
disp('Please pick an open square')% when more than one X or O attempts to be entered in the same space, the message will appear in command window prompting the player to try again
[x, y] = ginput(1);
x = floor(x)+0.5;
y = floor(y)+0.5;
end
text(x,y,player, 'horizontalalignment', 'center', 'FontSize',24);% gives specific parameters to the X on the board and centers it in the clicked on cell
TTCboard(x+0.5,-(y-0.5)) = 1;
xticks([0 1 2 3]); yticks([0 1 2 3]);
xticklabels([]); yticklabels([]);
player2 = 'O'; % Designates the 2nd players turn after player 1
while true %for when it is player 2's turn, the following holds true
fprintf('%s click to place an O \n', player2);% instructs the player to put down their O in one of the available cells
[x, y] = ginput(1);
x = floor(x)+0.5;
y = floor(y)+0.5;
while TTCboard(x+0.5,-(y-0.5)) ~= 0
disp('Please pick an open square')% when more than one X or O attempts to be entered in the same space, the message will appear in command window.
[x, y] = ginput(1);
x = floor(x)+0.5;
y = floor(y)+0.5;
end
text(x,y,player2, 'horizontalalignment', 'center', 'FontSize',24);% specifies the style and size of the O used in the game and centers it
TTCboard(x+0.5,-(y-0.5)) = 2;% assigns a value to the O cell
break;
end
end
%end of game file

Accepted Answer

Walter Roberson
Walter Roberson on 16 Apr 2021
xmask = TTCboard == 1;
if all(xmask,1) || all(xmask,2) || all(diag(xmask)) || TEST_FOR_THE_OTHER_DIAGONAL
x wins
end
  5 Comments
Walter Roberson
Walter Roberson on 16 Apr 2021
That would be because you have not defined TEST_FOR_THE_OTHER_DIAGONAL which is obviously a placeholder in the code I posted that you are intended to rewrite into code that tests the anti-diagonal.
Also, when a player wins, you need to leave the overall for loop.
Nathan Ross
Nathan Ross on 16 Apr 2021
Oh yes of course. My apologies . I have not had much experience with mask functions . I will see where I can go from here. Thank you for your help.

Sign in to comment.

More Answers (0)

Categories

Find more on Labels and Annotations in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!