Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 51 additions & 98 deletions Checkers.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,7 @@

public class Checkers extends JFrame {
private static final long serialVersionUID = 1L;

public static final int ROWS = 8;
public static final int COLS = 8;
public static final int CELL = 8;
public static final int CELL_SIZE = 80;
public static final int CANVAS_WIDTH = CELL_SIZE * COLS;
public static final int CANVAS_HEIGHT = CELL_SIZE * ROWS;
public static final int GRID_WIDTH = 8;
public static final int GRID_WIDTH_HALF = GRID_WIDTH / 2;
public static final int CELL_PADDING = CELL_SIZE / 6;
public static final int SYMBOL_SIZE = CELL_SIZE - CELL_PADDING * 2;
public static final int SYMBOL_STROKE_WIDTH = 8;


public enum GameState {
PLAYING, DRAW, RED_WON, BLUE_WON;
}
Expand All @@ -46,6 +34,7 @@ public enum Seed {
private Seed idlePlayer;

private Seed[][] board;

private DrawCanvas canvas;

private JLabel statusBar;
Expand All @@ -56,6 +45,7 @@ public enum Seed {
public int getRow() {
return this.row;
}

public int getCol() {
return this.col;
}
Expand All @@ -70,50 +60,44 @@ public void setCol(int value) {

public Checkers() {
canvas = new DrawCanvas();
canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));


canvas.setPreferredSize(new Dimension(640, 640));
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent remove) {
int mouseX = remove.getX();
int mouseY = remove.getY();

int rowSelected = mouseY / CELL_SIZE;
int colSelected = mouseX / CELL_SIZE;
int rowSelected = mouseY / 80;
int colSelected = mouseX / 80;

if (currentState == GameState.PLAYING) {
if (rowSelected >= 0 && rowSelected < ROWS && colSelected >= 0 && colSelected < COLS && board[rowSelected][colSelected] == currentPlayer) {
if (rowSelected >= 0 && rowSelected < 8 && colSelected >= 0 && colSelected < 8 && board[rowSelected][colSelected] == currentPlayer) {
board[rowSelected][colSelected] = Seed.EMPTY;
setRow(rowSelected);
setCol(colSelected);
repaint();
}
else if (rowSelected >= 0 && rowSelected < ROWS && colSelected >= 0 && colSelected < COLS && board[rowSelected][colSelected] == idlePlayer) {
} else if (rowSelected >= 0 && rowSelected < 8 && colSelected >= 0 && colSelected < 8 && board[rowSelected][colSelected] == idlePlayer) {
board[rowSelected][colSelected] = idlePlayer;
}
else if (rowSelected >= 0 && rowSelected < ROWS && colSelected >= 0 && colSelected < COLS && board[rowSelected][colSelected] == Seed.EMPTY) {
} else if (rowSelected >= 0 && rowSelected < 8 && colSelected >= 0 && colSelected < 8 && board[rowSelected][colSelected] == Seed.EMPTY) {
board[rowSelected][colSelected] = Seed.EMPTY;
}

}

}
});

canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent place) {
int mouseX1 = place.getX();
int mouseY1 = place.getY();
int mouseY2 = getRow();
int mouseX2 = getCol();
int rowSelected1 = mouseY1 / CELL_SIZE;
int colSelected1 = mouseX1 / CELL_SIZE;
int rowSelected1 = mouseY1 / 80;
int colSelected1 = mouseX1 / 80;
int rowJump;
int colJump;

if (currentState == GameState.PLAYING) {
if (rowSelected1 >= 0 && rowSelected1 < ROWS && colSelected1 >= 0 && colSelected1 < COLS &&
if (rowSelected1 >= 0 && rowSelected1 < 8 && colSelected1 >= 0 && colSelected1 < 8 &&
(rowSelected1 == mouseY2 + 1 && colSelected1 == mouseX2 + 1)
|| (rowSelected1 == mouseY2 - 1 && colSelected1 == mouseX2 - 1)
|| (rowSelected1 == mouseY2 - 1 && colSelected1 == mouseX2 + 1)
Expand All @@ -125,52 +109,41 @@ public void mouseReleased(MouseEvent place) {
colJump = mouseX2 + 2;
board[rowJump][colJump] = currentPlayer;
updateGame(currentPlayer, rowJump, colJump);
System.out.println("down right move hit........");
currentPlayer = (currentPlayer == Seed.RED) ? Seed.BLUE : Seed.RED;
idlePlayer = (currentPlayer == Seed.BLUE) ? Seed.RED : Seed.BLUE;
}
//TODO: Fix this if statement, piece does not move if trying to jump opponent in the upper right direction
else if ((rowSelected1 == mouseY2 - 1 && colSelected1 == mouseX2 - 1) && board[rowSelected1][colSelected1] == idlePlayer) {
} else if ((rowSelected1 == mouseY2 - 1 && colSelected1 == mouseX2 - 1) && board[rowSelected1][colSelected1] == idlePlayer) {
board[rowSelected1][colSelected1] = Seed.EMPTY;
rowJump = mouseY2 - 2;
colJump = mouseX2 - 2;
board[rowJump][colJump] = currentPlayer;
updateGame(currentPlayer, rowJump, colJump);
System.out.println("up left move hit...");
currentPlayer = (currentPlayer == Seed.RED) ? Seed.BLUE : Seed.RED;
idlePlayer = (currentPlayer == Seed.BLUE) ? Seed.RED : Seed.BLUE;
}
else if ((rowSelected1 == mouseY2 - 1 && colSelected1 == mouseX2 + 1) && board[rowSelected1][colSelected1] == idlePlayer) {
} else if ((rowSelected1 == mouseY2 - 1 && colSelected1 == mouseX2 + 1) && board[rowSelected1][colSelected1] == idlePlayer) {
board[rowSelected1][colSelected1] = Seed.EMPTY;
rowJump = mouseY2 - 2;
colJump = mouseX2 + 2;
board[rowJump][colJump] = currentPlayer;
updateGame(currentPlayer, rowJump, colJump);
System.out.println("up right move hit................");
currentPlayer = (currentPlayer == Seed.RED) ? Seed.BLUE : Seed.RED;
idlePlayer = (currentPlayer == Seed.BLUE) ? Seed.RED : Seed.BLUE;
}
else if ((rowSelected1 == mouseY2 + 1 && colSelected1 == mouseX2 - 1) && board[rowSelected1][colSelected1] == idlePlayer) {
} else if ((rowSelected1 == mouseY2 + 1 && colSelected1 == mouseX2 - 1) && board[rowSelected1][colSelected1] == idlePlayer) {
board[rowSelected1][colSelected1] = Seed.EMPTY;
rowJump = mouseY2 + 2;
colJump = mouseX2 - 2;
board[rowJump][colJump] = currentPlayer;
updateGame(currentPlayer, rowJump, colJump);
System.out.println("down left move hit........");
currentPlayer = (currentPlayer == Seed.RED) ? Seed.BLUE : Seed.RED;
idlePlayer = (currentPlayer == Seed.BLUE) ? Seed.RED : Seed.BLUE;
}
else{
} else {
board[rowSelected1][colSelected1] = currentPlayer;
updateGame(currentPlayer, rowSelected1, colSelected1);


currentPlayer = (currentPlayer == Seed.RED) ? Seed.BLUE : Seed.RED;
idlePlayer = (currentPlayer == Seed.BLUE) ? Seed.RED : Seed.BLUE;
}

}
else {
} else {
board[mouseY2][mouseX2] = currentPlayer;
}
} else {
Expand All @@ -195,23 +168,25 @@ else if ((rowSelected1 == mouseY2 + 1 && colSelected1 == mouseX2 - 1) && board[r

setTitle("Checkers");
setVisible(true);
board = new Seed[ROWS][COLS];

board = new Seed[8][8];
initGame();
}
}

public void initGame() {
for (int row = 0; row < ROWS; ++row) {
for (int col = 0; col < COLS; ++col) {
for (int row = 0; row < 8; ++row) {
for (int col = 0; col < 8; ++col) {
if(row % 2 == 0) {
if(col % 2 == 0) {
board[row][col] = Seed.EMPTY;
}
}

if(row % 2 == 1){
if (col % 2 == 1) {
board[row][col] = Seed.EMPTY;
}
}

board[0][0] = Seed.RED;
board[0][2] = Seed.RED;
board[0][4] = Seed.RED;
Expand Down Expand Up @@ -246,8 +221,8 @@ public void initGame() {
currentState = GameState.PLAYING;
currentPlayer = Seed.RED;
idlePlayer = Seed.BLUE;

}

public void updateGame(Seed theSeed, int rowSelected, int colSelected) {
if (hasWon(theSeed, rowSelected, colSelected) == Seed.RED) {
currentState = GameState.RED_WON;
Expand All @@ -265,30 +240,27 @@ public boolean isDraw() {
}
return true;
}

public Seed hasWon (Seed theSeed, int rowSelected, int colSelected) {
//TODO: Modify hasWon to be a victory for the game "Checkers," not Tic-Tac-Toe
int countRed = 0;
int countBlue = 0;
for(row = 0; row <= 7; row++) {
for(col = 0; col <= 7; col++) {
if(board[row][col] == Seed.RED) {
countRed++;
}
else if(board[row][col] == Seed.BLUE) {
} else if(board[row][col] == Seed.BLUE) {
countBlue++;
}
else {
} else {
continue;
}
}
}
if(countRed == 0) {

if (countRed == 0) {
return Seed.BLUE;
}
else if(countBlue == 0) {
} else if (countBlue == 0) {
return Seed.RED;
}
else {
} else {
return Seed.EMPTY;
}
}
Expand All @@ -300,67 +272,48 @@ class DrawCanvas extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.BLACK);

/*g.setColor(Color.WHITE);
for (int cell = 0; cell < CELL; ++cell) {
g.fillRect(CELL_SIZE * cell, CELL_SIZE * cell, CELL_SIZE, CELL_SIZE); //PAINTS CELLS BLUE, DIAGONAL FROM TOP LEFT CORNER TO LOWER RIGHT CORNER.
g.fillRect((80*2) + CELL_SIZE * cell, CELL_SIZE * cell, CELL_SIZE, CELL_SIZE); //PAINTS CELL BLUE, DIAGONAL FROM TOP LEFT (TWO TO THE RIGHT) TO BOTTOM
g.fillRect((80*4) + CELL_SIZE * cell, CELL_SIZE * cell, CELL_SIZE, CELL_SIZE);
g.fillRect((80*6) + CELL_SIZE * cell, CELL_SIZE * cell, CELL_SIZE, CELL_SIZE);
g.fillRect((80*8) + CELL_SIZE * cell, CELL_SIZE * cell, CELL_SIZE, CELL_SIZE);
g.fillRect(CELL_SIZE * cell, (80*2) + CELL_SIZE * cell, CELL_SIZE, CELL_SIZE); //PAINTS CELL BLUE, DIAGONAL FROM TOP LEFT (TWO TO THE LEFT/DOWN) TO BOTTOM
g.fillRect(CELL_SIZE * cell, (80*4) + CELL_SIZE * cell, CELL_SIZE, CELL_SIZE);
g.fillRect(CELL_SIZE * cell, (80*6) + CELL_SIZE * cell, CELL_SIZE, CELL_SIZE);
g.fillRect(CELL_SIZE * cell, (80*8) + CELL_SIZE * cell, CELL_SIZE, CELL_SIZE); //LINES 163-178 COMPLETED ON TUESDAY, MARCH 31st 2015
}*/
Graphics2D g2d = (Graphics2D)g;
g2d.setStroke(new BasicStroke(SYMBOL_STROKE_WIDTH, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));

g2d.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
for (int row = 0; row < ROWS; ++row) {
for (int col = 0; col < COLS; ++col) {
int x1 = col * CELL_SIZE + CELL_PADDING;
int y1 = row * CELL_SIZE + CELL_PADDING;
int x1 = col * (80 + (80 / 6));
int y1 = row * (80 + (80 / 6));

int x2 = col * CELL_SIZE;
int y2 = row * CELL_SIZE;
int x2 = col * 80;
int y2 = row * 80;
if (board[row][col] == Seed.EMPTY) {
g2d.setColor(Color.LIGHT_GRAY);
for (int cell = 0; cell < CELL; ++cell) {
g2d.fillRect(x2, y2, CELL_SIZE, CELL_SIZE);
for (int cell = 0; cell < 8; ++cell) {
g2d.fillRect(x2, y2, 80, 80);
}
}

else if (board[row][col] == Seed.RED) {
} else if (board[row][col] == Seed.RED) {
g2d.setColor(Color.LIGHT_GRAY);
g2d.fillRect(x2, y2, CELL_SIZE, CELL_SIZE);
g2d.fillRect(x2, y2, 80, 80);
g2d.setColor(Color.RED);
g2d.fillOval(x1, y1, SYMBOL_SIZE, SYMBOL_SIZE);
}
else if (board[row][col] == Seed.BLUE) {
g2d.fillOval(x1, y1, (80 - (80 / 6) * 2), (80 - (80 / 6) * 2));
} else if (board[row][col] == Seed.BLUE) {
g2d.setColor(Color.LIGHT_GRAY);
g2d.fillRect(x2, y2, CELL_SIZE, CELL_SIZE);
g2d.fillRect(x2, y2, 80, 80);
g2d.setColor(Color.BLUE);
g2d.fillOval(x1, y1, SYMBOL_SIZE, SYMBOL_SIZE);
g2d.fillOval(x1, y1, (80 - (80 / 6) * 2), (80 - (80 / 6) * 2));
}
}
}
if (currentState == GameState.PLAYING) {
statusBar.setForeground(Color.BLUE);
if (currentPlayer == Seed.RED) {
statusBar.setText("RED's Turn!");
}
else {
} else {
statusBar.setText("BLUEs's Turn!");
}
}
else if (currentState == GameState.DRAW) {
} else if (currentState == GameState.DRAW) {
statusBar.setForeground(Color.RED);
statusBar.setText("Draw! Click to Play Again!");
}
else if (currentState == GameState.RED_WON) {
} else if (currentState == GameState.RED_WON) {
statusBar.setForeground(Color.RED);
statusBar.setText("RED Won! Click to Play Again");
}
else if (currentState == GameState.BLUE_WON) {
} else if (currentState == GameState.BLUE_WON) {
statusBar.setForeground(Color.RED);
statusBar.setText("BLUE Won! Click to PLay Again!");
}
Expand Down