From 8083297010785c3e69d00f5e239cbf911f9c1bbe Mon Sep 17 00:00:00 2001 From: Teo Blaise Kaplanski <teobk@macbook-air-de-teo.home> Date: Wed, 23 Dec 2020 22:14:06 +0100 Subject: [PATCH] rendu --- projetechecs-master/.classpath | 6 + projetechecs-master/.gitignore | 1 + projetechecs-master/.project | 17 ++ projetechecs-master/Bishop.java | 34 +++ projetechecs-master/Board.java | 143 ++++++++++++ projetechecs-master/ChessBot.java | 41 ++++ projetechecs-master/ChessColor.java | 4 + projetechecs-master/ChessUI.java | 213 ++++++++++++++++++ projetechecs-master/Coordinates.java | 29 +++ projetechecs-master/FromTo.java | 17 ++ projetechecs-master/GameUI.java | 150 ++++++++++++ projetechecs-master/Human.java | 14 ++ projetechecs-master/King.java | 38 ++++ projetechecs-master/Knight.java | 35 +++ projetechecs-master/Main.java | 9 + projetechecs-master/Move.java | 29 +++ projetechecs-master/Pawn.java | 37 +++ projetechecs-master/Piece.java | 66 ++++++ projetechecs-master/Player.java | 61 +++++ projetechecs-master/Queen.java | 43 ++++ projetechecs-master/Rook.java | 33 +++ projetechecs-master/TestChess.java | 76 +++++++ .../boardConfigurationFiles/BackLine.txt | 16 ++ .../boardConfigurationFiles/FullBoard.txt | 32 +++ .../boardConfigurationFiles/KingsOnly.txt | 3 + .../boardConfigurationFiles/check.txt | 3 + .../boardConfigurationFiles/check2.txt | 4 + .../boardConfigurationFiles/checkMate.txt | 4 + .../boardConfigurationFiles/checkMate2.txt | 4 + projetechecs-master/img/Chess_bdt60.png | Bin 0 -> 1260 bytes projetechecs-master/img/Chess_blt60.png | Bin 0 -> 1944 bytes projetechecs-master/img/Chess_kdt60.png | Bin 0 -> 2485 bytes projetechecs-master/img/Chess_klt60.png | Bin 0 -> 2279 bytes projetechecs-master/img/Chess_ndt60.png | Bin 0 -> 1516 bytes projetechecs-master/img/Chess_nlt60.png | Bin 0 -> 1878 bytes projetechecs-master/img/Chess_pdt60.png | Bin 0 -> 797 bytes projetechecs-master/img/Chess_plt60.png | Bin 0 -> 1294 bytes projetechecs-master/img/Chess_qdt60.png | Bin 0 -> 2267 bytes projetechecs-master/img/Chess_qlt60.png | Bin 0 -> 2637 bytes projetechecs-master/img/Chess_rdt60.png | Bin 0 -> 725 bytes projetechecs-master/img/Chess_rlt60.png | Bin 0 -> 933 bytes projetechecs-master/readme.md | 78 +++++++ 42 files changed, 1240 insertions(+) create mode 100644 projetechecs-master/.classpath create mode 100644 projetechecs-master/.gitignore create mode 100644 projetechecs-master/.project create mode 100644 projetechecs-master/Bishop.java create mode 100644 projetechecs-master/Board.java create mode 100644 projetechecs-master/ChessBot.java create mode 100644 projetechecs-master/ChessColor.java create mode 100644 projetechecs-master/ChessUI.java create mode 100644 projetechecs-master/Coordinates.java create mode 100644 projetechecs-master/FromTo.java create mode 100644 projetechecs-master/GameUI.java create mode 100644 projetechecs-master/Human.java create mode 100644 projetechecs-master/King.java create mode 100644 projetechecs-master/Knight.java create mode 100644 projetechecs-master/Main.java create mode 100644 projetechecs-master/Move.java create mode 100644 projetechecs-master/Pawn.java create mode 100644 projetechecs-master/Piece.java create mode 100644 projetechecs-master/Player.java create mode 100644 projetechecs-master/Queen.java create mode 100644 projetechecs-master/Rook.java create mode 100644 projetechecs-master/TestChess.java create mode 100644 projetechecs-master/boardConfigurationFiles/BackLine.txt create mode 100644 projetechecs-master/boardConfigurationFiles/FullBoard.txt create mode 100644 projetechecs-master/boardConfigurationFiles/KingsOnly.txt create mode 100644 projetechecs-master/boardConfigurationFiles/check.txt create mode 100644 projetechecs-master/boardConfigurationFiles/check2.txt create mode 100644 projetechecs-master/boardConfigurationFiles/checkMate.txt create mode 100644 projetechecs-master/boardConfigurationFiles/checkMate2.txt create mode 100644 projetechecs-master/img/Chess_bdt60.png create mode 100644 projetechecs-master/img/Chess_blt60.png create mode 100644 projetechecs-master/img/Chess_kdt60.png create mode 100644 projetechecs-master/img/Chess_klt60.png create mode 100644 projetechecs-master/img/Chess_ndt60.png create mode 100644 projetechecs-master/img/Chess_nlt60.png create mode 100644 projetechecs-master/img/Chess_pdt60.png create mode 100644 projetechecs-master/img/Chess_plt60.png create mode 100644 projetechecs-master/img/Chess_qdt60.png create mode 100644 projetechecs-master/img/Chess_qlt60.png create mode 100644 projetechecs-master/img/Chess_rdt60.png create mode 100644 projetechecs-master/img/Chess_rlt60.png create mode 100644 projetechecs-master/readme.md diff --git a/projetechecs-master/.classpath b/projetechecs-master/.classpath new file mode 100644 index 0000000..07661e7 --- /dev/null +++ b/projetechecs-master/.classpath @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="src" path=""/> + <classpathentry kind="output" path=""/> +</classpath> diff --git a/projetechecs-master/.gitignore b/projetechecs-master/.gitignore new file mode 100644 index 0000000..5241a72 --- /dev/null +++ b/projetechecs-master/.gitignore @@ -0,0 +1 @@ +*.class \ No newline at end of file diff --git a/projetechecs-master/.project b/projetechecs-master/.project new file mode 100644 index 0000000..4f8a9ec --- /dev/null +++ b/projetechecs-master/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>projetechecs-master</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/projetechecs-master/Bishop.java b/projetechecs-master/Bishop.java new file mode 100644 index 0000000..a7e858c --- /dev/null +++ b/projetechecs-master/Bishop.java @@ -0,0 +1,34 @@ +public class Bishop extends Piece { + + public Bishop(int x, int y, Player owner){ + super(x, y, owner); + + } + + public boolean isMoveAuthorized(Board board, Coordinates destination){ + int dx = destination.getX(); + int dy = destination.getY(); + int ox = this.getX(); + int oy = this.getY(); + Coordinates origin = new Coordinates(ox,oy); + for(int i=0; i<=7;i++) { + for(int j=0; j<=7;j++) { + if(board.sameDiagonalNothingBetween(origin, destination) &&(dx-ox)%(dy-oy)==0) {return true;} + } + } + + + return false; + } + + @Override + public Type getType() { + return Type.BISHOP; + } + + @Override + public int getValue() { + return 3; + } + +} diff --git a/projetechecs-master/Board.java b/projetechecs-master/Board.java new file mode 100644 index 0000000..5995f09 --- /dev/null +++ b/projetechecs-master/Board.java @@ -0,0 +1,143 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.io.FileNotFoundException; +import java.io.File; + +public class Board{ + private Piece[][] array; + + public Board(String fileName, Player white, Player black){ + int pieceType; + int col; + int row; + String nextWord; + Player owner; + + this.array = new Piece[8][8]; + try { + File file = new File(fileName); + if(file.exists()==false) { + System.err.println("Error: Cannot find file "+ fileName); + System.exit(1); + } + + Scanner in = new Scanner(file); + while(in.hasNext()) { + if ((nextWord = in.nextLine()).length()>2) { + pieceType = nextWord.charAt(0); + col = nextWord.charAt(1)-'0'; + row = nextWord.charAt(2)-'0'; + + owner = black; + if (pieceType >= 'a' && pieceType <= 'z') + owner = white; + switch(pieceType) { + case 'K' : case 'k' : + { this.addPiece(new King(col, row, owner)); break;} + case 'Q' : case 'q' : + { this.addPiece(new Queen(col, row, owner)); break;} + case 'B' : case 'b' : + { this.addPiece(new Bishop(col, row, owner)); break;} + case 'R' : case 'r' : + { this.addPiece(new Rook(col, row, owner)); break;} + case 'N' : case 'n' : + { this.addPiece(new Knight(col, row, owner)); break;} + case 'P' : case 'p' : + { this.addPiece(new Pawn(col, row, owner)); break;} + } + } + } + in.close(); + } + catch(FileNotFoundException e) { + System.err.println("Error file not found : "+e); + System.exit(1); + } + } + + public List<Coordinates> getAllCoordinates(){ + List<Coordinates> allCoordinates = new ArrayList<>(); + for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) allCoordinates.add(new Coordinates(j, i)); + return allCoordinates; + } + + public List<Piece> getPieces(Player player) { + List<Piece> pieces = new ArrayList<>(); + List<Piece> all = getPieces(); + for (Piece piece : all) if (player.equals(piece.getOwner())) pieces.add(piece); + return pieces; + } + + public List<Piece> getPieces() { + List<Piece> all = new ArrayList<>(); + for (Piece[] pieces : array) for (Piece piece : pieces) if (piece != null) all.add(piece); + return all; + } + + public void addPiece(Piece piece){ + array[piece.getY()][piece.getX()] = piece; + } + + public Piece getPiece(Coordinates coordinates){ + return array[coordinates.getY()][coordinates.getX()]; + } + + public Piece getPiece(int x, int y){ + return array[y][x]; + } + + public void emptyCell(Coordinates coordinates){ + array[coordinates.getY()][coordinates.getX()] = null; + } + + public boolean isEmptyCell(Coordinates coordinates){ + return array[coordinates.getY()][coordinates.getX()] == null; + } + + public boolean isEmptyCell(int x, int y){ + return array[y][x] == null; + } + + public boolean sameColumnNothingBetween(Coordinates origin, Coordinates destination){ + if (origin.equals(destination)) return false; + if (origin.getX() != destination.getX()) return false; + int min = Math.min(origin.getY(), destination.getY()); + int max = Math.max(origin.getY(), destination.getY()); + for (int i = min ; i <= max; i++) { + if (!isEmptyCell(origin.getX(), i)) return false; + } + return true; + } + + public boolean sameRowNothingBetween(Coordinates origin, Coordinates destination){ + if (origin.equals(destination)) return false; + if (origin.getY() != destination.getY()) return false; + int min = Math.min(origin.getX(), destination.getX()); + int max = Math.max(origin.getX(), destination.getX()); + for (int i = min + 1; i < max; i++) { + if (!isEmptyCell(i, origin.getY())) return false; + } + return true; + } + + public boolean sameDiagonalNothingBetween(Coordinates origin, Coordinates destination){ + if (origin.equals(destination)) return false; + int lenX = Math.abs(origin.getX() - destination.getX()); + int lenY = Math.abs(origin.getY() - destination.getY()); + if (lenX != lenY) return false; + if (origin.getX() - destination.getX() > 1) { + if (origin.getY() - destination.getY() > 1) + for (int i = 1; i < lenX; i++) if (!isEmptyCell(origin.getX() - i, origin.getY() - i)) return false; + if (origin.getY() - destination.getY() < -1) + for (int i = 1; i < lenX; i++) if (!isEmptyCell(origin.getX() - i, origin.getY() + i)) return false; + } + if (origin.getX() - destination.getX() < -1) { + if (origin.getY() - destination.getY() > 1) + for (int i = 1; i < lenX; i++) if (!isEmptyCell(origin.getX() + i, origin.getY() - i)) return false; + if (origin.getY() - destination.getY() < -1) + for (int i = 1; i < lenX; i++) if (!isEmptyCell(origin.getX() + i, origin.getY() + i)) return false; + } + return true; + } +} diff --git a/projetechecs-master/ChessBot.java b/projetechecs-master/ChessBot.java new file mode 100644 index 0000000..3abb92b --- /dev/null +++ b/projetechecs-master/ChessBot.java @@ -0,0 +1,41 @@ +import java.util.Random; + +public class ChessBot extends Player { + + Board board; + + public ChessBot(ChessColor color){ + super(color); + board = null; + } + + public void setBoard(Board board){ + this.board = board; + } + + @Override + public FromTo getFromTo() { + Random rd = new Random(); + FromTo chosenMove = new FromTo(0,0,0,0); + int max = -1; + int scorePiece; + + for(Move move : getAllMoves(board)) { + if(move.pieceAtDestination == null) { + scorePiece = 0; + } else { + scorePiece = move.pieceAtDestination.getValue(); + } + + if(this.isCheck && move.pieceAtOrigin.getType() == Piece.Type.KING) + scorePiece += 100; + + if (scorePiece > max || (scorePiece == max && rd.nextBoolean())) { + chosenMove = new FromTo(move.origin.getX(),move.origin.getY(),move.destination.getX(),move.destination.getY()); + max = scorePiece; + } + } + + return chosenMove; + } +} diff --git a/projetechecs-master/ChessColor.java b/projetechecs-master/ChessColor.java new file mode 100644 index 0000000..fc2226b --- /dev/null +++ b/projetechecs-master/ChessColor.java @@ -0,0 +1,4 @@ +public enum ChessColor { + BLACK, + WHITE; +} diff --git a/projetechecs-master/ChessUI.java b/projetechecs-master/ChessUI.java new file mode 100644 index 0000000..d7c4917 --- /dev/null +++ b/projetechecs-master/ChessUI.java @@ -0,0 +1,213 @@ +import java.awt.*; +import java.awt.Color; +import java.awt.event.*; +import java.util.*; +import javax.swing.*; + +public class ChessUI extends JFrame implements MouseListener, MouseMotionListener { + JLayeredPane layeredPane; + JPanel chessBoard; + int cellSize; + + private ImageIcon[] chessIcons; + private JLabel[] pieceLabels; + + JLabel movingChessPiece; + int originXMove; + int originYMove; + int destXMove; + int destYMove; + + boolean moveFreshness; + + int xAdjustment; + int yAdjustment; + + + public ChessUI(){ + this.cellSize = 60; + Dimension boardSize = new Dimension(8 * cellSize, 8 * cellSize); + + // Use a Layered Pane for this this application + layeredPane = new JLayeredPane(); + getContentPane().add(layeredPane); + layeredPane.setPreferredSize(boardSize); + layeredPane.addMouseListener(this); + layeredPane.addMouseMotionListener(this); + + //Add a chess board to the Layered Pane + + chessBoard = new JPanel(); + layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER); + chessBoard.setLayout( new GridLayout(8, 8) ); + chessBoard.setPreferredSize( boardSize ); + chessBoard.setBounds(0, 0, boardSize.width, boardSize.height); + + for (int i = 0; i < 64; i++) { + JPanel square = new JPanel( new BorderLayout() ); + chessBoard.add( square ); + + square.setBackground( (i + i / 8) % 2 == 1 ? Color.GRAY : Color.WHITE ); + } + + initIcons(); + initPieceLabels(); + + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + + pack(); + setResizable(true); + setLocationRelativeTo( null ); + setVisible(true); + } + + /** --------------------------------------------------------------------------------- + * Chess piece graphics **/ + + private void initIcons() { + chessIcons = new ImageIcon[] { + new ImageIcon("./img/Chess_kdt60.png"), + new ImageIcon("./img/Chess_qdt60.png"), + new ImageIcon("./img/Chess_rdt60.png"), + new ImageIcon("./img/Chess_bdt60.png"), + new ImageIcon("./img/Chess_ndt60.png"), + new ImageIcon("./img/Chess_pdt60.png"), + new ImageIcon("./img/Chess_klt60.png"), + new ImageIcon("./img/Chess_qlt60.png"), + new ImageIcon("./img/Chess_rlt60.png"), + new ImageIcon("./img/Chess_blt60.png"), + new ImageIcon("./img/Chess_nlt60.png"), + new ImageIcon("./img/Chess_plt60.png") + }; + } + + private void initPieceLabels() { + pieceLabels = new JLabel[64]; + + for(int k = 0; k < 64; k++) { + JLabel label = new JLabel(); + label.setVisible(false); + label.setSize(cellSize, cellSize); + pieceLabels[k] = label; + JPanel panel = (JPanel)chessBoard.getComponent(k); + panel.add(label); + } + } + + private JLabel getPieceLabel(int row, int column) { + return pieceLabels[row * 8 + column]; + } + + private ImageIcon getImageIcon(Piece.Type type, ChessColor color) { + return chessIcons[type.ordinal() + (color == ChessColor.WHITE ? Piece.Type.values().length : 0)]; + } + + /** + * This method takes a piece of a color and places it in the specified coordinates. + * @param type Desired type + * @param color Desired color (should only be either Color.white or Color.black) + * @param coord Coordinates of the piece + */ + public void placePiece(Piece.Type type, ChessColor color, Coordinates coord) { + getPieceLabel(coord.getY(), coord.getX()).setIcon(getImageIcon(type, color)); + getPieceLabel(coord.getY(), coord.getX()).setVisible(true); + } + + /** + * This method removes the piece at the specified position, if there is any. + * @param coord Coordinates of the piece + */ + public void removePiece(Coordinates coord) { + getPieceLabel(coord.getY(), coord.getX()).setVisible(false); + } + + /** --------------------------------------------------------------------------------- + * Events management **/ + + /** + * This method waits for the player to enter a move in the UI. Calling this is blocking. + */ + public FromTo waitForPlayerMove() { + moveFreshness = false; + + while(! moveFreshness) + try { + synchronized (this.getClass()) { + this.getClass().wait(); + } + } + catch (Exception e) { + System.err.println("ERROR : interrupted while waiting for chess move"); + System.err.println(e); + System.exit(-1); + } + + return new FromTo(originXMove, originYMove, destXMove, destYMove); + } + + public void mousePressed(MouseEvent e){ + movingChessPiece = null; + + originXMove = e.getX() / cellSize; + originYMove = e.getY() / cellSize; + + xAdjustment = - e.getX() + originXMove * cellSize; + yAdjustment = - e.getY() + originYMove * cellSize; + + movingChessPiece = new JLabel(getPieceLabel(originYMove, originXMove).getIcon()); + movingChessPiece.setVisible(getPieceLabel(originYMove, originXMove).isVisible()); + + movingChessPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment); + if(movingChessPiece.getIcon() != null) + movingChessPiece.setSize(movingChessPiece.getIcon().getIconWidth(), movingChessPiece.getIcon().getIconHeight()); + layeredPane.add(movingChessPiece, JLayeredPane.DRAG_LAYER); + } + + //Move the chess piece around + + public void mouseDragged(MouseEvent me) { + if (movingChessPiece == null) return; + movingChessPiece.setLocation(me.getX() + xAdjustment, me.getY() + yAdjustment); + } + + //Drop the chess piece back onto the chess board + + public void mouseReleased(MouseEvent e) { + if(movingChessPiece == null) return; + + movingChessPiece.setVisible(false); + + layeredPane.remove(movingChessPiece); + movingChessPiece = null; + + destXMove = e.getX() / cellSize; + destYMove = e.getY() / cellSize; + + moveFreshness = true; + + synchronized (this.getClass()) { + this.getClass().notifyAll(); + } + } + + public void mouseClicked(MouseEvent e) {} + public void mouseMoved(MouseEvent e) {} + public void mouseEntered(MouseEvent e){} + public void mouseExited(MouseEvent e) {} + + public static void main(String[] args) { + ChessUI ui = new ChessUI(); + ui.setDefaultCloseOperation(DISPOSE_ON_CLOSE); + + for(int k = 0; k < Piece.Type.values().length; k++) + ui.placePiece(Piece.Type.values()[k], ChessColor.BLACK, new Coordinates(k, 0)); + + for(int k = 0; k < Piece.Type.values().length; k++) + ui.placePiece(Piece.Type.values()[k], ChessColor.WHITE, new Coordinates(k, 1)); + + ui.pack(); + ui.setResizable(true); + ui.setLocationRelativeTo( null ); + ui.setVisible(true); + } +} diff --git a/projetechecs-master/Coordinates.java b/projetechecs-master/Coordinates.java new file mode 100644 index 0000000..68a191d --- /dev/null +++ b/projetechecs-master/Coordinates.java @@ -0,0 +1,29 @@ +public class Coordinates{ + private int x; + private int y; + + public Coordinates(int x, int y){ + this.x = x; + this.y = y; + } + + public int getX(){ + return x; + } + public int getY(){ + return y; + } + + @Override + public String toString(){ + return "x= "+x+" y= "+y; + } + + @Override + public boolean equals(Object o) { + if (this.getClass() != o.getClass()) return false; + if(this==o) return true; + Coordinates oCords = (Coordinates)o; + return this.x == oCords.x && this.y == oCords.y; + } +} diff --git a/projetechecs-master/FromTo.java b/projetechecs-master/FromTo.java new file mode 100644 index 0000000..36c1c6e --- /dev/null +++ b/projetechecs-master/FromTo.java @@ -0,0 +1,17 @@ +public class FromTo { + private final Coordinates from; + private final Coordinates to; + + public FromTo(int ox, int oy, int dx, int dy) { + from = new Coordinates(ox,oy); + to = new Coordinates(dx,dy); + } + + public Coordinates getFrom() { + return this.from; + } + + public Coordinates getTo() { + return this.to; + } +} diff --git a/projetechecs-master/GameUI.java b/projetechecs-master/GameUI.java new file mode 100644 index 0000000..e2cefc2 --- /dev/null +++ b/projetechecs-master/GameUI.java @@ -0,0 +1,150 @@ +import java.util.List; +import java.util.Stack; + + + + +public class GameUI { + public Board board; + private Player white; + private Player black; + private Player currentPlayer; + private ChessUI ui; + private Stack<Move> history; + + public GameUI(ChessUI ui, String boardConfigFileName, Player white, Player black){ + this.board = new Board(boardConfigFileName, white, black); + this.white = white; + this.black = black; + this.currentPlayer = white; + this.ui = ui; + this.history = new Stack<Move>(); + + for(Piece p : board.getPieces()) + this.ui.placePiece(p.getType(), p.getColor(), p.getPosition()); + } + + public Board getBoard(){ + return this.board; + } + + public boolean undo(){ + if(this.history.empty()) return false; + Move move = this.history.pop(); + board.emptyCell(move.destination); + ui.removePiece(move.destination); + if(move.pieceAtDestination != null){ + move.pieceAtDestination.setPosition(move.destination); + board.addPiece(move.pieceAtDestination); + ui.placePiece(move.pieceAtDestination.getType(), move.pieceAtDestination.getColor(), move.pieceAtDestination.getPosition()); + } + board.emptyCell(move.origin); + ui.removePiece(move.origin); + move.pieceAtOrigin.setPosition(move.origin); + board.addPiece(move.pieceAtOrigin); + ui.placePiece(move.pieceAtOrigin.getType(), move.pieceAtOrigin.getColor(), move.pieceAtOrigin.getPosition()); + + currentPlayer = move.pieceAtOrigin.getOwner(); + if(move.pieceAtDestination != null) + currentPlayer.removeFromScore(move.pieceAtDestination.getValue()); + return true; + } + + + + public boolean isMovePlayable(Move gameMove){ + Piece piece = board.getPiece(gameMove.origin); + if(piece == null + ||currentPlayer.getColor() != piece.getColor() + || !gameMove.pieceAtOrigin.isMoveAuthorized(board, gameMove.destination) + + || gameMove.pieceAtOrigin.getOwner() != currentPlayer){ + System.out.println("Le coups ne peut pas etre jouer 1"); + return false;} + + + + + if (gameMove.pieceAtDestination != null + && gameMove.pieceAtDestination.sameColor(gameMove.pieceAtOrigin)) { + System.out.println("Le coups ne peut pas etre jouer 2"); + + + + return false;} + + + applyMove(gameMove); + + /**if (isCheck(getOpponent(currentPlayer))) { + undo(); + return false; + } + + ***/ + undo(); + return true; + + } + + public void applyMove(Move move){ + Piece piece = board.getPiece(move.origin); + history.push(move); + board.emptyCell(piece.getPosition()); + piece.setPosition(move.destination); + board.addPiece(piece); + switchPlayers(); + } + + public void switchPlayers(){ + this.currentPlayer = getOpponent(currentPlayer); + } + + public Player getOpponent(Player player){ + if (player == white) return black; + return player; + } + + public boolean isPrey(Piece prey){ + Player playerOp = getOpponent(prey.owner); + List<Move> opponentMoves = playerOp.getAllMoves(board); + for (Move move : opponentMoves) { + if (prey.equals(move.pieceAtDestination)) return true; + } + return false; + } + + public boolean isCheck(Player player){return isPrey(player.getKing());} + + public boolean isCheckMate(Player player){ + return false; + } + + public void determineWinner(){ + } + + public void play(){ + int numberOfHits = 0; + while(numberOfHits < 50){ + System.out.println("A toi de jouer " + currentPlayer.getColor()); + Move move; + do { + move = new Move(board, currentPlayer.getFromTo()); + } + while(!isMovePlayable(move)); + applyMove(move); + ui.placePiece(move.pieceAtOrigin.getType(), move.pieceAtOrigin.getColor(), move.destination); + ui.removePiece(move.origin); + numberOfHits++; + switchPlayers(); + + + + + + numberOfHits ++; + System.out.println("Nombre de coups: " + numberOfHits+" /50"); + switchPlayers(); + } + } +} diff --git a/projetechecs-master/Human.java b/projetechecs-master/Human.java new file mode 100644 index 0000000..b995157 --- /dev/null +++ b/projetechecs-master/Human.java @@ -0,0 +1,14 @@ +public class Human extends Player{ + + ChessUI ui; + public Human(ChessUI ui, ChessColor color){ + super(color); + this.ui = ui; + } + + @Override + public FromTo getFromTo() { + return ui.waitForPlayerMove(); + } + +} diff --git a/projetechecs-master/King.java b/projetechecs-master/King.java new file mode 100644 index 0000000..96ea876 --- /dev/null +++ b/projetechecs-master/King.java @@ -0,0 +1,38 @@ +public class King extends Piece { + + public King(int x, int y, Player owner){ + super(x, y, owner); + owner.setKing(this); + } + + public boolean isMoveAuthorized(Board board, Coordinates destination){ + int dx = destination.getX(); + int dy = destination.getY(); + int ox = this.getX(); + int oy = this.getY(); + + for(int i=-1;i<=1;i++) { + for(int j=-1; j<=1; j++) { + if( (dx-ox)==i && (dy-oy)==j && board.isEmptyCell(dx, dy)) { + return true; + } + } + + } + + + + return false; + } + + @Override + public Type getType() { + return Type.KING; + } + + @Override + public int getValue() { + return 0; + } + +} diff --git a/projetechecs-master/Knight.java b/projetechecs-master/Knight.java new file mode 100644 index 0000000..318c691 --- /dev/null +++ b/projetechecs-master/Knight.java @@ -0,0 +1,35 @@ +public class Knight extends Piece { + + public Knight(int x, int y, Player owner){ + super(x, y, owner); + + } + + public boolean isMoveAuthorized(Board board, Coordinates destination){ + int dx = destination.getX(); + int dy = destination.getY(); + int ox = this.getX(); + int oy = this.getY(); + for(int i=-2; i <= 2; i++) { + for(int j=-2; j <= 2; j++) { + if(((dx-ox)%2==1 && (dy-oy)%2==0) || ((dx-ox)%2==0 && (dy-oy)%2==1)) { + return true; + } + } + } + + + return false; + } + + @Override + public Type getType() { + return Type.KNIGHT; + } + + @Override + public int getValue() { + return 3; + } + +} diff --git a/projetechecs-master/Main.java b/projetechecs-master/Main.java new file mode 100644 index 0000000..708eab9 --- /dev/null +++ b/projetechecs-master/Main.java @@ -0,0 +1,9 @@ +public class Main{ + public static void main(String[] args) { + ChessUI ui = new ChessUI(); + GameUI g = new GameUI(ui, "boardConfigurationFiles/FullBoard.txt", new Human(ui, ChessColor.WHITE), new Human(ui, ChessColor.BLACK)); + + g.play(); + } + +} diff --git a/projetechecs-master/Move.java b/projetechecs-master/Move.java new file mode 100644 index 0000000..3ab7d9b --- /dev/null +++ b/projetechecs-master/Move.java @@ -0,0 +1,29 @@ +public class Move{ + + final Coordinates origin; + final Coordinates destination; + final Piece pieceAtOrigin; + final Piece pieceAtDestination; + + public Move(Board board, Coordinates origin, Coordinates destination){ + this.origin = origin; + this.destination = destination; + this.pieceAtOrigin = board.getPiece(origin); + this.pieceAtDestination = board.getPiece(destination); + } + + public Move(Coordinates origin, Coordinates destination, Piece pieceAtOrigin, Piece pieceAtDestination){ + this.origin = origin; + this.destination = destination; + this.pieceAtOrigin = pieceAtOrigin; + this.pieceAtDestination = pieceAtDestination; + } + + public Move(Board board, FromTo ft){ + this.origin = ft.getFrom(); + this.destination = ft.getTo(); + this.pieceAtOrigin = board.getPiece(ft.getFrom()); + this.pieceAtDestination = board.getPiece(ft.getTo()); + } +} + diff --git a/projetechecs-master/Pawn.java b/projetechecs-master/Pawn.java new file mode 100644 index 0000000..ef8fb5b --- /dev/null +++ b/projetechecs-master/Pawn.java @@ -0,0 +1,37 @@ +public class Pawn extends Piece { + + public Pawn(int x, int y, Player owner){ + super(x, y, owner); + + } + + public boolean isMoveAuthorized(Board board, Coordinates destination){ + int dx = destination.getX(); + int dy = destination.getY(); + int ox = this.getX(); + int oy = this.getY(); + int absx = Math.abs(dx-ox); + int absy = Math.abs(dy-oy); + for(int i=0; i<=7; i++) { + + if((oy==1 || oy == 6) && (absy==1 || absx == 2) && board.isEmptyCell(destination)&&absx==0) {return true;} + + if((oy!=1 || oy!=6) && absy==1 && absx==0){return true;} + return false; + } + + + return true; + } + + @Override + public Type getType() { + return Type.PAWN; + } + + @Override + public int getValue() { + return 1; + } + +} diff --git a/projetechecs-master/Piece.java b/projetechecs-master/Piece.java new file mode 100644 index 0000000..efe0429 --- /dev/null +++ b/projetechecs-master/Piece.java @@ -0,0 +1,66 @@ +import java.util.ArrayList; +import java.util.List; + +public abstract class Piece{ + protected Coordinates position; + protected Player owner; + + public Piece(int x, int y, Player owner){ + this.position = new Coordinates(x,y); + this.owner = owner; + } + + public enum Type { + KING, + QUEEN, + ROOK, + BISHOP, + KNIGHT, + PAWN + } + + public void setPosition(Coordinates destination){ + this.position = destination; + } + + public Player getOwner(){ + return this.owner; + } + + public ChessColor getColor(){ + return this.owner.color; + } + + public Coordinates getPosition(){ + return this.position; + } + + public int getX(){ + return this.position.getX(); + } + + public int getY(){ + return this.position.getY(); + } + + public List<Move> getAllMoves(Board board) { + List<Move> allMoves = new ArrayList<>(); + for (Coordinates coordinates : board.getAllCoordinates()){ + if (this.isMoveAuthorized(board,coordinates)){ + allMoves.add(new Move(board, position, coordinates)); + } + } + return allMoves; + } + + public boolean sameColor(Piece piece){ + return this.getColor()== piece.getColor(); + } + + public abstract boolean isMoveAuthorized(Board board, Coordinates destination); + + public abstract Type getType(); + public abstract int getValue(); + + +} diff --git a/projetechecs-master/Player.java b/projetechecs-master/Player.java new file mode 100644 index 0000000..1a38ecd --- /dev/null +++ b/projetechecs-master/Player.java @@ -0,0 +1,61 @@ +import java.util.ArrayList; +import java.util.List; + +public abstract class Player{ + protected ChessColor color; + private int score; + private King king; + public boolean isCheck; + public boolean isCheckMate; + + public Player(ChessColor color){ + this.color = color; + this.score = 0; + this.isCheckMate = false; + } + + public ChessColor getColor(){ + return this.color; + } + + public int getScore(){ + return this.score; + } + + public void addToScore(int value){ + score+=value; + } + + public void removeFromScore(int value){ + score-= value; + } + + public abstract FromTo getFromTo(); + + public Piece getKing(){ + return this.king; + } + + public void setKing(King king){ + this.king=king; + } + + public boolean isCheckMate(Board board){ + return false; + } + + public void setCheck(){ + } + + public void unSetCheck(){ + } + + public List<Move> getAllMoves(Board board) { + return null; + } + + @Override + public String toString(){ + return null; + } +} diff --git a/projetechecs-master/Queen.java b/projetechecs-master/Queen.java new file mode 100644 index 0000000..abdbfc6 --- /dev/null +++ b/projetechecs-master/Queen.java @@ -0,0 +1,43 @@ +public class Queen extends Piece { + + public Queen(int x, int y, Player owner){ + super(x, y, owner); + + } + + public boolean isMoveAuthorized(Board board, Coordinates destination){ + int dx = destination.getX(); + int dy = destination.getY(); + int ox = this.getX(); + int oy = this.getY(); + Coordinates origin = new Coordinates(ox,oy); + + + + for(int i=0; i<=7;i++) { + for(int j=0; j<=7;j++) { + if(board.sameColumnNothingBetween(origin,destination)&& dy<=7 && dy >=0) {return true;} + else if(board.sameRowNothingBetween(origin,destination)&& dx<=7 && dx>=0) {return true;} + else if(board.sameDiagonalNothingBetween(origin, destination) &&(dx-ox)%(dy-oy)==0) {return true;} + } + } + + + + + + return false; + + } + + @Override + public Type getType() { + return Type.QUEEN; + } + + @Override + public int getValue() { + return 9; + } + +} diff --git a/projetechecs-master/Rook.java b/projetechecs-master/Rook.java new file mode 100644 index 0000000..f7abc5d --- /dev/null +++ b/projetechecs-master/Rook.java @@ -0,0 +1,33 @@ +public class Rook extends Piece { + + public Rook(int x, int y, Player owner){ + super(x, y, owner); + + } + + public boolean isMoveAuthorized(Board board, Coordinates destination){ + int dx = destination.getX(); + int dy = destination.getY(); + int ox = this.getX(); + int oy = this.getY(); + Coordinates origin = new Coordinates(ox,oy); + for(int i=0; i<=7;i++) { + for(int j=0; j<=7;j++) { + if(board.sameColumnNothingBetween(origin,destination)&& dy<=7 && dy >=0) {return true;} + else if(board.sameRowNothingBetween(origin,destination)&& dx<=7 && dx>=0) {return true;} + } + } + return false; + } + + @Override + public Type getType() { + return Type.ROOK; + } + + @Override + public int getValue() { + return 5; + } + +} diff --git a/projetechecs-master/TestChess.java b/projetechecs-master/TestChess.java new file mode 100644 index 0000000..d4e40c1 --- /dev/null +++ b/projetechecs-master/TestChess.java @@ -0,0 +1,76 @@ +import java.io.*; +import java.util.Scanner; + +public class TestChess{ + + public static void main(String[] args) { + + boolean resultTest; + /* Test de déplacements autorisés selon les regles de pièces */ + System.out.println("authorized moves"); + System.out.print("test 1 : "); + resultTest = testAuthorizedMove("boardConfigurationFiles/FullBoard.txt", new Coordinates(0,1), new Coordinates(0,2)); + if(resultTest == true) System.out.println("pass"); else System.out.println("fail"); + + System.out.print("test 2 : "); + resultTest = testAuthorizedMove("boardConfigurationFiles/FullBoard.txt", new Coordinates(0,1), new Coordinates(0,4)); + if(resultTest == false) System.out.println("pass"); else System.out.println("fail"); + + + /* Test de déplacements jouables sur l'échiquier actuel, selon les regles du jeu */ + System.out.println("playable moves"); + System.out.print("test 1 : "); + resultTest = testPlayableMove("boardConfigurationFiles/FullBoard.txt",new Coordinates(0,1),new Coordinates(0,2)); + if(resultTest == true) System.out.println("pass"); else System.out.println("fail"); + + System.out.print("test 2 : "); + resultTest = testPlayableMove("boardConfigurationFiles/FullBoard.txt",new Coordinates(0,1),new Coordinates(0,3)); + if(resultTest == true) System.out.println("pass"); else System.out.println("fail"); + + /* Tests de la mise en échec */ + + /* Tests de la Echec et mat "isCheckMate()" */ + + /* Tests pours le calcul des points en fin de partie */ + } + + + public static boolean testAuthorizedMove(String filename, Coordinates origin, Coordinates destination) { + ChessUI ui = new ChessUI(); + Board testBoard = new Board(filename, new Human(ui, ChessColor.WHITE), new Human(ui, ChessColor.BLACK)); + Piece testPiece = testBoard.getPiece(origin); + if(testPiece == null) { + System.out.println("No Piece at :"+origin); + return false; + } + return testPiece.isMoveAuthorized(testBoard, destination); + } + + + public static boolean testPlayableMove(String fileName, Coordinates origin, Coordinates destination) { + ChessUI ui = new ChessUI(); + GameUI g = new GameUI(ui, fileName, new Human(ui, ChessColor.WHITE), new Human(ui, ChessColor.BLACK)); + + Piece testPiece = g.getBoard().getPiece(origin); + if(testPiece == null) { + System.out.println("No Piece at :"+origin); + return false; + } + return g.isMovePlayable(new Move(g.getBoard(), origin, destination)); + } + + public static boolean testIsCheck(String fileName, Player p) { + ChessUI ui = new ChessUI(); + GameUI g = new GameUI(ui, fileName, new Human(ui, ChessColor.WHITE), new Human(ui, ChessColor.BLACK)); + return g.isCheck(p); + } + + public static boolean testIsCheckMate(String fileName, Player p) { + ChessUI ui = new ChessUI(); + GameUI g = new GameUI(ui, fileName, new Human(ui, ChessColor.WHITE), new Human(ui, ChessColor.BLACK)); + return g.isCheck(p) && g.isCheckMate(p); + } + + +} + diff --git a/projetechecs-master/boardConfigurationFiles/BackLine.txt b/projetechecs-master/boardConfigurationFiles/BackLine.txt new file mode 100644 index 0000000..97b7ec5 --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/BackLine.txt @@ -0,0 +1,16 @@ +r00 +n10 +b20 +q30 +k40 +b50 +n60 +r70 +R07 +N17 +B27 +Q37 +K47 +B57 +N67 +R77 diff --git a/projetechecs-master/boardConfigurationFiles/FullBoard.txt b/projetechecs-master/boardConfigurationFiles/FullBoard.txt new file mode 100644 index 0000000..e653b89 --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/FullBoard.txt @@ -0,0 +1,32 @@ +r00 +n10 +b20 +k30 +q40 +b50 +n60 +r70 +p01 +p11 +p21 +p31 +p41 +p51 +p61 +p71 +P06 +P16 +P26 +P36 +P46 +P56 +P66 +P76 +R07 +N17 +B27 +K37 +Q47 +B57 +N67 +R77 diff --git a/projetechecs-master/boardConfigurationFiles/KingsOnly.txt b/projetechecs-master/boardConfigurationFiles/KingsOnly.txt new file mode 100644 index 0000000..c0392a7 --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/KingsOnly.txt @@ -0,0 +1,3 @@ +K30 +k37 + diff --git a/projetechecs-master/boardConfigurationFiles/check.txt b/projetechecs-master/boardConfigurationFiles/check.txt new file mode 100644 index 0000000..0d8d02e --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/check.txt @@ -0,0 +1,3 @@ +r00 +k40 +K07 \ No newline at end of file diff --git a/projetechecs-master/boardConfigurationFiles/check2.txt b/projetechecs-master/boardConfigurationFiles/check2.txt new file mode 100644 index 0000000..49ff12e --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/check2.txt @@ -0,0 +1,4 @@ +r00 +k40 +R06 +K07 \ No newline at end of file diff --git a/projetechecs-master/boardConfigurationFiles/checkMate.txt b/projetechecs-master/boardConfigurationFiles/checkMate.txt new file mode 100644 index 0000000..5f1fe10 --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/checkMate.txt @@ -0,0 +1,4 @@ +r00 +r10 +k40 +K07 \ No newline at end of file diff --git a/projetechecs-master/boardConfigurationFiles/checkMate2.txt b/projetechecs-master/boardConfigurationFiles/checkMate2.txt new file mode 100644 index 0000000..2e746fd --- /dev/null +++ b/projetechecs-master/boardConfigurationFiles/checkMate2.txt @@ -0,0 +1,4 @@ +r00 +r20 +k40 +K07 \ No newline at end of file diff --git a/projetechecs-master/img/Chess_bdt60.png b/projetechecs-master/img/Chess_bdt60.png new file mode 100644 index 0000000000000000000000000000000000000000..453cb32355348ceadcc41e5c371130e7be1dc45e GIT binary patch literal 1260 zcmV<I1QYv-P)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Zhb`K~!jg?V3MqTU8Xsf5)*QQPXyCRHO{Vf^<pBf<%YVfEfTO zAOZ?Y+bBW|Z2VD^U`2urhLj*c2oNI!VgVFUB$J5&SU|W)Z3RLijv7&9oPZjfIE@n@ zhG!#F_1W*m=e@XYKIzDk-}SlQ=X=h*_nmu1Rk@WA*=qt}V_$H)V_$H)V^0K&NJ2yg zMI`k8L+wyRhDGFOAPZas@*?tFm>f{mPz<;qC;@r{ONGTl!rFL<$VFh#<#7o}sOpuV zd4v+uBGQYySb!MtU>ID&%Hi8RwCN0-1tAGm)hzIPgJ$1_!6nRD`lUM0-c!|I!ypl+ z;4guXac1RO{0Pj3#v+8}s1rB?{K1WvBn67VJ3w#Xd;%7GCvd)w(Ch7Q;NhE6FmM9M z`4C&RZQ%KvN-*#&aBUZ2YwbgzqvZtyj{xN+#a8Y0mKF^309P6bnVp^0bULk(NTiYA z9bmYX1<!jKxokG8s;Yf`eO^X+2{>%U(QF+Sk;i~hk8S_=*#LdOE4wCk9imo_fYWXd zM1-lSDFz3f_lKUI9suU%<|q^jtgo*#Gc&{5+M1h-lOpo6R>G($7=>~d@DDCw8IQ+x zdwW~!VQg%yQD~pA;A%C(j{@Cp4_8-LNhXu@_xA(N$j0Mwrl+S_Sy>^U&y!B48};!t z@NLsfjYjwkK9-xMr6pBWO(YV2mZ&dUY0|pQPvfnvEda{pa$tS9!78L<ej2AzDFy}x zSYBQZtPfWhh4eGn?5yh9N39gn=WsUtL1Ny*iHTrUT?M|j@a2LcuwdcHvf^<T=cOSC zys4@iCY~(vq9&K8vCrLeK*WrrrQnL_vp{KRXh?IpoNjJz`m&9U4V|2vtcv{#IAqDs zaxYy)3OL%?+4*EV9;c(D!`F{hm1r~yun3$|Ro4ynZeV`YA|fvWZv#Z5(JFb*D3{Cs zZA^f9Rej2opm8|gjWeTK=J07tj@EVQQS6UQPFgxM&EfI!@zIfy5h4-0|1p!vJR~Bb zR=H;w&as7sg)KEku~^jZ?(PSycv_BdY+_;}mP{tSmTo*DlgUsh6b@MVGo7VHB#%?M zw8k-2y=39YdeZvb*dM?p!0u$xDmN;T5&>SIPJPRVm4Od1-f0DL$3sL80*~X=p@wn7 z+)HAw0T+PJfKOG`SB1b6x7`XBXJ+aJj^I=yYVAPf`#UP1y*P(!M_k-(;1uYxz@HV% z0atM@ywuuN;IgWgcE#JPU=cYEJOSJb+yx}?c6TEP?BHCXSOk6o-c{8_Prvk#mxq8) z2)=~VjFo^_sSIFUJq^Tm0pGNMAg`7N;>`$tzXe42we!vFv<eNL`^9g-55V_0OV@qC zao`ws`}#t?y?4V&OGHiqZ{W<l7l2=Y%Qcq6S#qL4N5uqZVyW6TkW<yaT>9w3IVG(1 zQT+pIee3`SD{ZTG6u1XC47>%rrmELm^#rjF?*+WRQMHX=uh_p4-|pBK-0ryL1pf;u WzZkMxRgk3s0000<MNUMnLSTZG7Dm4S literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_blt60.png b/projetechecs-master/img/Chess_blt60.png new file mode 100644 index 0000000000000000000000000000000000000000..26dae01cf054534b4f5c56ac60f334a7ab575f10 GIT binary patch literal 1944 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 literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_kdt60.png b/projetechecs-master/img/Chess_kdt60.png new file mode 100644 index 0000000000000000000000000000000000000000..225f869e9cc481683eae10622c0dad885c3aa3d4 GIT binary patch literal 2485 zcmV;m2}<^fP)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12{K7UK~!jg?OJP0Q(GEcn<7N?qHO_bl@Y{TMJ2unfoR4Ial)PP z5=7A}Br}ZQBN3xFI@eKyF`Ai?8IuXd=v6czJ_gBvQG(Hl_&~2k0T~}Ck)TyHR?rp& zZIRZl`O$}nJW31Y#_N}S>FMdW_qSHp-rw10pCd@(mt-D;4Zz*@h4ANYUkHEhHYkLJ z5K<w;?*}9IU@5!{z-b}GY<DLfEW*ClPd|4j7VcVj2qFFq;9Kk0$*_>U3*aSy_W&|T zmJc)z&w)<R!BPQ)bvie>!}0F`3^-wTDm)4w2>%tpEC5>o`~;v4z;(I-jN23@*$AK! z0E7@Pt*2{9UUC-(;LCM*;7thO0YGN`8sP5yAn7&-5DVZ10Cw=700g)VgB!^%1km1z ztj+5IDBXd>Emc|wAp=kcK;A=GKFQ>P#^SCyoPnOn0zi@wB66UCxI|b8@s$uFL<r&4 zOQ@qa3f;z8bA>vPt7mg!E`9@`2*3jXW?1IndjJgpN&zeb;L{;~7`mRfU3qbbcEJGt z37`s=<)<yi2+NZ6IDp>{*c=u@1OmwN@bLI<!GZ;djEsa#CWBlq$E#PbP*G8V>({U2 z_U+p+nM|(%<XHi0U@2A-2htn|kOg2ffNzBm9up=^Ky-98qNAfRYSbubwOZ(OI^4Z` z7srnuhrwVt3*ZNmH4YJRP}LwIMAOoxOIcS}$DXXYxtW=nnN%ng1fT=(9f0R>OkouO zlef1wSFKvb$B!TPnCr!h7u>#mJLPh@5y1R@QP{drDBZn#_it9OUJU?v`0ycea&n;2 zXrR?<p-?Cg5fOpN$Vh~ThXVlG+uL#U=uvFiv<Xd3P0s)*d;9Z+5LmTp6*h0)45iW% z-q6s1t5>h0qM`z7wHk7{9036Vh>wp)R8$lIK&@6|&YU@hCr_TtAzA5?!T^3qOG_h3 zwzah}B_)LtiKJVVA|fJ~pPx^o(MXciXf%w8iRo2cnM}r#k`lXm6%`dsNJyX%qT4pn z(b24`sv=3=zki<!g`x?-*dF=xLe_WEq)Bb>-n}D9rlh1eT6`E162i-uFOwwSzkko| z+qZWMe#VR$eDvs%eVE3@#W|cuDwXoqty?6?%F0RtC~$@F!Yy02kR%TuKI||En@c1T zZr!?-CX<OInU$6GNla*HC||yONs=rtFK19tP@nSz1O%|Dsfi>R78ce5z|&d6ITtTp zBuUPnKfljFY#tL6LxaIUlH9m)qy7BIkt11KTT7BWckUdA3>o5dj)H;$l4NRXDgn%P zmT+xbTN_DIE|)tE1_0yZ<Lyc(Cnr+~!E@)%ktA>3x<y}KUzhq{w{9It^2Z;4B!KU` z<J8+q>&=@tZ+Z!F%uby;1zVNR%F4ou6)P}z?p$az8qAwF4=pV%F7+>yS?)NsS}kC? z40dh3D17?HjT<D%>C>mXq=3y;DwVyEbr^y!`<XLmNRo+(i3AYg?2!K3!Gj08EjZ5j ztXZ>Yv)bC)9xri@`h*D+XfzsWGMPAL%osg@Va^f`3J(uAnaySz3<fHd%6=hTR#rxm zOiN4am;O$kJV}z=w{IT-WcJ9Zrys4P|9#@b36i8rrJ}dDx61$v3kyk-3l}bQxi8yg zv!$hlfq{Xo0OYO`4)FK)fBx{{Lz3i~GiNB3N?ihJyM!!Wyx66F($mxJ^}srJ|JW;^ z-U6(oe;pnkZfb07BuPGa@PJdNPIVZVL?WS5spQO=GZ_~b$Gp5e>U26LB_(m(xN#gh zbZDQ5`uO-TH#gT_3s$dQO#uIJh>IgZR?@L!#*AqxFE1xa>h*fAU%&pNA@1$%&6t=N z?%1(|B_$=SuCAs=qp?@yo~*gKnfLD9V`*tA4;(naq@*PJ`T2c9HY_ZRH8nLP$=23Z zCMPEoz&-#T{YuzMdXl%dw|dW>J$9fqH8o5~NZ{$yr}_5n+b+qpwY5>LR#T-?v8bqs zd-v|;v17-0;lc&h*4FaXt5;pNGn>t<s;c6K4I3B~6vS=Yw%K#szI~e$Cr)e!u)I$k z`Vwp<?GK<VHa3=zA3vt;#)7oWrEAx&aoe_SjE#-u<jIpMlgS(&rlFysoIQIs)6>&g zTwKi7*4B^uwpn&|Hhp}2o&kvJGyc9du#y&w7A?xP0jRI9=bANZTwZ>5b}uh4#>K_4 zw6xSt_Q;VV1dtD4lrz|!-lp~Q^ZP?eO3LB-`g)X<l)!8@fAstC;lrU+Dxpv)pin66 z$4aFV0RaJc{rWXD8VxiW4W2!F_R+Cct3_vAQ>IM8ym|9*_UzgJ-n@D98>c`6&M9mK zvjiQ~kV>UYOiW~Ub~e>&HC?fmmKL5mb&Bcf=^Q_Pd}rm4JB!&Rg@q7H0OZe@F#~JY zuEmliOW@`8VFy*O*MFj%?YObA5hF&7u&dvB6v*WtZ(*00mt)tiT_`Flg2`kmAi2aT z(17y_2L}iL>HPWgc2$f<BQIXO$c-B}a{Bb?J#NkP=A%cCW@>6G3knL@+}v!>(a_Mq z1q&9OcST{R8>XeDZ7`e7)M~ZN%*=Fnr$Pupxm->!FE5AUhYlUe<;$1z&Ye3X$^HBH z-x;(a9UL5--`Lm)gTY`wFOf(P5fOp#@bE5+R$yQtJUu-@5?Zac%c7-Lt8wMZl~3-G z$Bi2YjYjhyy<WfADbPUw6fGYgAEu_Jvaqm_I-RcTN@O*&*-V{IXW!NA&WuJQuUxsp zjEoG1goOM&iq_b%WAoF~)3I#XGDxLT`)_r1bx^5Pc>46|Cq?V|^XF)9Z-)>9{{H@5 z7OkmMry?pU3Z9;pH!{p-Gm49gk(HH&va+(lDO!sbEn2JB>+OnMx^#&vSFU7maB#mY zI(&V7nUIjcLx&F8Hvma;=gytgt|;tu!@Rt_udA!8-{t1!a@w?M{kp>H?Ee1#%*e=K zWo4x~Cnx9cgF@Ik6@~%$3qF3jHxO<Da2UXNSMa(_xC8O80DKS2`x@{2k*FHLzW{vQ zA2{hs(dy2uk5%IVOat&M072Hz5j`|}2jD3z&zKuvdFSIa$^Z2$IJoysJYReuuLRHx z;0Y`Qo9HGWZX^72u`h4peeU*!@aJy7IKux2*#W14#-!2800000NkvXXu0mjf1st8` literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_klt60.png b/projetechecs-master/img/Chess_klt60.png new file mode 100644 index 0000000000000000000000000000000000000000..d7341649bbfa2508149d8f57562503e6076aaab6 GIT binary patch literal 2279 zcmV<D2pIQ?P)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12xLh_K~!jg?V4?DQ`Z^Cf7ebzljV&hZA<{SVNpdyBbp8vP`>ce z1_T;POSB@gPk_WgP&7r1NkgNXv<buqD9aE5)KOI%1jYnX7O9;wDw0wpsLG3&11J#= zaYBfjCcG^#_J1Gjo7zcCjO{oT<&lo=P408f`Ty>7{M>WyJ%%KHNM;#t0r9ryz|Xop z2Y%LVT!0Oq{n9Xu!g%*RUJ+gh`~~=ZygME*;3WSsE#4g)@tSxThOq>w0#fh+PXzja zF275?q*Y_BBVnvN2(ZaO{*eDA0lEJ3SK=WeZV?7B3?m2MO<oB64LA#|_Fujy$urg( z;u&EibpjZMVGiS7N$v5}@ccPE)@B%n6?o16XP#jgFUD1Xq_`E}$G}ZM0mTDskDG=# z!cGP50?N<N*Ve6DwS4(<Su7S4e8;l}d=k*Yg$s56{(YHNU0rQL_W^~^1TZiMP-<$b z?%cVfp|)Ye1~baXzqi1Efo~$Q444PxKEd}lfVOPeG7MIdnwpwS;JYE}Cj--g5@0@% z5jSAqr@+5~o*~Icz(b%0SOHi9>Kp^~$tRzT2rNlCIXPw<Hh-NwU?<Q#LO%jpfWHDS zj|ni44pjQHssQEY=4#QRMVdW(wz9LchYD&2wgOh*5TL56s*u3R$;oED*MJj1zu8t| zVxkHP3bbU&620-p8%jw@3GC-F@FyTGX25>Y=giKxZQG{y_V!_-@7}$uJ$v@()mL8) z6x0Cx8PK+E+eU=FckiC*`#+!?P(nh2%F4=g_Uu`CJf0wbuh%Pw!=du>av6qU*1ZJ$ zC|1Bb0NHFdUAuNIWRwE!%$YOF%gZyxJOVU*`t%Wfj~+c5G&)wTTBX+3*0B1yaN&Xq z3JT1+X99mp5dj0Ufqug<R9jmcmI%|_Znw(H%7S1V4#zOR{QP_YN={CG;;;{8H*eky z%mI6&1+E6PdGqF{7Gm12UAqQ>%gf70yq1!ZqDz-9MchY2LxUzvm|*tva!8&~7vzJT zU}j^d(;2ZCN!qbvhX7eD7Jc^FXOg5(KmBxYrd3^C9aa01^v*l)n8524A@EW_GiJ<) zT8t#U|Ni@f+5P_g`zk6b5}@tdx5uRYg9i_eI)NDt_*a0|uU{V%L0+#{bLPwupf}%q zQ-CH-nxw~%AIGHqix)4Nz?T(*X|&~`8{ol%2cx)!XNF-=Sy_q2Vxgg-0f35%3SM~O zg_yK|=gytM(@;L60p9~~xm+<31TbsXEY_`C2S83v4jVRXh*{eXhr>K=4(Svs^zseq z7lB@@)vDXKZ^vZVNm6ZXtpJsjl*Fvf{{DVVn>NiH(q)QdNK3j0RC_!g_U_#qiy(}d zef;sqG&MB=TnGLU(lOMX(05V(3E;I_t*Wc5i%B$M9pNiit|&b{-Hh(f^#q<#-)Tv@ z1pL9{@$lYz?{WS5^%%q>cGlY3%8C^$=;`SJ->R(oi4~r7H}qYUEx^A3rKhK>rluzB zyWiW}tJ}A4>&q{{)TvXaR9RW6wQJW3P;qgwPMkQQ`uch`H8nl;<LUhQ^MUjAdSJq+ zEa3p_yII#!{IjJ!d-e<y(9_eS)2B~s<Hn7eIdi6Ra&iJ!Ghvm96DMlMj2T+HcCC&d zKd#Qs&Jkg&s;ZQflw{WX50D)W$5VfKFbw0@z#jq2+i$<kzJ2?+apMO2_wVQP&p)TX zzdy)7F)<OF&BmljlY)xXYNf5MZLqjpF527M>Fw<es&BDam^W`88#ivGtgMVjj~-D` zQNiKEhfSA#K!v1%umHl1@Q`T#4CutaZZ)H0wOTcQ{(OD#!3X-{i!apC(IKzb`&7f! z?RM+p#f#d#d$$%ZUL3d}P*zr!Qd3g{mz?EKtvwQ8KXf+!w;xlcOwsP$yXAJfp9(G< zd+^|a4jee3!otG9p<hRYZ#bj+m}VG850KW`*-3VGcF?G4Y;2^pwH24k6*O$kqu1*V z8sd3*d4tEiygUjE3$a?QL2ag`rSb6LLx72rzKuw9q!IStsBZyvb#<wuqeCBk^pRGt zULCj?kGN!HWT>>XR0j?mP)kdTBq<{!!@Qmuspe=S{4J2NX3ZK-o;(?paO`$F1qB6z zkqakjndi;T&D^?mYp|_^gak@UOR24`H5W4D7U5q19hb#o(bA<$_2Gvfs<E*#+MlkR zPNxnXI;3~seK#m^5oLs<1?~s5Y11Y(H#dg`;&!`r_3Bk!zI-|CEZ*MUuAMt~20qiX zBGnv|A>Gy0MP_Cu00RR9oIih_hK7b=Nvo}`ZP;@*F)@+c+}vSFYwp~+ELgB0Xsw)? znMrqdH;i}EYHMrL;lqcua^*^;rKN>TL>7xhHk(bw#l@O6YnCQYo*eWXA6k-=lT}hu zqW$~#tGm1Vdy%xdf%L4bEWY{X8}om>{`%{@_10U%lGaNvy%hAQ0q}agbar+QOImex zbzHb`0guPG?ISfcmA<|{`uh4{93$L^KN>|vMLKfi$cSGgBDJorE*(2|Z1DY8KuM2O zbF^C?PWuJma5y-3?i^oz^_3ZgsLbp2a^=bu>g((I`s=R)FP)Rr6KT6qZ(A}9V;b;V z;1~FJ1*NB_vuxQiii(P`+wIuxcBW39%9JTnNJ>fysy{F=fXn5=>2%W4(t^|Jq_MG) znwlCqIyy`@0sjPkC+S*LdZPs%Y{&<`1}FuJL-=5`*|6K~SglrCT3T?qT!X*U5zGOc z0{$K?=%9vJ0S7f|7_R_}fS2*@?XdgHRAA^k**<*VdRqWz!10`<|HfR~SO7n<L*F)~ zsrWv@w&45fA2$(k2Oe*Gz7y|Rx97mmy8YmQ{||;F6S+NQ-tGVZ002ovPDHLkV1nCL BUabHC literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_ndt60.png b/projetechecs-master/img/Chess_ndt60.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3d04e6fa29d261b11356ebf3503e09d20f3781 GIT binary patch literal 1516 zcmV<I1rz#-P)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11!+k{K~!jg?V4X`990yDzvFIWH)%;WpfNR(&`p(MHNr}vG|hup zh_ncWZHiQCY4IhYVks)(i}+9!4QQ4?3rUO8is*vaN@GRcT7?>vB1U}ZLxcvCN@M?M zlCI6V$A`&`)9vhLc6Vks#QfmG?7jD#Ip3T!Gk0c3RF(ge?x=JC<<=7LV%HMzV%HL| z-x85}5veQpeoc7>EFw>d$fqLms)z)0%;^Rufr}#2?$y2vlB$;6fJPt<=v+GmEYF&= z&o-{WmtO3<;8;BZZq0&GAZ{Dq?J#~5s46$GW9b#4n+|<FBJwLR4!r3wz6^L6_`#zX zTuHoION+<|u&xNxYrxOI2=E<{P}Lbvf^w2)=LQULd)ek|f1BIg-Q9ZR$Pw-8>e6sH zd>!Zm9$d)ha1a<R5cq<*eg6D;HI+`MHJME6rcIj^I18*_h``Sm2&=%K=Jw{zoAvnd z<C;pP)UHG#p^->r7I=ZV)34&dzy=^y1n_OGzP?@$95|p?uU@sFQ>m23Vlf3i1MaRU zFi;QtZV$Srr$^)QxQa;8;0+B8dhFP-TgrUTo;?ao0Bb4<+-C+UBHGv2X9d~P(o%B9 zckI}qv$M0Rs+!4UbpQVSig86>QFdTpEih{aw|)C|3wCO1N&|s_8>oyM=yW=5`R?rO zRN$jZ0H3l47LUiRpoWHqO3tpm?cBN3@;x>-rnR-T3cOf0VBm@DpiZAYt*WXcBO}_> z)Z{5Jphu4$wV($F2Nh%OzQK23jC<}c*#T|YvPJv*`^}^8c?*Zbdg;=o?9x6}4&dyk zp0YLjbz*pU*zAAEH(-q0&>xio1~i#WTF}vGRDt*W1U^_vSU_X3m<2pAFrXMuYR#Sl z19t&al?Dz5gE~GwuBxij)6-g4SEoR)TaH3r@w^1o6foZxrPFB!2L}PDuC8X+u3Z2z z*A84}w-K13!r3)jb91w`7&&w1jM*RYtfa9mAw6uLmtueJ+&NWMotc@@s;Vjlp7o@p zMWhDUJKwwl^$qZTDGr8*hXDwMLPVocfXCd}xjBcQ1ggy+D_5>06bcm)qNT&Y;}~o4 zqGbXDw70i|OJFzU{0Vbqv~Alq&15oq<;s;}o`zDuUYp;~3benatzNy_x;>pZal-6h zS5irf$O@p-{N2{phKLXjhiPePadklF^c&Ejs)M$^M+$L}t<lj@E?>S3z{ZUm5fOln zc@5{uZY{Q>+S=Nxi9|vV9Xh0;P{?gIz6Khy{BCt=o41`jdD6;qBoa~Jt&*?Oz{L`R z>H~rfKEL+@xVN|00`BPOP~bx^79Kyjn3JtpV7ID1r>bfDfQW1b9xcM>Z8A$5VAZNs z0Qb#j;|BQ00^_(2bgJsR*#jcd0Q48=FQ+CaC#`KSfe&L`blm74Af~EcWe<qRoxsO# zf^sW|4BsOnRrze@1y<EDjC<U;ix^%})i1I;#khnHV7$`xOm^VL#zp`En)2DW`ZG;c zFNnzfKop3~b$0??wrQ`c>Ki#+yaPP#W?zNKA;Vx)&}c3j*Z&@>>NLh*A7=qX<O7UX zJypQBsygIkCn5(i-jaB(9KiSHHFC4yF17(L<IRJHV-peUwlpy@VfOFM7n5(_c!<b8 zj5j2{DG&%)+j9pP=BZj=fJLMYc-s%(b}blS;58q8TM7mp*~$wnBI_|8DScOt3@^)P z<3|>r@xiB~>=~|PNk8C&Pe(13b9jvpJ{?u@42#HepxH~G`BZUWAb|08PFYk_^WSUo z8#iv4o7eK$c=nx^<xpfTWjv3w^cRp+)l9Alo&zs*EqyP&*tG<_*tG<_*!3^!0$>%x S+beef0000<MNUMnLSTZ+{LJ3~ literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_nlt60.png b/projetechecs-master/img/Chess_nlt60.png new file mode 100644 index 0000000000000000000000000000000000000000..2d716b15b180f2a9b194cd78df3a5e7e9a0c22b0 GIT binary patch literal 1878 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 Qe*gdg07*qoM6N<$g6^h=!2kdN literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_pdt60.png b/projetechecs-master/img/Chess_pdt60.png new file mode 100644 index 0000000000000000000000000000000000000000..c432d38aeda8c8a49c772c9d7295d0359add9c01 GIT binary patch literal 797 zcmV+&1LFLNP)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10-8xgK~!jg?V3Gn6+sk+pEo8b8WfFSP}HD}LK@K^qJk*?fq;cz zDOy-)iuenHo%Xg`i3C9`1jWX$LJN_Im4z09AR_pIMdGozxj~{NJ3Hshy}9?kaJo6~ zoQJbJJ3G5FGrCEAtuCOndcd8o9&o3t2i)oEI^h0ROe$$7Fb3=ZUIQ=9>}!$9&8%1e zBftZ|7R4-Z1y~(jgGy~JB^?It1A|Kpn*k1)+4rbAirmAJ27wza4GS;|T#c-y)S@*B z?5a5SoTPnGg_Ht55<I@LN&%;KY{hr@XYlySDh2!|czk7*0=|<l_BU`hs*rGCNhg7+ zgp@vDTGEz~dLlO-lJ)>ESpNC@KRpJHo7t>qO<^6DGyqIf4;J7kjqRqZ!a6MJ3~)2k z<`=Nt%sxAm1jOFM7acs-0OuWi78C+3X#;S;$?k-c4-nVks{7_D+U@8S2E5JDYgm%J z%%XtbI(p5R<H{NWY-aC(Pfm8voqT}URr;xu&od_<AQt$MgU1~3#KC7lk-*n!Y!7pE z*~~t86tke<Q_5lBBmbUKR*9PtHAU{F*8&%SO*Ji!Njl|NQbR$V-3z>@US}7_Jsi)g zBVe~W!Zza;^DjDW1q`eQUOB@y<62t*0|UUrAlPP1v=i`DFs#uy?;2}4FpX1<F9m=N zxSdn0*JJ4{u+hnDIgLxI{mPgPEU6#3l<SkAK47ADw!`IonlhL2-|+(&YSkq@>EMy7 z<}NN-S-_G;2>kH1jK=FE<#zaBW`2%FC9O+MTFJnxfc>dSxxk~D`MFA-KNol?Ge1|! z^Y?%gwK+3CSIP6&2A=;qn7m3lD|tJc^XuUpt$PMH^({4_*q?aqqOSX!wg=ql>H&AU bx(@gc{sH)y$U_yZ00000NkvXXu0mjfw8>#< literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_plt60.png b/projetechecs-master/img/Chess_plt60.png new file mode 100644 index 0000000000000000000000000000000000000000..e98fae2bd8dd89313781f3107fe1b156e4674907 GIT binary patch literal 1294 zcmV+p1@ZccP)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11dB;TK~!jg?V8I=V`mtLpD(5f65}`-qoPvq!hn(rBSt$YQg;O@ zw9-Fdid|GKv|{^L6j$Ap?gpVqyVT9#B2;bA3WK178LxpEQDbY0NVKB9UFcV0NrNZn zV!S*MI3eHV_vHQZan8w6BEnt5b=?7+=3e-=b1!_`xfj0e+&N+Qbxf+13IbuE5m*L( z7m;m8CKnOMUO+MMBOn=GKLMq7XHZU^S}LWgfGF^;$K#=`t&LD9L@X9#W@d)N!$W{w zpj|{(YzyLGbzcC|($XSJOG}bYJRX<M&Q4wFC{SQq4u@nv0VEIz$kx`DWFnbNN@ZoG zmj2AHEKcpx9RLFZ15{L0WNc7UQo_*C(53cv;FRzafN(gRwNcvVPwWcflyC~*<m4o4 zqtnw<eRyP75T}G+0ZdFxWNj3QMD$_Iwj>U1TJHnm@pvR2k7wMpc6WEh@AvCX>%$wn zX(^>11J40G9uM(&JY&1JZ{Ol}|9j&1gHp<#-?7b=Ee2i#5(<SR7K>%9u4ZFnL&D*( zuJR^OW_c!?g?|R5si{d04i2))YL1SMq@$xlOHbSwVa_iMq^PJ!*4EapB&$gz5>i@P zs--)u%w^|q_)CD^-d<{JYYlY_27~nX_v^P`S(?hm3a<k)KR<7%x|+?+O<mzVD|6X$ zwWO4C14k~Gt00w1;q`iR8Yd74kW3~40wR*MBAZ=Hx(p~NDJjWW7S4q)sInpyVC$0p z1CWi4jhvSB-rk-lr35$z3a!dz=cY9SFg-n;Q|D+js=v6GB64U|C_9Ct0F#rGIdz_z zn$m~AS(N7-8<%uDAYQLmW@l#&E$3J)CdI|YdYAsl(p+{4Ur2usNOg6!?Ck7ZNp^pK zUm6-3wCpdIXR=w?4MYIx?Cg}|<KwKdXJ=>9)6=767lEQ1Bh2~!@CEQEAa1u?#>U37 z3P+<+@p`>l_%GmVz@7KPz(Zj6BDi#Qb;;u5Vpdtr>guX=cXy}XuU-Hu@>Uq|0>1)M zRaGUUqoY?6{V(I=<5E{wr=?#4{=5?g6fmkcsyA=m<Rq&}Bob0zU$3QK0Pp0R@OOYb zc<?|L78Xp&YF1ZQrL3$>OFz#WVW5YL`&N-i#1dJ}+}xb_d_FDxdA<nG0Wv&1Y^khf zWMo7OzXn{_DhzzU#a}5`y_I8>lamvvsj1P@ALp9Ys&naY;QX%?pU-E}ke4YaC}41K z@X~xaVL^2pfwRKGLP;bNwp3ShaBv`jKtNad>2+0j2vE<SJtG(lS}@%I<Ma9G>+92R zzs+e73o5(=$nx^Ct<}|RZ*Pms<r3g;z-u_KN!dC;Dl01;k<~OdHtJ>FW;C<eCH)kj zwYAmcFvdumugz#*v%>EIG&eV!9L5-F^M#D|H7i^SP+necau{Qz&G*P?U$erG;L`0> zM@XB`u&}8c@k*&_puM)X7Qf%0^EgIHrBbY{tN^?c5kt$`?2~v80oK>oO%7vjej}I_ z{*?0z{_7(9Ln9e*>`A<Q;m$oxdoO(3xfj0e+&STY0OuHq+{E@%^Z)<=07*qoM6N<$ Ef;rAuod5s; literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_qdt60.png b/projetechecs-master/img/Chess_qdt60.png new file mode 100644 index 0000000000000000000000000000000000000000..0d94a1c29a50896a6fbe017e1eeda9b5a42fe0a4 GIT binary patch literal 2267 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 literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_qlt60.png b/projetechecs-master/img/Chess_qlt60.png new file mode 100644 index 0000000000000000000000000000000000000000..a4fe68c80f79ab7b0b2ed6147383cda435407ea1 GIT binary patch literal 2637 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 literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_rdt60.png b/projetechecs-master/img/Chess_rdt60.png new file mode 100644 index 0000000000000000000000000000000000000000..b9748e87f29861cb4ca00c7ce03df54f3f6b35a0 GIT binary patch literal 725 zcmV;`0xJE9P)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10#ZptK~!jg?V7QR6G0Tlzi;u*6cL+9G+?0+kSk3{o!Z9MKfxnJ z5bTo1+QJ~@1Uo^nva--}A%#UMt!z>qB%30rm0>sTv+%?-hTEN)&BmLZAG~72o44=V znRzoiS&9gXgtzMi^2Q0a9Vgg!oM78=f^A1zFv$|h_atS59g(DhzmWVy^2&z$9FmOF z`X?eHS_YsEK+dqMiv9xN{)YPmD*j1!LHP-#=Pt=_r>+lDv}uyOxAt2p!<@F-!+Dr; z54)meJLg?6lU@GCMDQiw_qA()sm<qec%FA%HEHUec#zz0wOXHRwb~7>0ER3Ui?5^6 z=%$E#QEF)NlmYAkc!B(@^E&{Sb#m73;nR?O0N`oA-}jo$rg6MYOs7+HIvt3}0Kg*= z`JodhlZ}UnJR`XuMbVSxa+yWQe+a`6BJxT^9vTJ8s)!(;jfnC_!)-ivoj~3=!M5WB z+l~`#J5I3eIKj5#1lvxQ2k{phjRxxVdWIqY5Cj2y-!B^n%J6;oweS0~EoQTsko;(z zXGUUg0SJ-LdDb11T#bh`$x@|Kc{3Oc_R3}R5qB1G9HZCky(D>CM2>Z0WHE=|u2!pq zFbuJ+^Q_-QQG_rID*!%_tc%EZ)fmR7mLvlJRihw!ToaK%wNc@grNRj|p2O8@)oZug zSo^|ZtBl8EOePb(#u`h|A%GYs%S5-^HD6>E84ic*OVtrh>QRy@7p)x@sU%VrvBJ$^ zC)jp$1V6^FLh(QG9Kbw{V<!I(pC{aqwjC$fcAQ|_DV*S++s?t7)|)aB00000NkvXX Hu0mjf(#uH; literal 0 HcmV?d00001 diff --git a/projetechecs-master/img/Chess_rlt60.png b/projetechecs-master/img/Chess_rlt60.png new file mode 100644 index 0000000000000000000000000000000000000000..a805de496f4d152dd02026bed09b45548b6e88d8 GIT binary patch literal 933 zcmV;W16urvP)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H110qR8K~!jg?V7Pq6Hy$;KR;-~+0epbXl)0_E+zyTSque79b|NH z5F9H1f)lbZun-1xVIzb%F)(OMOxPqeAvn?w7;V~;(2y8$Xy|i*Gay&md-tGvy-)H> zn!ERY_xs*^_wL^BS5ZpQNp!V4fSV=|>~{jeekTy@cLKqFM_aInSR(RXM3jRqiHNvp zuSDdFh}?F#&a{ZsTW#MIrIeNdV}QECVlLY&;HATL%5K^>GtW~xlgV6gI503^pL!x9 zPi+GpI<;3yk<Di9KI!v)&iYvZrBcbMy=y|+JsZ&9-%q7d0eIW!{1wMuoY@6>dU~)d z%Se321+TBKGdnv=y<Wd`&ay1#=jSgSpP8BA`1qKEg9AsOQ&UrpH%bTNf>Ws!tE;Q7 z`dF65;^Ly|P#p0rxLhu?wzg&>mX_Ju+tcstVU>PH^Huk{ZP{(yqMPv$kuZ=4?u5f( z#>dC$?d{d_)he}Gjm^zX4i66jegH#Cse&sfx+8pcqxyi)fJ!ElDxc4*>*DC>NR5n) z*dx0S+|`L$dxUL7q!0K2j3kpu=H})Ig^aI-EG#UrwY3HC6&O=W?d$mQEExWX{uGTy zhlYoT&wqRvp<1o7ySq!JQYiutbj1SRru1La`!S$0nT+x2oXuwKsr<@ooF;cmKMne7 zMAfT<V0-9y0>OSK5bSpX!G0$Y>~{jeey8IEo7}1Q0PO7SFflP<&@JS0Is0eCt1pv+ zp97@RX(lHp4Z4L$B*Mzd3Y;bmFDJI$U}*E70%~1dU21!K+js(?R4S=xG-@XS9(jq? z^9YNG1-t`7gM)(<3Iz%UcZtMS7#$sDV`BqgSw!wDrM_u7GBCOyx#4`Yh<pcbwPl2X zdjN?<g6{5a1MaS-SS)gKa+2UQMf}Tce`AYQE|((~i<xrQkXS5cS0}aTxc6|!3D#Mp zrhz)`FQlEfCC-Wp&CGS>K}5=c+0ud;;!3G<vqsue`uu+`+G%dfIvw{6YrmG_@wmx2 zZVa6fe$DAZ@h|ZPXzAr_q+I$x(Q(gkAlUB&g8fb)*zf!X(N-O{oXmv600000NkvXX Hu0mjfs#me) literal 0 HcmV?d00001 diff --git a/projetechecs-master/readme.md b/projetechecs-master/readme.md new file mode 100644 index 0000000..57083f1 --- /dev/null +++ b/projetechecs-master/readme.md @@ -0,0 +1,78 @@ +# Projet de jeu d'échec en Java + +Projet Final (S3 Programmation 2) + +## Binôme + +Alexandre AGUEDO + +Astrid BEYER + + +Aix Marseille Université + +L2 Informatique + +Groupe 3 + +## Encadrant de TPs et projet + +Pacôme PERROTIN + +## Objectif et tâches + +L’objectif de ce projet est de programmer un jeu d’´echec. Ce jeu permet `a deux joueurs humains de jouer ensemble +ou bien à un joueur humain de jouer contre une version très simple d’un joueur artificiel, ou à deux joueurs artificiels +de jouer ensemble ! + +En savoir plus : http://pageperso.lif.univ-mrs.fr/~alexis.nasr/Ens/PROG2/projet_echecs_an.pdf + +## Les fichiers + +* boardConfigurationFiles/ +> Dossier contenant des placements de pièces pré-remplis, ces placements sont utiles pour tester le programme dans diverses situations. + +* img/ +> Dossier avec les images en format PNG des 12 pièces de l'échiquier (6 noires et 6 blanches). + +* Player.java +> Classe abstraite déterminant un joueur. + +* Board.java +> Classe permettant d'instancier le plateau de jeu d'échec. + +* ChessBot.java +> Classe qui étend Player. ChessBot est la classe d'un joueur robot qui va choisir les coups les plus avantageux (rapportant le plus de score) lorsqu'il jouera. + +* Human.java +> Classe qui étend Player. Cette classe permet à un utilisateur de jouer. + +* ChessColor.java +> Énumération des couleurs possibles des joueurs/pièces. + +* Piece.java +> Classe abstraite déterminant une pièce de l'échiquier. + +* Bishop.java ; King.java ; Knight.java ; Pawn.java ; Queen.java ; Rook.java +> Respectivement les classes du fou, roi, cavalier, pion, dame et tour. Ces classes étendent toutes la classe Piece et déterminent, pour chaque pièce, leurs mouvements possibles et autorisés. + +* TestChess.java +> Fichier de tests. + +* Move.java +> Classe publique qui permet à une pièce de se déplacer d'un point à un autre dans l'échiquier. + +* ChessUI.java +> Classe gérant l'interface du jeu d'échec et la possibilité de déplacer ses pièces avec sa souris. + +* GameUI.java +> Classe gérant le déroulement de la partie. + +* Coordinates.java +> Classe permettant de récupérer des coordonnées. + +* FromTo.java +> Classe permettant de récupérer les coordonnées d'origine d'une pièce et les coordonnées de destination d'une pièce. + +* Main.java +> Classe principale qui lance le jeu. \ No newline at end of file -- GitLab