// Nik Johnson // 4-15-2024 // TA: Zachary Bi import java.util.*; public class ConnectFour extends AbstractStrategyGame { private char[][] board; private int currentPlayer; private String[] players; private List playerSymbols; public ConnectFour(String player1, String player2) { this.board = new char[6][7]; this.players = new String[2]; this.playerSymbols = new ArrayList<>(); this.currentPlayer = 0; players[0] = player1; players[1] = player2; playerSymbols.add('X'); playerSymbols.add('O'); // initialize empty board for (int i = 0; i < board.length; i++) { for (int n = 0; n < board[i].length; n++) { board[i][n] = ' '; } } } public String instructions() { String output = ""; output += "Welcome to Connect Four! This game consists of a 7x6 grid, each column of"; output += " which you may choose to 'drop' a disc down by inputting numbers 1-7.\n"; output += "Player 1's symbol is 'X', Player 2's is 'O'\n"; output += "To win, you must place 4 of your discs in a row, vertically or horizontally.\n"; output += "Have fun!"; return output; } // constructs game board in readable format // no parameters // returns formatted representation of game board public String toString() { String output = ""; for (char[] row : board) { for (char loc : row) { output += "[" + loc + "]"; } output += "\n"; } return output; } public int getWinner() { // rows for (int i = 0; i < board.length; i++) { for (int j = 0; j <= board[i].length - 4; j++) { char symbol = board[i][j]; if (symbol != ' ' && board[i][j + 1] == symbol && board[i][j + 2] == symbol && board[i][j + 3] == symbol) { return playerSymbols.indexOf(symbol) + 1; } } } // columns for (int j = 0; j < board[0].length; j++) { for (int i = 0; i <= board.length - 4; i++) { char symbol = board[i][j]; if (symbol != ' ' && board[i + 1][j] == symbol && board[i + 2][j] == symbol && board[i + 3][j] == symbol) { return playerSymbols.indexOf(symbol) + 1; } } } return -1; } public int getNextPlayer() { return this.currentPlayer + 1; } public void makeMove(Scanner input) { System.out.println(players[getNextPlayer() - 1] + ": Choose a column (1-7)"); int col = Integer.parseInt(input.next()) - 1; if (col < 0 || col > 6) { throw new IllegalArgumentException("selected column out of bounds"); } boolean notPlaced = true; for (int n = board.length - 1; n >= 0 && notPlaced; n--) { if (board[n][col] == ' ') { if (currentPlayer == 0) { board[n][col] = 'X'; } else if (currentPlayer == 1) { board[n][col] = 'O'; } notPlaced = false; } } if (currentPlayer == 0) { currentPlayer = 1; } else if (currentPlayer == 1) { currentPlayer = 0; } } }