import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; public class CheckersApplet extends JApplet { private Board b; private boolean pieceSelected = false; private int selectedRow, selectedColumn; private CheckersAI ai; private CheckersAI ai2; private boolean playerOneIsHuman; private boolean playerTwoIsHuman; public void init() { repaint(); } public CheckersApplet() { setUpPlayers(); //listens for player input class CheckersListener extends MouseAdapter implements KeyListener { private int toBoardCoordinates(int i) { return (i - (i % Board.SPACE_SIZE)) / Board.SPACE_SIZE; } public void mousePressed(MouseEvent e) { if(toBoardCoordinates(e.getX()) > Board.BOARD_SIZE - 1 || toBoardCoordinates(e.getY()) > Board.BOARD_SIZE - 1) return; if(pieceSelected) { int boardRow = toBoardCoordinates(e.getY()); int boardColumn = toBoardCoordinates(e.getX()); b.move(selectedRow, selectedColumn, boardRow, boardColumn); pieceSelected = false; } else { selectedRow = toBoardCoordinates(e.getY()); selectedColumn = toBoardCoordinates(e.getX()); pieceSelected = true; } repaint(); } public void keyTyped(KeyEvent k) {} public void keyPressed(KeyEvent k) { if(k.getKeyCode() == KeyEvent.VK_F2) { resetGame(); repaint(); } if(k.getKeyCode() == KeyEvent.VK_SPACE) { if(b.getTurn() == Piece.PLAYER_ONE && !playerOneIsHuman) { ai.doMove(b); } if(b.getTurn() == Piece.PLAYER_TWO && !playerTwoIsHuman) { ai2.doMove(b); } repaint(); } if(k.getKeyCode() == KeyEvent.VK_UP && pieceSelected && selectedRow != 0) { selectedRow--; repaint(); } if(k.getKeyCode() == KeyEvent.VK_DOWN && pieceSelected && selectedRow != Board.BOARD_SIZE - 1) { selectedRow++; repaint(); } if(k.getKeyCode() == KeyEvent.VK_LEFT && pieceSelected && selectedColumn != 0) { selectedColumn--; repaint(); } if(k.getKeyCode() == KeyEvent.VK_RIGHT && pieceSelected && selectedColumn != Board.BOARD_SIZE - 1) { selectedColumn++; repaint(); } if(isArrowKey(k.getKeyCode())) { pieceSelected = true; repaint(); } } private boolean isArrowKey(int k) { return k == KeyEvent.VK_UP || k == KeyEvent.VK_DOWN || k == KeyEvent.VK_LEFT || k == KeyEvent.VK_RIGHT; } public void keyReleased(KeyEvent k){} } MouseListener listener = new CheckersListener(); addMouseListener(listener); addKeyListener((KeyListener)listener); } //gets names and types of players in the game private void setUpPlayers() { String playerOneName = JOptionPane.showInputDialog("Player one's (white's) name:"); String playerOneIsHuman_ = JOptionPane.showInputDialog("Is player one a human or computer? (H/C)"); playerOneIsHuman = playerOneIsHuman_.equals("H") || playerOneIsHuman_.equals("h"); String playerTwoName = JOptionPane.showInputDialog("Player two's (yellow's) name:"); String playerTwoIsHuman_ = JOptionPane.showInputDialog("Is player two a human or computer? (H/C)"); playerTwoIsHuman = playerTwoIsHuman_.equals("H") || playerTwoIsHuman_.equals("h"); if(!playerOneIsHuman) ai = new BasicCheckersAI(Piece.PLAYER_ONE); if(!playerTwoIsHuman) ai2 = new BasicCheckersAI(Piece.PLAYER_TWO); b = new Board(playerOneName, playerTwoName); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; b.draw(g2); if(pieceSelected) { g2.setColor(Color.green); g2.draw(new Rectangle(Board.SPACE_SIZE * selectedColumn, Board.SPACE_SIZE * selectedRow, Board.SPACE_SIZE, Board.SPACE_SIZE)); } //clear the text area g2.setColor(Color.white); g2.fillRect(5, Board.SPACE_SIZE * Board.BOARD_SIZE + 1, Board.SPACE_SIZE * Board.BOARD_SIZE, 30); g2.setColor(Color.black); g2.setFont(new Font("SansSerif", Font.BOLD, 24)); g2.drawString(b.getMessage(), 5, Board.SPACE_SIZE * Board.BOARD_SIZE + 20); } public void resetGame() { setUpPlayers(); } public void destroy() { b.killGame(); } }