init
This commit is contained in:
117
c1/ConnectFour.java
Normal file
117
c1/ConnectFour.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user