This commit is contained in:
2026-03-18 00:39:35 -07:00
commit b4fdc98f10
43 changed files with 85012 additions and 0 deletions

117
c1/ConnectFour.java Normal file
View File

@@ -0,0 +1,117 @@
// 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<Character> 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;
}
}
}