From aedcc52119bbf82dfdb0ed354680c160495c7e34 Mon Sep 17 00:00:00 2001 From: Thrasi Date: Thu, 23 Jan 2014 12:30:28 +0100 Subject: [PATCH] applet and application --- AppletChessGame.java | 32 +++++++ BoardGraphics.java | 181 +++++++++++++++++++++++++++++++++++++ GraphicalChessGame.java | 39 ++++++++ blackBishop.png | Bin 0 -> 3132 bytes blackKing.png | Bin 0 -> 5180 bytes blackKnight.png | Bin 0 -> 3087 bytes blackPawn.png | Bin 0 -> 1236 bytes blackQueen.png | Bin 0 -> 4547 bytes blackRook.png | Bin 0 -> 560 bytes chessApplet.java | 170 ++++++++++++++++++++++++++++++++++ chessAppletTest.java | 196 ++++++++++++++++++++++++++++++++++++++++ darkSquare.png | Bin 0 -> 455 bytes lightSquare.png | Bin 0 -> 455 bytes lwp.png | Bin 0 -> 13072 bytes whiteBishop.png | Bin 0 -> 5984 bytes whiteKing.png | Bin 0 -> 6622 bytes whiteKnight.png | Bin 0 -> 4661 bytes whitePawn.png | Bin 0 -> 3040 bytes whiteQueen.png | Bin 0 -> 9523 bytes whiteRook.png | Bin 0 -> 1771 bytes 20 files changed, 618 insertions(+) create mode 100644 AppletChessGame.java create mode 100644 BoardGraphics.java create mode 100644 GraphicalChessGame.java create mode 100644 blackBishop.png create mode 100644 blackKing.png create mode 100644 blackKnight.png create mode 100644 blackPawn.png create mode 100644 blackQueen.png create mode 100644 blackRook.png create mode 100644 chessApplet.java create mode 100644 chessAppletTest.java create mode 100644 darkSquare.png create mode 100644 lightSquare.png create mode 100644 lwp.png create mode 100644 whiteBishop.png create mode 100644 whiteKing.png create mode 100644 whiteKnight.png create mode 100644 whitePawn.png create mode 100644 whiteQueen.png create mode 100644 whiteRook.png diff --git a/AppletChessGame.java b/AppletChessGame.java new file mode 100644 index 0000000..c4ae928 --- /dev/null +++ b/AppletChessGame.java @@ -0,0 +1,32 @@ +package chessGraphics; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +import chess.*; + +public class AppletChessGame extends ChessGame{ + //BoardGraphics board; + + public AppletChessGame() { + super(); + } + + + @Override + public int promotePawnInterface() { + Object[] options = {"Rook", + "Knight", + "Bishop", + "Queen"}; + + return JOptionPane.showOptionDialog(new JFrame(), + "To what rank do you want to promote" + + " your pawn: ", + "Pawn Promotion", + JOptionPane.DEFAULT_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + options, + options[3]); + } +} diff --git a/BoardGraphics.java b/BoardGraphics.java new file mode 100644 index 0000000..2dced2c --- /dev/null +++ b/BoardGraphics.java @@ -0,0 +1,181 @@ +package chessGraphics; + +import javax.imageio.ImageIO; +import javax.swing.*; + +import chess.*; + +import java.awt.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class BoardGraphics extends JFrame { + private SquareButton[] boardDisplay = new SquareButton[64]; + // I might want it to be Image for scaleability! +// private Image[] pieceImages = new Image[12]; + private ImageIcon[] pieceImages = new ImageIcon[12]; + private Image darkSquareImg, lightSquareImg; + private Board board; + private ChessGame game; + private Piece movingPiece; + + public SquareButton getButton(int i) { + return (SquareButton)this.getComponent(i); + } + + + public BoardGraphics(ChessGame game) { + this.game = game; + this.board = game.board(); + setLayout(new GridLayout(8,8)); + + String[] images = {"whitePawn.png","blackPawn.png",// + "whiteRook.png","blackRook.png",// + "whiteKnight.png","blackKnight.png",// + "whiteBishop.png","blackBishop.png",// + "whiteQueen.png","blackQueen.png",// + "whiteKing.png","blackKing.png"}; + + try { + // scaling the squares makes the graphics much faster + darkSquareImg = ImageIO.read(new File("darkSquare.png")); + darkSquareImg = getScaledImage(darkSquareImg,60,60); + lightSquareImg = ImageIO.read(new File("lightSquare.png")); + lightSquareImg = getScaledImage(lightSquareImg,60,60); + int index = 0; + for (String img : images) { + Image pieceImg = ImageIO.read(new File(img)); + pieceImg = getScaledImage(pieceImg,60,60); +// pieceImages[index++] = pieceImg; + ImageIcon icon = new ImageIcon(pieceImg); + pieceImages[index++] = icon; + } + } catch (IOException e1) { + e1.printStackTrace(); + System.out.println("images failed to load"); + } + + for(int i=0; i<64; i++){ + int row = i/8; + int column = i%8; + + SquareButton squareBtn = new SquareButton(i); + squareBtn.setPreferredSize(new Dimension(60,60)); + squareBtn.addActionListener(new SquareListener(row,column)); + add(squareBtn); + boardDisplay[i] = squareBtn; + } + + setDefaultCloseOperation(EXIT_ON_CLOSE); + pack(); + setVisible(true); + } + + private class SquareListener implements ActionListener { + int row, column; + //Image background; + + public SquareListener(int row, int column) { + this.row = row; + this.column = column; + boolean lightSquare = (row%2==0 && (8*row+column)%2==0); + lightSquare = lightSquare || (row%2!=0 && (8*row+column)%2!=0); + } + + @Override + public void actionPerformed(ActionEvent event) { + + System.out.println("("+row+","+column+")"); + Square square = board.square(row, column); + + if (square.isOccupied() && square.piece().inTeamOf(game.king(game.player()))) { + movingPiece = board.square(row, column).piece(); + } else if (movingPiece != null) { + + try { + // game.play(movingPiece, square); + game.play(movingPiece.row(),movingPiece.column(),square.row(),square.column()); + + } catch (chess.MateException e) { + String winner = (game.player() == 0) ? "Black" : "White"; + + JOptionPane.showMessageDialog(new JFrame(), + winner + " wins!", + "Check Mate!", + JOptionPane.PLAIN_MESSAGE); + } catch (chess.StaleMateException e) { + JOptionPane.showMessageDialog(new JFrame(), + "It's a tie!", + "Stale Mate!", + JOptionPane.PLAIN_MESSAGE); + } finally { + repaint(); + movingPiece = null; + System.out.println(board); + } + } + } + } + + private Image getScaledImage(Image srcImg, int w, int h){ + //srcImg.getScaledInstance(arg0, arg1, arg2) USE THIS INSTEAD OF THIS METHOD + BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);//ARGB for the transparency + Graphics2D g2 = resizedImg.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g2.drawImage(srcImg, 0, 0, w, h, null); + g2.dispose(); + return resizedImg; + } + + class SquareButton extends JButton { + int number, row, column; + boolean lightSquare; + + public SquareButton(int number) { + super(); + this.number = number; + this.row = number/8; + this.column = number%8; + lightSquare = (row%2==0 && number%2==0) || (row%2!=0 && number%2!=0); + + setOpaque(false); + setContentAreaFilled(false); + setBorderPainted(false); + setFocusPainted(false); + } + + @Override + public void paintComponent(Graphics g) { + update(g); + } + + @Override + public void update(Graphics g) { + // FOR SCALING THINK ABOUT BUFFEREDIMAGE SINCE HEIGHT AND WIDTH + // ARE MORE ACCESSIBLE + + if (board.square(row,column).isOccupied()) { + int index = board.square(row,column).piece().imageIndex(); +// Image pieceImg = pieceImages[index]; +// ImageIcon icon = new ImageIcon(pieceImg); + ImageIcon icon = pieceImages[index]; + setIcon(icon); + } + else if (lightSquare) + { setIcon(new ImageIcon(lightSquareImg)); } + else + { setIcon(new ImageIcon(darkSquareImg)); } + super.paintComponent(g); + + } + } + + +} + + + + + diff --git a/GraphicalChessGame.java b/GraphicalChessGame.java new file mode 100644 index 0000000..36e1003 --- /dev/null +++ b/GraphicalChessGame.java @@ -0,0 +1,39 @@ +package chessGraphics; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +import chess.*; + +public class GraphicalChessGame extends ChessGame{ + BoardGraphics board; + + public GraphicalChessGame() { + super(); + board = new BoardGraphics(this); + } + + public BoardGraphics boardGraphics() { + return board; + } + @Override + public int promotePawnInterface() { + Object[] options = {"Rook", + "Knight", + "Bishop", + "Queen"}; + + return JOptionPane.showOptionDialog(new JFrame(), + "To what rank do you want to promote" + + " your pawn: ", + "Pawn Promotion", + JOptionPane.DEFAULT_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + options, + options[3]); + } + + public static void main(String[] args) { + GraphicalChessGame game = new GraphicalChessGame(); + } +} diff --git a/blackBishop.png b/blackBishop.png new file mode 100644 index 0000000000000000000000000000000000000000..53c9d808a54ddcc6fee519c3a6262a27d8e64f53 GIT binary patch literal 3132 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 literal 0 HcmV?d00001 diff --git a/blackRook.png b/blackRook.png new file mode 100644 index 0000000000000000000000000000000000000000..39bb1f2e36b7849f6b29e8dc0aa05ff0c97aa3bc GIT binary patch literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^kwBcy!3HE{cIt5gDb50q$YKTtZeb8+WSBKa0w^e1 z;u=vBoS#-wo>-L1;Fyx1l&avFo0y&&l$w}QS$HzlhJk@`ucwP+NX4x;cQ5)La$sn9 zm=y5Q)9ixauErgl$~zc0aLx`eOK9mkF#DLe%_O@l%ZE`LzyI|-+WeO%S?cbT(OUDmdJRXn%5 zUmlvHb7BIkq*01vTTbNNpjM4lyWVy$-d0@m>bb|iZO_imi(HoW`o`o#;)>=6x_u_D z4!+#1Zns`ff!iqM#H($a#gsY!3x2fU#=U;>_qoce+ePC~3&!!j>8Rap_2f~P-{I;< z&2aO1BpFjqH1SAoQg9YafmsTaRRo#^aVSXKD)d$VjJ0ej!OMR++D**bb)sh1i4RHs z$9Ml*^LyUp{sWe=Z(de}&)Gb|SNs{sILp;KZZan)OieNr3M)OWbbs~fW8b90nx-n> zEMWxt9puhmvG;ZtsPLym%1%3X{5IEg4XbSXyasa}tL*Gu2I^49Y*P5|x%l?)&eYQ5 fr(fwavN3#~8n`QFPx5(SY%_Se`njxgN@xNAmZJ8m literal 0 HcmV?d00001 diff --git a/chessApplet.java b/chessApplet.java new file mode 100644 index 0000000..a15e0b2 --- /dev/null +++ b/chessApplet.java @@ -0,0 +1,170 @@ +package chessGraphics; + +//import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JApplet; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +//import java.io.File; +//import java.io.IOException; +//import java.net.*; + + +import chess.*; + + +public class chessApplet extends JApplet {// implements ActionListener{ + private SquareButton[] boardDisplay = new SquareButton[64]; + // I might want it to be Image for scalability! +// private Image[] pieceImages = new Image[12]; + private ImageIcon[] pieceImages = new ImageIcon[12]; + private Image darkSquareImg, lightSquareImg; + private Board board; + private ChessGame game; + private Piece movingPiece; + + public void init() { + this.game = new AppletChessGame(); + this.board = game.board(); + setLayout(new GridLayout(8,8)); + + String[] images = {"whitePawn.png","blackPawn.png",// + "whiteRook.png","blackRook.png",// + "whiteKnight.png","blackKnight.png",// + "whiteBishop.png","blackBishop.png",// + "whiteQueen.png","blackQueen.png",// + "whiteKing.png","blackKing.png"}; + + + // scaling the squares makes the graphics much faster + + darkSquareImg = getImage(getCodeBase(),"darkSquare.png"); + darkSquareImg = getScaledImage(darkSquareImg,60,60); + lightSquareImg = getImage(getCodeBase(),"lightSquare.png"); + lightSquareImg = getScaledImage(lightSquareImg,60,60); + int index = 0; + for (String img : images) { + Image pieceImg = getImage(getCodeBase(),img); + pieceImg = getScaledImage(pieceImg,60,60); +// pieceImages[index++] = pieceImg; + ImageIcon icon = new ImageIcon(pieceImg); + pieceImages[index++] = icon; + } + + for(int i=0; i<64; i++){ + int row = i/8; + int column = i%8; + + SquareButton squareBtn = new SquareButton(i); + squareBtn.setPreferredSize(new Dimension(60,60)); + squareBtn.addActionListener(new SquareListener(row,column)); + add(squareBtn); + boardDisplay[i] = squareBtn; + } + validate(); + repaint(); + } + + private class SquareListener implements ActionListener { + int row, column; + //Image background; + + public SquareListener(int row, int column) { + this.row = row; + this.column = column; + boolean lightSquare = (row%2==0 && (8*row+column)%2==0); + lightSquare = lightSquare || (row%2!=0 && (8*row+column)%2!=0); + } + + @Override + public void actionPerformed(ActionEvent event) { + + Square square = board.square(row, column); + + if (square.isOccupied() && square.piece().inTeamOf(game.king(game.player()))) { + movingPiece = board.square(row, column).piece(); + } else if (movingPiece != null) { + + try { + // game.play(movingPiece, square); + game.play(movingPiece.row(),movingPiece.column(),square.row(),square.column()); + + } catch (chess.MateException e) { + String winner = (game.player() == 0) ? "Black" : "White"; + + JOptionPane.showMessageDialog(new JFrame(), + winner + " wins!", + "Check Mate!", + JOptionPane.PLAIN_MESSAGE); + } catch (chess.StaleMateException e) { + JOptionPane.showMessageDialog(new JFrame(), + "It's a tie!", + "Stale Mate!", + JOptionPane.PLAIN_MESSAGE); + } finally { + repaint(); + movingPiece = null; + } + } + } + } + + class SquareButton extends JButton { + int number, row, column; + boolean lightSquare; + + public SquareButton(int number) { + super(); + this.number = number; + this.row = number/8; + this.column = number%8; + lightSquare = (row%2==0 && number%2==0) || (row%2!=0 && number%2!=0); + + setOpaque(false); + setContentAreaFilled(false); + setBorderPainted(false); + setFocusPainted(false); + } + + @Override + public void paintComponent(Graphics g) { + update(g); + } + + @Override + public void update(Graphics g) { + // FOR SCALING THINK ABOUT BUFFEREDIMAGE SINCE HEIGHT AND WIDTH + // ARE MORE ACCESSIBLE + + if (board.square(row,column).isOccupied()) { + int index = board.square(row,column).piece().imageIndex(); +// Image pieceImg = pieceImages[index]; +// ImageIcon icon = new ImageIcon(pieceImg); + ImageIcon icon = pieceImages[index]; + setIcon(icon); + } + else if (lightSquare) + { setIcon(new ImageIcon(lightSquareImg)); } + else + { setIcon(new ImageIcon(darkSquareImg)); } + super.paintComponent(g); + + } + } + + private Image getScaledImage(Image srcImg, int w, int h){ + //srcImg.getScaledInstance(arg0, arg1, arg2) USE THIS INSTEAD OF THIS METHOD + BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);//ARGB for the transparency + Graphics2D g2 = resizedImg.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g2.drawImage(srcImg, 0, 0, w, h, null); + g2.dispose(); + return resizedImg; + } +} \ No newline at end of file diff --git a/chessAppletTest.java b/chessAppletTest.java new file mode 100644 index 0000000..b72d6a3 --- /dev/null +++ b/chessAppletTest.java @@ -0,0 +1,196 @@ +package chessGraphics; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JApplet; +import javax.swing.JButton; +//import javax.swing.JOptionPane; + +import javax.swing.JFrame; +import javax.swing.JOptionPane; + + +//import java.awt.Button; +//import java.applet.Applet; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +import chess.*; + + +public class chessAppletTest extends JApplet { + private SquareButton[] boardDisplay = new SquareButton[64]; + // I might want it to be Image for scaleability! +// private Image[] pieceImages = new Image[12]; + private ImageIcon[] pieceImages = new ImageIcon[12]; + private Image darkSquareImg, lightSquareImg; + private Board board; + private ChessGame game;// = new AppletChessGame(); + private Piece movingPiece; + + // the images are loaded differently when the applet is deployed, with getImage(getCodeBase(),name) + private String imgPath = "/Users/magnus/Documents/su/oop/eclipsWorkspace/ChessGraphics/"; + + public void init() { + this.game = new AppletChessGame(); + this.board = game.board(); + setLayout(new GridLayout(8,8)); + + String[] images = {"whitePawn.png","blackPawn.png",// + "whiteRook.png","blackRook.png",// + "whiteKnight.png","blackKnight.png",// + "whiteBishop.png","blackBishop.png",// + "whiteQueen.png","blackQueen.png",// + "whiteKing.png","blackKing.png"}; + + try { + // scaling the squares makes the graphics much faster + + darkSquareImg = ImageIO.read(new File(imgPath+"darkSquare.png")); + darkSquareImg = getScaledImage(darkSquareImg,60,60); + lightSquareImg = ImageIO.read(new File(imgPath+"lightSquare.png")); + lightSquareImg = getScaledImage(lightSquareImg,60,60); + int index = 0; + for (String img : images) { + Image pieceImg = ImageIO.read(new File(imgPath+img)); + pieceImg = getScaledImage(pieceImg,60,60); +// pieceImages[index++] = pieceImg; + ImageIcon icon = new ImageIcon(pieceImg); + pieceImages[index++] = icon; + } + } catch (IOException e1) { + e1.printStackTrace(); + System.out.println("images failed to load"); + } + + for(int i=0; i<64; i++){ + int row = i/8; + int column = i%8; + + SquareButton squareBtn = new SquareButton(i); + squareBtn.setPreferredSize(new Dimension(60,60)); + squareBtn.addActionListener(new SquareListener(row,column)); + add(squareBtn); + boardDisplay[i] = squareBtn; + } + validate(); + repaint(); + } + + private class SquareListener implements ActionListener { + int row, column; + //Image background; + + public SquareListener(int row, int column) { + this.row = row; + this.column = column; + boolean lightSquare = (row%2==0 && (8*row+column)%2==0); + lightSquare = lightSquare || (row%2!=0 && (8*row+column)%2!=0); + } + + @Override + public void actionPerformed(ActionEvent event) { + + System.out.println("("+row+","+column+")"); + Square square = board.square(row, column); + + if (square.isOccupied() && square.piece().inTeamOf(game.king(game.player()))) { + movingPiece = board.square(row, column).piece(); + } else if (movingPiece != null) { + + try { + // game.play(movingPiece, square); + game.play(movingPiece.row(),movingPiece.column(),square.row(),square.column()); + + } catch (chess.MateException e) { + String winner = (game.player() == 0) ? "Black" : "White"; + + JOptionPane.showMessageDialog(new JFrame(), + winner + " wins!", + "Check Mate!", + JOptionPane.PLAIN_MESSAGE); + } catch (chess.StaleMateException e) { + JOptionPane.showMessageDialog(new JFrame(), + "It's a tie!", + "Stale Mate!", + JOptionPane.PLAIN_MESSAGE); + } finally { + repaint(); + movingPiece = null; + System.out.println(board); + } + } + } + } + + private Image getScaledImage(Image srcImg, int w, int h) { + //srcImg.getScaledInstance(arg0, arg1, arg2) USE THIS INSTEAD OF THIS METHOD + BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);//ARGB for the transparency + Graphics2D g2 = resizedImg.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g2.drawImage(srcImg, 0, 0, w, h, null); + g2.dispose(); + return resizedImg; + } + + class SquareButton extends JButton { + int number, row, column; + boolean lightSquare; + + public SquareButton(int number) { + super(); + this.number = number; + this.row = number/8; + this.column = number%8; + lightSquare = (row%2==0 && number%2==0) || (row%2!=0 && number%2!=0); + + setOpaque(false); + setContentAreaFilled(false); + setBorderPainted(false); + setFocusPainted(false); + } + + @Override + public void paintComponent(Graphics g) { + update(g); + super.paintComponent(g); + } + + @Override + public void update(Graphics g) { + // FOR SCALING THINK ABOUT BUFFEREDIMAGE SINCE HEIGHT AND WIDTH + // ARE MORE ACCESSIBLE + + if (board.square(row,column).isOccupied()) { + int index = board.square(row,column).piece().imageIndex(); +// Image pieceImg = pieceImages[index]; +// ImageIcon icon = new ImageIcon(pieceImg); + ImageIcon icon = pieceImages[index]; + setIcon(icon); + } + else if (lightSquare) + { setIcon(new ImageIcon(lightSquareImg)); } + else + { setIcon(new ImageIcon(darkSquareImg)); } + + } + } +// @Override +// public void paint(Graphics g) { +// update(g); +// } +// public void update(Graphics g) { +// for (int i=0;i<64;i++) { +// boardDisplay[i].paint(this.getGraphics()); +// } +// } + +// @Override +// public void paint(Graphics g) { +// update(g); +// } +} \ No newline at end of file diff --git a/darkSquare.png b/darkSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..f188488b5b7e16aa2c74f90b3b74010e696a8d39 GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+uj0FoCO|{#S9GG!XV7ZFl&wkP*AeO zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|R4-r;B4q#jQ7&9C;ZO1ehHa zRvh7~`%uVNz+yA8pnv8PwpnYl`+^nvGwc+k1C_i4R2Q+ps3r|T)efORIORB{L&&95 z159x)a+#vwbP0l+XkK2TygTe~DWM4f6Gw&9 literal 0 HcmV?d00001 diff --git a/lwp.png b/lwp.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0d4265b029446fa7f666904ab60e19c14e9c7e GIT binary patch literal 13072 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 literal 0 HcmV?d00001 diff --git a/whitePawn.png b/whitePawn.png new file mode 100644 index 0000000000000000000000000000000000000000..3de526b2fba95c2eee29db13abf0149f5231408f GIT binary patch literal 3040 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 literal 0 HcmV?d00001