E. Final Program with Comments

Battleship – Function For Computer’s Boats Below the Actual Game Code

 

clc
clear

%% Set up scene

my_scene = simpleGameEngine(‘Battleship.png.png’, 84, 84);

%% Define Variables

numberboats = [1 2 3 4];
nothing_sprite = 1;
water_sprite = 2;
leftboat_sprite = 3;
sidewaysboat_sprite = 4;
rightboat_sprite = 5;
topboat_sprite = 6;
verticalboat_sprite = 7;
bottomboat_sprite = 8;
hit_sprite = 9;
miss_sprite = 10;

%Set variables for winning/losing equal to 0, so that when they are turned
%to true it ends the game
gameover = 0;
youwin = 0;

%% Empty Board with just water

board_display = water_sprite * ones(10,21);
board_display(:,11) = nothing_sprite;
drawScene(my_scene, board_display);

%% Players side of the board

for i = 1:4
%Place four ships on the board with a for loop
if i == 1 %Carrier
%The player enters coordinates of their choosing
disp(‘Enter the coordinates for the Carrier.’)
starting_x_coordinate_carrier = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_carrier = input(‘Choose a y coordinate(1-6): ‘);
d1 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
horizontal = 0;
vertical = 1;

%Set a loop to make the player redo the coordinates if it overlaps the
%edges
%For horizontal
if starting_x_coordinate_carrier >= 7 && d1 == 0

disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Carrier.’)
starting_x_coordinate_carrier = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_carrier = input(‘Choose a y coordinate(1-6): ‘);
d1 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
else

end
%Do the same for redoing a vertical boat
if starting_x_coordinate_carrier >= 11 && d1 == 1 && starting_y_coordinate_tugboat >= 7

disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Carrier.’)
starting_x_coordinate_carrier = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_carrier = input(‘Choose a y coordinate(1-6): ‘);
d1 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
else

end

%If the boat fits in those coordinates without overlapping or
%falling off of the edge, it can be placed
if d1 == horizontal
%Placing the sprites on the board for a horizontal boat
board_display(starting_x_coordinate_carrier, starting_y_coordinate_carrier) = leftboat_sprite;

board_display(starting_x_coordinate_carrier, starting_y_coordinate_carrier + 1) = sidewaysboat_sprite;
board_display(starting_x_coordinate_carrier, starting_y_coordinate_carrier + 2) = sidewaysboat_sprite;
board_display(starting_x_coordinate_carrier, starting_y_coordinate_carrier + 3) = sidewaysboat_sprite;

board_display(starting_x_coordinate_carrier, starting_y_coordinate_carrier + 4) = rightboat_sprite;
%Display the boat on the screen
drawScene(my_scene, board_display)

%The same is done for the vertical boats
else d1 == vertical

board_display(starting_x_coordinate_carrier, starting_y_coordinate_carrier) = topboat_sprite;

board_display(starting_x_coordinate_carrier + 1, starting_y_coordinate_carrier) = verticalboat_sprite;
board_display(starting_x_coordinate_carrier + 2, starting_y_coordinate_carrier) = verticalboat_sprite;
board_display(starting_x_coordinate_carrier + 3, starting_y_coordinate_carrier) = verticalboat_sprite;

board_display(starting_x_coordinate_carrier + 4, starting_y_coordinate_carrier) = bottomboat_sprite;

drawScene(my_scene, board_display)

end

%Ship number 2 is the battleship, repeat what was done on the first
%boat 3 more times for the submarine and the tugboat as well
elseif i == 2 %Battleship
disp(‘Enter the coordinates for the Battleship.’)
starting_x_coordinate_battleship = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_battleship = input(‘Choose a y coordinate(1-6): ‘);
d2 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
horizontal = 0;
vertical = 1;

%Set a loop to make the player redo the coordinates if it overlaps the
%edges
%For horizontal
if starting_x_coordinate_battleship >= 8 && d1 == 0
disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Battleship.’)
starting_x_coordinate_battleship = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_battleship = input(‘Choose a y coordinate(1-6): ‘);
d2 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);

else

end
%Do the same for vertical
if starting_x_coordinate_battleship >= 11 && d1 == 1 && starting_y_coordinate_battleship >= 8
disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Battleship.’)
starting_x_coordinate_battleship = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_battleship = input(‘Choose a y coordinate(1-6): ‘);
d2 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);

else

end
%Check for overlapping ships
if board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship) ~= 2 || board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship + 1) ~= 2 || board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship + 2) ~= 2 || board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship + 3) ~= 2
disp(‘Coordinates overlap other boats on the board.’)
disp(‘Enter the coordinates for the Battleship.’)
starting_x_coordinate_battleship = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_battleship = input(‘Choose a y coordinate(1-6): ‘);
d2 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
else

end

%If the ship does not overlap or fall off, it can be placed
if d2 == horizontal
board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship) = leftboat_sprite;

board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship + 1) = sidewaysboat_sprite;
board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship + 2) = sidewaysboat_sprite;

board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship + 3) = rightboat_sprite;

drawScene(my_scene, board_display)

battleship = [(starting_x_coordinate_battleship : starting_x_coordinate_battleship),(starting_y_coordinate_battleship : starting_y_coordinate_battleship + 3)];

else d2 == vertical;
board_display(starting_x_coordinate_battleship, starting_y_coordinate_battleship) = topboat_sprite;

board_display(starting_x_coordinate_battleship + 1, starting_y_coordinate_battleship) = verticalboat_sprite;
board_display(starting_x_coordinate_battleship + 2, starting_y_coordinate_battleship) = verticalboat_sprite;

board_display(starting_x_coordinate_battleship + 3, starting_y_coordinate_battleship) = bottomboat_sprite;

drawScene(my_scene, board_display)

battleship = [(starting_x_coordinate_battleship : starting_x_coordinate_battleship + 3),(starting_y_coordinate_battleship : starting_y_coordinate_battleship)];

end

%Ship number 3 is the submarine
elseif i == 3 %Submarine
disp(‘Enter the coordinates for the Submarine.’)
starting_x_coordinate_submarine = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_submarine = input(‘Choose a y coordinate(1-6): ‘);
d3 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
horizontal = 0;
vertical = 1;

%Set a loop to make the player redo the coordinates if it overlaps the
%edges
%For horizontal
if starting_x_coordinate_submarine >= 9 && d1 == 0
disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Submarine.’)
starting_x_coordinate_submarine = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_submarine = input(‘Choose a y coordinate(1-6): ‘);
d3 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);

else

end
%Do the same for vertical
if starting_x_coordinate_submarine >= 11 && d1 == 1 && starting_y_coordinate_submarine >= 9
disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Submarine.’)
starting_x_coordinate_submarine = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_submarine = input(‘Choose a y coordinate(1-6): ‘);
d3 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);

else

end
%Check for overlapping ships
if board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine) ~= 2 || board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine + 1) ~= 2 || board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine + 2) ~= 2
disp(‘Coordinates overlap other boats on the board.’)
disp(‘Enter the coordinates for the Battleship.’)
starting_x_coordinate_submarine = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_submarine = input(‘Choose a y coordinate(1-6): ‘);
d2 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
else

end

%If the ship won’t overlap or fall off of the edge, it can be
%placed at the desired coordinates.
if d3 == horizontal
board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine) = leftboat_sprite;

board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine + 1) = sidewaysboat_sprite;

board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine + 2) = rightboat_sprite;

drawScene(my_scene, board_display)

else d3 == vertical;
board_display(starting_x_coordinate_submarine, starting_y_coordinate_submarine) = topboat_sprite;

board_display(starting_x_coordinate_submarine + 1, starting_y_coordinate_submarine) = verticalboat_sprite;

board_display(starting_x_coordinate_submarine + 2, starting_y_coordinate_submarine) = bottomboat_sprite;

drawScene(my_scene, board_display)

end

%Boat number 4 is the tugboat
elseif i == 4 %Tugboat
disp(‘Enter the coordinates for the Tugboat.’)
starting_x_coordinate_tugboat = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_tugboat = input(‘Choose a y coordinate(1-6): ‘);
d4 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
horizontal = 0;
vertical = 1;

%Set a loop to make the player redo the coordinates if it overlaps the
%edges
%For horizontal
if starting_x_coordinate_tugboat >= 10 && d1 == 0
disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Tugboat.’)
starting_x_coordinate_tugboat = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_tugboat = input(‘Choose a y coordinate(1-6): ‘);
d4 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);

else

end
%Do the same for vertical
if starting_x_coordinate_tugboat >= 11 && d1 == 1 && starting_y_coordinate_tugboat >= 10
disp(‘Coordinates exceed the limits of the board.’)
disp(‘Enter the coordinates for the Tugboat.’)
starting_x_coordinate_tugboat = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_tugboat = input(‘Choose a y coordinate(1-6): ‘);
d4 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);

else

end
%Check for overlapping ships
if board_display(starting_x_coordinate_tugboat, starting_y_coordinate_tugboat) ~= 2 || board_display(starting_x_coordinate_tugboat, starting_y_coordinate_tugboat) ~= 2 || board_display(starting_x_coordinate_tugboat, starting_y_coordinate_tugboat + 1) ~= 2
disp(‘Coordinates overlap other boats on the board.’)
disp(‘Enter the coordinates for the Battleship.’)
starting_x_coordinate_tugboat = input(‘Choose an x coordinate(1-10): ‘);
starting_y_coordinate_tugboat = input(‘Choose a y coordinate(1-6): ‘);
d2 = input(‘Enter “1” if the boat is vertical, enter “0” if the boat is horizontal: ‘);
else

end

%If the boat fits without overlapping or falling off
if d4 == horizontal
board_display(starting_x_coordinate_tugboat, starting_y_coordinate_tugboat) = leftboat_sprite;

board_display(starting_x_coordinate_tugboat, starting_y_coordinate_tugboat + 1) = rightboat_sprite;

drawScene(my_scene, board_display)

else d4 == vertical;
board_display(starting_x_coordinate_tugboat, starting_y_coordinate_tugboat) = topboat_sprite;

board_display(starting_x_coordinate_tugboat + 1, starting_y_coordinate_tugboat) = bottomboat_sprite;

drawScene(my_scene, board_display)

end
end
end

%% Computers side of the board
%A function was used to load the computers side of the board
Locations = ComputerBoatsFunction();

%% Hits and misses: Taking Turns

%Player enters a coordinate
%When player1 == 1, it is the players turn. If not, it is the AI’s turn
player1 = 1;
gameover = 0;

while ~gameover

if player1 == 1
%Player fires
player_x_coordinate = input(‘Input a column number (1-10): ‘);
player_y_coordinate = input(‘Input a row number (1-10): ‘);
%Set coordinate numbers = to x and y
x = player_x_coordinate;
y = player_y_coordinate;

%Set a while loop for the players coordinates
while board_display(y,(x+11)) == hit_sprite || board_display(y,(x+11)) == miss_sprite

player_x_coordinate = input(‘Input a column number (1-10): ‘);
player_y_coordinate = input(‘Input a row number (1-10): ‘);

x = player_x_coordinate;
y = player_y_coordinate;

end

%When the coordinates hit a sprite, display a hit on the
%board
if Locations(y,x) ~= 0
board_display(y, (x+11)) = hit_sprite;
drawScene(my_scene, board_display)

Locations(y,x) = 0;

%When the coordinates display a miss, display a miss on the
%board
else % Locations(y,x) == 0
board_display(y,(x + 11)) = miss_sprite;
%Draw the scene for hits and misses
drawScene(my_scene, board_display)

%Switch flag to false so it goes to the computers turn

end

player1 = 0;

else % player1 == 0
%The commputer is a random AI, so their coordinates are random
x = randi(10);
y = randi(10);

%If the board display is any of the sprites for boats, display
%a hit
if (board_display(y,x) == 3) || (board_display(y,x) == 4) || (board_display(y,x) == 5) || (board_display(y,x) == 6) || (board_display(y,x) == 7) || (board_display(y,x) == 8) || (board_display(y,x) == 9)

board_display(y,x) = hit_sprite;

%If the board display is a water sprite for the random coordinates, display a miss
else
board_display(y,x) = miss_sprite;

end
%Draw scene to display hit or miss
drawScene(my_scene,board_display)

%Set flag back to player1 = 1 so it is their turn
player1 = 1;
end

%Check for sunken boats

if sum(sum(Locations)) == 0
disp(‘You win!’)

gameover = 1;
else

end

if sum(sum(board_display(1:10, 1:10) == hit_sprite)) == 14
disp(‘You lose!’)

gameover = 1;
else

end

end

Computer Boats Function

 

function [computerboats] = ComputerBoatsFunction()
%UNTITLED Summary of this function goes here

computerboats = zeros(10,10);

% Length of boats in the matrix below. Carrier(5), Battleship(4)
% Submarine(3), Tugboat(2)

lengthboat = [5,4,3,2];

%%Place each ship within a for loop

for shiplabel = 1:4

%%Flag set for while loop since we are trying to find a location where
%%the boat will fit

shiponboard = false;

while ~shiponboard
%%Keep trying to find a spot for the boats with flags. It will be
%%going randomly from horizontal to vertical
horizontal = randi([0 1]);

if horizontal

row = randi([1 10]);
%Depending on the length of the boat
column = randi([1 (11 – lengthboat(shiplabel))]);
%Depending on the length of the boat

%See if the location for the boat is empty by summing the values in
%the grid
%If it has a sum of zero then there is room for the boat to be
%located there.

if sum(computerboats(row,column:(column + lengthboat(shiplabel)-1))) == 0
%If true, put that lengthboat number in all of those places
computerboats(row,column:(column+lengthboat(shiplabel)-1)) = shiplabel;

%Set flag to true to break out of the loop

shiponboard = true;
end
else %vertical
% Do the same thing as the above part, but this time account
% for the edge of the boat. Only certain rows and columns are
% allowed
row = randi([1 (11-lengthboat(shiplabel))]);
column = randi([1 10]);

if sum(computerboats(row:(row + lengthboat(shiplabel) – 1), column)) == 0
computerboats(row:(row + lengthboat(shiplabel) – 1), column) = shiplabel;
shiponboard = true;
end
end
end
end

 

 

 

 

 

Connect Four

clc
clear

% Scene setup
scene = simpleGameEngine(‘ConnectFour.png’,86,101);

% Setup sprite variables
empty = 1;
red = 2;
black = 3;

% Display board
board_display = empty * ones(6,7);
drawScene(scene,board_display)
set(scene.my_figure,’WindowStyle’,’docked’) % Insert the figure to dock

% Assign players to colors / Row setup
fprintf(‘\nDetermine who is Player 1 and who is Player 2.\n’)
fprintf(‘\nNote that Player 1 will be red and make the first move, and that Player 2 will be black and make the second move.\n’)
fprintf(‘\nPay close attention to your inputs! An invalid move will crash the game.\n’)
win = 0;

% Start running game
while win == 0

% Prompt Player 1 to make move
fprintf(‘\nPlayer 1, your turn:\n’)
column = input(‘Enter column coordinate of intended play (1-7, left-to-right): ‘);
if board_display(6,column) == empty
row = 6;

elseif board_display(5,column) == empty
row = 5;

elseif board_display(4,column) == empty
row = 4;

elseif board_display(3,column) == empty
row = 3;

elseif board_display(2,column) == empty
row = 2;

elseif board_display(1,column) == empty
row = 1;

else
fprintf(‘\nInvalid move. Pay more attention next time and follow the rules! Better not crash the next game.\n’)
row = 0;

end

% Portray move to board
board_display(row,column) = red;
drawScene(scene,board_display)

% Check win

%Check horizontal win

check_horz1 = board_display(row,1:4);
unique(check_horz1);
if length(unique(check_horz1)) == 1 && unique(check_horz1) == 2;
win = 2;
end

check_horz2 = board_display(row,2:5);
unique(check_horz2);
if length(unique(check_horz2)) == 1 && unique(check_horz2) == 2;
win = 2;
end

check_horz3 = board_display(row,3:6);
unique(check_horz3);
if length(unique(check_horz3)) == 1 && unique(check_horz3) == 2;
win = 2;
end

check_horz4 = board_display(row,4:7);
unique(check_horz4);
if length(unique(check_horz4)) == 1 && unique(check_horz4) == 2;
win = 2;
end

% Check vertical win

check_vert1 = board_display(1:4,column);
unique(check_vert1);
if length(unique(check_vert1)) == 1 && unique(check_vert1) == 2;
win = 2;
end

check_vert2 = board_display(2:5,column);
unique(check_vert2);
if length(unique(check_vert2)) == 1 && unique(check_vert2) == 2;
win = 2;
end

check_vert3 = board_display(3:6,column);
unique(check_vert3);
if length(unique(check_vert3)) == 1 && unique(check_vert3) == 2;
win = 2;
end

%Check diagonal win (check 1 – 12; descending left to right)

sub_board = board_display(1:4,1:4);
check_diag1 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag1);
if length(unique(check_diag1)) == 1 && unique(check_diag1) == 2;
win = 2;
end

sub_board = board_display(2:5,1:4);
check_diag2 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag2);
if length(unique(check_diag2)) == 1 && unique(check_diag2) == 2;
win = 2;
end

sub_board = board_display(3:6,1:4);
check_diag3 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag3);
if length(unique(check_diag3)) == 1 && unique(check_diag3) == 2;
win = 2;
end

sub_board = board_display(1:4,2:5);
check_diag4 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag4);
if length(unique(check_diag4)) == 1 && unique(check_diag4) == 2;
win = 2;
end

sub_board = board_display(2:5,2:5);
check_diag5 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag5);
if length(unique(check_diag5)) == 1 && unique(check_diag5) == 2;
win = 2;
end

sub_board = board_display(3:6,2:5);
check_diag6 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag6);
if length(unique(check_diag6)) == 1 && unique(check_diag6) == 2;
win = 2;
end

sub_board = board_display(1:4,3:6);
check_diag7 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag7);
if length(unique(check_diag7)) == 1 && unique(check_diag7) == 2;
win = 2;
end

sub_board = board_display(2:5,3:6);
check_diag8 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag8);
if length(unique(check_diag8)) == 1 && unique(check_diag8) == 2;
win = 2;
end

sub_board = board_display(3:6,3:6);
check_diag9 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag9);
if length(unique(check_diag9)) == 1 && unique(check_diag9) == 2;
win = 2;
end

sub_board = board_display(1:4,4:7);
check_diag10 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag10);
if length(unique(check_diag10)) == 1 && unique(check_diag10) == 2;
win = 2;
end

sub_board = board_display(2:5,4:7);
check_diag11 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag11);
if length(unique(check_diag11)) == 1 && unique(check_diag11) == 2;
win = 2;
end

sub_board = board_display(3:6,4:7);
check_diag12 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag12);
if length(unique(check_diag12)) == 1 && unique(check_diag12) == 2;
win = 2;
end

%Check diagonal win (check 13 – 24; ascending left to right)

sub_board = board_display(1:4,1:4);
check_diag13 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag13);
if length(unique(check_diag13)) == 1 && unique(check_diag13) == 2;
win = 2;
end

sub_board = board_display(2:5,1:4);
check_diag14 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag14);
if length(unique(check_diag14)) == 1 && unique(check_diag14) == 2;
win = 2;
end

sub_board = board_display(3:6,1:4);
check_diag15 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag15);
if length(unique(check_diag15)) == 1 && unique(check_diag15) == 2;
win = 2;
end

sub_board = board_display(1:4,2:5);
check_diag16 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag16);
if length(unique(check_diag16)) == 1 && unique(check_diag16) == 2;
win = 2;
end

sub_board = board_display(2:5,2:5);
check_diag17 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag17);
if length(unique(check_diag17)) == 1 && unique(check_diag17) == 2;
win = 2;
end

sub_board = board_display(3:6,2:5);
check_diag18 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag18);
if length(unique(check_diag18)) == 1 && unique(check_diag18) == 2;
win = 2;
end

sub_board = board_display(1:4,3:6);
check_diag19 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag19);
if length(unique(check_diag19)) == 1 && unique(check_diag19) == 2;
win = 2;
end

sub_board = board_display(2:5,3:6);
check_diag20 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag20);
if length(unique(check_diag20)) == 1 && unique(check_diag20) == 2;
win = 2;
end

sub_board = board_display(3:6,3:6);
check_diag21 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag21);
if length(unique(check_diag21)) == 1 && unique(check_diag21) == 2;
win = 2;
end

sub_board = board_display(1:4,4:7);
check_diag22 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag22);
if length(unique(check_diag22)) == 1 && unique(check_diag22) == 2;
win = 2;
end

sub_board = board_display(2:5,4:7);
check_diag23 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag23);
if length(unique(check_diag23)) == 1 && unique(check_diag23) == 2;
win = 2;
end

sub_board = board_display(3:6,4:7);
check_diag24 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag24);
if length(unique(check_diag24)) == 1 && unique(check_diag24) == 2;
win = 2;
end

% Check draw

draw_check = board_display(1:6,1:7);
if draw_check(1:6,1:7) ~= 1
win = 1;
end

if win == 2 || win == 1
break
end

% Prompt Player 2 to make move
fprintf(‘\nPlayer 2, your turn:\n’)
column = input(‘Enter column coordinate of intended play (1-7, left-to-right): ‘);
if board_display(6,column) == empty
row = 6;

elseif board_display(5,column) == empty
row = 5;

elseif board_display(4,column) == empty
row = 4;

elseif board_display(3,column) == empty
row = 3;

elseif board_display(2,column) == empty
row = 2;

elseif board_display(1,column) == empty
row = 1;

else
fprintf(‘\nInvalid move. Pay more attention next time and follow the rules! Better not crash the next game.\n’)
row = 0;

end

% Portray move to board
board_display(row,column) = black;
drawScene(scene,board_display)

% Check win

%Check horizontal win

check_horz1 = board_display(row,1:4);
unique(check_horz1);
if length(unique(check_horz1)) == 1 && unique(check_horz1) == 3;
win = 3;
end

check_horz2 = board_display(row,2:5);
unique(check_horz2);
if length(unique(check_horz2)) == 1 && unique(check_horz2) == 3;
win = 3;
end

check_horz3 = board_display(row,3:6);
unique(check_horz3);
if length(unique(check_horz3)) == 1 && unique(check_horz3) == 3;
win = 3;
end

check_horz4 = board_display(row,4:7);
unique(check_horz4);
if length(unique(check_horz4)) == 1 && unique(check_horz4) == 3;
win = 3;
end

% Check vertical win

check_vert1 = board_display(1:4,column);
unique(check_vert1);
if length(unique(check_vert1)) == 1 && unique(check_vert1) == 3;
win = 3;
end

check_vert2 = board_display(2:5,column);
unique(check_vert2);
if length(unique(check_vert2)) == 1 && unique(check_vert2) == 3;
win = 3;
end

check_vert3 = board_display(3:6,column);
unique(check_vert3);
if length(unique(check_vert3)) == 1 && unique(check_vert3) == 3;
win = 3;
end

%Check diagonal win (check 1 – 12; descending left to right)

sub_board = board_display(1:4,1:4);
check_diag1 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag1);
if length(unique(check_diag1)) == 1 && unique(check_diag1) == 3;
win = 3;
end

sub_board = board_display(2:5,1:4);
check_diag2 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag2);
if length(unique(check_diag2)) == 1 && unique(check_diag2) == 3;
win = 3;
end

sub_board = board_display(3:6,1:4);
check_diag3 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag3);
if length(unique(check_diag3)) == 1 && unique(check_diag3) == 3;
win = 3;
end

sub_board = board_display(1:4,2:5);
check_diag4 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag4);
if length(unique(check_diag4)) == 1 && unique(check_diag4) == 3;
win = 3;
end

sub_board = board_display(2:5,2:5);
check_diag5 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag5);
if length(unique(check_diag5)) == 1 && unique(check_diag5) == 3;
win = 3;
end

sub_board = board_display(3:6,2:5);
check_diag6 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag6);
if length(unique(check_diag6)) == 1 && unique(check_diag6) == 3;
win = 3;
end

sub_board = board_display(1:4,3:6);
check_diag7 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag7);
if length(unique(check_diag7)) == 1 && unique(check_diag7) == 3;
win = 3;
end

sub_board = board_display(2:5,3:6);
check_diag8 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag8);
if length(unique(check_diag8)) == 1 && unique(check_diag8) == 3;
win = 3;
end

sub_board = board_display(3:6,3:6);
check_diag9 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag9);
if length(unique(check_diag9)) == 1 && unique(check_diag9) == 3;
win = 3;
end

sub_board = board_display(1:4,4:7);
check_diag10 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag10);
if length(unique(check_diag10)) == 1 && unique(check_diag10) == 3;
win = 3;
end

sub_board = board_display(2:5,4:7);
check_diag11 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag11);
if length(unique(check_diag11)) == 1 && unique(check_diag11) == 3;
win = 3;
end

sub_board = board_display(3:6,4:7);
check_diag12 = [sub_board(1,1),sub_board(2,2),sub_board(3,3),sub_board(4,4)];
unique(check_diag12);
if length(unique(check_diag12)) == 1 && unique(check_diag12) == 3;
win = 3;
end

%Check diagonal win (check 13 – 24; ascending left to right)

sub_board = board_display(1:4,1:4);
check_diag13 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag13);
if length(unique(check_diag13)) == 1 && unique(check_diag13) == 3;
win = 3;
end

sub_board = board_display(2:5,1:4);
check_diag14 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag14);
if length(unique(check_diag14)) == 1 && unique(check_diag14) == 3;
win = 3;
end

sub_board = board_display(3:6,1:4);
check_diag15 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag15);
if length(unique(check_diag15)) == 1 && unique(check_diag15) == 3;
win = 3;
end

sub_board = board_display(1:4,2:5);
check_diag16 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag16);
if length(unique(check_diag16)) == 1 && unique(check_diag16) == 3;
win = 3;
end

sub_board = board_display(2:5,2:5);
check_diag17 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag17);
if length(unique(check_diag17)) == 1 && unique(check_diag17) == 3;
win = 3;
end

sub_board = board_display(3:6,2:5);
check_diag18 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag18);
if length(unique(check_diag18)) == 1 && unique(check_diag18) == 3;
win = 3;
end

sub_board = board_display(1:4,3:6);
check_diag19 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag19);
if length(unique(check_diag19)) == 1 && unique(check_diag19) == 3;
win = 3;
end

sub_board = board_display(2:5,3:6);
check_diag20 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag20);
if length(unique(check_diag20)) == 1 && unique(check_diag20) == 3;
win = 3;
end

sub_board = board_display(3:6,3:6);
check_diag21 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag21);
if length(unique(check_diag21)) == 1 && unique(check_diag21) == 3;
win = 3;
end

sub_board = board_display(1:4,4:7);
check_diag22 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag22);
if length(unique(check_diag22)) == 1 && unique(check_diag22) == 3;
win = 3;
end

sub_board = board_display(2:5,4:7);
check_diag23 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag23);
if length(unique(check_diag23)) == 1 && unique(check_diag23) == 3;
win = 3;
end

sub_board = board_display(3:6,4:7);
check_diag24 = [sub_board(4,1),sub_board(3,2),sub_board(2,3),sub_board(1,4)];
unique(check_diag24);
if length(unique(check_diag24)) == 1 && unique(check_diag24) == 3;
win = 3;
end

% Check draw

draw_check = board_display(1:6,1:7);
if draw_check(1:6,1:7) ~= 1
win = 1;
end

if win == 2 || win == 1
break
end

end

% Display winner

if win == 2
fprintf(‘\nConnect Four! Player 1 Wins!\n’)

elseif win == 3
fprintf(‘\nConnect Four! Player 2 Wins!\n’)

elseif win == 1
fprintf(‘\nDraw\n’)

end