...
Code Block |
---|
package connectfour;
import java.util.ArrayList;
public class ConnectFour {
private ArrayList<ArrayList<Piece>> board;
private char player;
public ConnectFour() {
board = new ArrayList<ArrayList<Piece>>();
for (int r = 0; r < 7; r++) {
board.add(new ArrayList<Piece>());
for (int c = 0; c < 7; c++) {
board.get(r).add(new Piece(' '));
}
}
player = 'o';
}
private Piece getPiece(int r, int c) {
return board.get(r).get(c);
}
private void setPiece(int r, int c, Piece piece) {
board.get(r).set(c, piece);
}
public boolean drop(int c) {
if (getPiece(0, c).getValue() != ' ') {
return false;
} else {
for (int r = 6; r >= 0; r--) {
if (getPiece(r, c).getValue() == ' ') {
setPiece(r, c, new Piece(player));
return true;
}
}
return true;
}
}
public boolean hasWon() {
for (int r = 0; r < 7; r++) {
for (int c = 0; c < 7; c++) {
if (getPiece(r,c).getValue() != ' ' && hasWonFromPosition(r,c)) {
return true;
}
}
}
return false;
}
private boolean hasWonFromPosition(int r, int c) {
for (int dr = -1; dr <= 1; dr++) {
for (int dc = -1; dc <= 1; dc++) {
if (dr != 0 || dc != 0) {
if (hasWonFromPositionWithDirection(r,c,getPiece(r,c), dr, dc)) {
return true;
}
}
}
}
return false;
}
private boolean hasWonFromPositionWithDirection(int r, int c, Piece piece, int dr, int dc) {
int counter = 0;
while (0 <= r && r < 7 && 0 <= c && c < 7 && getPiece(r, c).getValue() == piece.getValue()) {
r += dr;
c += dc;
counter++;
}
return counter >= 4;
}
public char getPlayer() {
return player;
}
public void changePlayer() {
if (player == 'o') {
player = 'x';
} else {
player = 'o';
}
}
public String toString() {
String str = "";
for (int r = 0; r < 7; r++) {
str += "| ";
for (int c = 0; c < 7; c++) {
str += getPiece(r, c) + " ";
}
str += "|\n";
}
return str;
}
} |
...
Code Block |
---|
package connectfour;
import java.util.Scanner;
public class ConnectFourProgram {
ConnectFour cf;
public void init() {
cf = new ConnectFour();
}
public void run() {
Scanner scanner = new Scanner(System.in);
while (! cf.hasWon()) {
System.out.println(cf);
System.out.println("Player " + cf.getPlayer() + ", enter index of column to drop next piece: ");
int c = scanner.nextInt();
if (cf.drop(c) && ! cf.hasWon()) {
cf.changePlayer();
}
}
System.out.println(cf);
System.out.println("Congratulations player " + cf.getPlayer() + "! You have won the game.");
}
public static void main(String[] args) {
ConnectFourProgram cfp = new ConnectFourProgram();
cfp.init();
cfp.run();
}
} |
...