Tic-tac-toe winner check

조회 수: 17 (최근 30일)
Nathan Ross
Nathan Ross 2021년 4월 16일
댓글: Nathan Ross 2021년 4월 16일
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

채택된 답변

Walter Roberson
Walter Roberson 2021년 4월 16일
xmask = TTCboard == 1;
if all(xmask,1) || all(xmask,2) || all(diag(xmask)) || TEST_FOR_THE_OTHER_DIAGONAL
x wins
end
  댓글 수: 5
Walter Roberson
Walter Roberson 2021년 4월 16일
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 2021년 4월 16일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Labels and Annotations에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by