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
zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?OfSc;uILpV4%IBGajIv5xj
zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh
zq!<`jGCf@!LoyoQ&a%&m4i!08e|)22;N`M{kR?1vno2xRHMz83Xpm&kRAA!rzOCWJ
zlk+EVa)N6UZ`%|F2Mz&c<|IauK$Xdzj1dkyJaSo`l=`FsQ|2^C&9UeemTyZ}4*q)c
z{n6)pcjVc<JTdA1*PZvDSD)MaeQvdD=+3DEH?x@%lj93^gRwtLw}+Dpo2$x~f6i|M
zT-scpq$_a8uzXVb6f;96;A#NR4tWj6DrWE2qt1tJRdk$iO}Oy1kkezutEmerTZAqt
zUFzN)(ID|5K_ceRsfV|1x4h(;!>Y&`c2(y?b#vPN)`O~NB7ZHlI)5+tYW!gZ!DSEh
z8~Y2>o<{xQIMa4aspaVkVGHIz2YaWhuy!4=cF2EF!z5O%Ua+t4!t1yB4<61AGALj=
z@lzmrYwm-ev%L&H=oI9NCuP5NUa<HnD|0`?Q?;XEZ@*3x<N3l6F2y->?%b;-R%<7E
zESdN~Hett9*7MbpJ9ErduUb`GTN~$A$!U>u^kR;z*u>)vf&IDvzu#o2J)pf?txR@N
zSYN~CJbss!l`A#b*ynz4pEpmA;n}li8X{b4)~`1<Ha>jo)~wmxla)Sg3OlqyQ=+v<
z`~$yUqGbQ^((3By*NHhfYXURoZ+MVpdZ?f2ZXSPlc(|w9<S*a9GoL$g>~Z0;<;x=@
zBNgYLpX|3>`s+uN54o3pdfk5T*iD<gbg61+sIQ7p-Lw_@QJI%^o%MgbcC9YMsi#E=
zwL1=KElIAES{|gy#>N&A7st1TKU|{qi}8&&YhK-SUn_Fyd4btq$E16QIy)0WV_ElY
z`|z|$X+y%p6Pq3tialSd$gyYTDrvQOI-eG)O<%t8{M}-QBRz|kKInR}*&#C{!=rfT
zoV>ieUz>V+dFRfVv!?4Wmqp6S^F{ixu3Q$kZr=QvVk5VF@#4eR`$MN@m~d_2m=hFw
zo%dT_LfsW5C4HuRW|zemwJOhROh5fU*QcQ}wD#1L1%(#(dyN-IJ^PU9-FL0@W#F5B
zAHOIo<FgMxe*AcG;zU6u!QKB2C!e%YQCbwXGhO1`#@5zWT~oJ>5m(;5d&j<}BC4+-
zCn-s3nvdGvX?Zq^lTQX{i10=HG@iTERi!_8=ayrJp?gyvo~XL?>&^}N1F8q!rCii9
z*P1BA7`MQ$_H_HyMt*~PnXE;}on82t`X66e*j9Mxj(5^}M)8L84gR55!&?ssZ@<eW
zmY(*CweLZQa@Jdir@yVW=I^y=&vuWwllwsA#ij%EMNcz^7wYY~ax3(~rd89*j^19K
zAZW>F!+3}L4y($CvT|jPHxFVKMzGW|-3z_y>c9WXgz4=K{v7*SF854r2w%yQ5NpeO
zq>S<YmIj6O)7T!J<*3`w>hfdj=d*9NaPiLjeKh|7|AFro-q&jn6h4qB`~Ayl@80sm
zp588gjQJ1F>=AE>Z#Zo_?Qmq#A_w=QEa^!rZ<$R9zPdl=*Na1zs%yRm{$<XpeZ#=6
zox8eBWCyzi&mPu2%T`^F`O319?>+0DeSuqh6V~6@FL?jm4e>kgc06VI&#k#%VpDYJ
Sgry7&3=E#GelF{r5}E*&7Dm4S

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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
WHDA6@{>Z?<z~JfX=d#Wzp$P!CYrvua

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
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
KT-G@yGywnw9G&I>

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
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
K&t;ucLK6VnR$i?D

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
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
bzv{nYN)SDKTf3Zrfq}u()z4*}Q$iB}%lypW

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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

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
zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?OfSc;uILpV4%IBGajIv5xj
zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh
zq!<{OW_h|ehGaCpon@OX>L}7S-&{>YN~AX-;L3ttC#j1Hi<&h4H8!*+Xhub3bp7CN
zn)_{AR40q04$IMF>z%kKc1&#*Yf@19(dhbU<Bpw<i&U(wpP$*g^ZUMnU6$|Xv~RYy
zw%%=Iyvwt8t=@tyRR`v-lPg%hn*GkpS5^=Hh52Y@svEGqVTfbaKl>(o;>ojXA{dkp
zFdq;*s#CxkAsgH5m8+{N%l3}B*_&rJBj3!M-&a_5-8npotx;Nsm)n3VrgzQKD~n7y
z->kCuHfKp~VCxhnJ0Y8Wo4gp8m*pHS|B?RT$0;q=KWY^<sZ*KuO*Z&uUSPgzLP3J3
zdgIELDRv1_m!?gqQZkpD^o>D3;@{8T_O@(&vv00R_f3?YX2ReT%rEvpqxbEy)rYKf
zUh)(eUw$UO;qDnb>nSWp?j07FwYkRdT((9`gh?lpx!}ObcP*3o1+G6__4}FDt+y{k
z+4h{hm>n@`&zVIH_pPeV&Uk!EiYX`UeS^PW+4;FO4L3r6t(<(`SY2L0?8n6B<1!zP
z987ndc;I?w4u5gU%`<itBAXXH2tJkgK>7c?ps>!_f~KzTmR@HPZ}2tM?enyH8WH5|
zIQK61p5<}r;>T@e&aYNZ*lu;m?6KHqeXCqno;B=omWRzAM@2I-Gaopta3jrUi|~gK
zgEbc|-b-a$8uSMD>a#ZR?wA|A`g-z9oedXHW?S}puljpx2CvRa`5jYUPhMb`u&8X?
z;iomTjHZ9O|B+cD>#C~l%LfxzJ=4>Rj65*OjpNUUtv$zHt2{0Hk&sr`=cc;W+c)au
zfz=IvS9<O|uz2RronG_o#Va(7?ZZ!g{@x(G)e_9Q&NlDA)r>t}R@#-;vp>InD6_Vj
z&HSsb>B1ZHE8Z?z_j~p>P~u=L-?fYH2me3DA2Uuki>_f{U|{fc^>bP0l+XkKw8>#<

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
zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?OfSc;uILpV4%IBGajIv5xj
zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh
zq!<`jx;<SSLoyoQ&N}U#oG#HmUw;{=&|?e9#fySI9BP=vrR-*{5me5qx#g05LRV~v
z?v|wA;UeL8r@UiZ=&}3C*#}A?xfi&a7c@(*Z<Gv7&hGNqvS?rIi|{1RX7%Sudu#+O
z6z@O%{^akc!gD7Bl@7%oD!t1%=ULp3ZN>UEw|9!~dwa(+@q4MyswrGdi3<cH*y_Y5
z=DMqi3m%ViF#MpbAQ@-RxU?)iz;AAp*3wlC8Xwjjf4p$*+TH*S7ag(Ww6wOvhn*W@
z7sR@R<#0brD2->hbm@|kx3~8sKO4E}=g#@XzSIavh~{fgv1e2f;5c#Z+O!m<nLb{r
zsY|E*JF`y5@9ia724-gFkdTm+oPeO9Ll-VwSo*E(!ITfe4Fwi+wg%pM?*E4C(UbzN
z2Tz`;WG}vaIk>hWC0t;6OFW~Gk55XjNT<t}#53De_;RD(Ge7!Rp(59xerHQrdHK=z
z-(UN_J}kXEQ*)^t^La)aIsT6oHp#oU=ih%+_P_ek_vWBe^X_jvJ5`r0j#-GSRYj~j
zb<Mi8<YebV4>zp)q!y4?sW!W{o^8p>m7aWje49>X_4V~FS-jZU+y9P4;yHbuB`a2V
zT)TE{oyuxY6``Q0s8vg?*PKaxp8vzU;oiNttn6&wQXaPEFW<kv-X0%0>(nu>^~^^0
z_W3Jz%{qJ5H};{ecJa-ktxKj9F}v$cU#&3J>*3d`Vkvb2jtM?$j7&<CwkXYx_1?v!
zp`odHGE(eZtNw~jN+JobC;eld(A(QPXWEy0_vUFVWwBu6T6-$>`7%>x16$j<!Ot^H
zR_)(0U8yJ|RKvP;F~j7^lPyc<&6;(oeShSX=Q7gMORN>*)`zF1r}OGQkI+#&dh}@3
z^nWKV#guWzd(`uLl$LIN^X5&AXIXuHyp)vGmN)v-(l<rk;B{em`R2`($B!Sc*_581
ze(Cb%#i`<ri=>s${QUQU^@F-X-uCEY$Bu2{a$g+yv1)JB5B&$(2j+f1big^`o6?Sw
z($bTU9wmiEo_+OdRY`gI^84%K7_>fxNqk`1&lD6Is=9db;&7qA`i~z!4hj!nzBHcc
z-yUH$5rb9ctIYH7J%I#peEj;Q@eJ>u%>Gc`U{mqIK}<}{=VVq`c=*yaYka)z&r2sR
zXz%_VHqqmVP~_P=cjo-4vD5uqxsT&KqmhkG&dN1uDJd@8``KcyYw^?^I2x}RzIST!
zl*yBYSFT)n@sj-WSyxvTzs!H|XT8Y$^XV5SOxM)VNGK@yaH+;J(Xmvzar2==PM#`4
z+d{&N3knn(9UQ`czAO!`;0QQB&sJH2C(7W?|Hq$yzIgrma{m6anF8Eedzepr`m|~7
z)vG!A`Q4|V3O&d_kZrNv^QM)9mbSL+#H%J|X0KB3rkQNMsrpxB!Pc!;pBNnTn7#gN
zM*QYO?-@<Z&1cITlgRws+Vjm+JBBMDE-tS~B6-Q#?<YVC`X5|+8{+OU`}~FtE2Ter
zt;}4ociT3x{rBg8ws7-Y8nkB38iqYWg3hOJy_sCW&v@<nbzi>ZygKC>qW`9R=Kl9u
u>9@18WWgKHJv9%{+4@$)%YldW49_Jx?;QCS{Dpymfx*+&&t;ucLK6Tv&RCrQ

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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
Y_}uE&;W*=$3=9kmp00i_>zopr0IB@}0{{R3

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
zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?OfSc;uILpV4%IBGajIv5xj
zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh
zq!<{Of;?RuLoyoQ&f3^5>?m?<fBwgFB7(C$OcE9fOwjiAn0xEkHT#3gE&^{R9lLc%
z;R%bi<AzO}E)*%Yx@xV>36fQrt+ZllqWQbcAC4He-JU!1?6KK%<@Y2Vp1uA3?U|Lv
z){$KtT`k*RvwS+nxlLC6M%kQ%+l5WJ?$HJ(g-(7~No|&$xTI<Sgg-8yPPP4(nbdRn
zm%5Tt6x#w`hjSZNcl~2}@UQJRi`GBSGRL2sOP}kV%wN8aKWIzlq&?feMQa|Ov+dU5
z${9ucyBDQeKaVw-9Q*H>%Lmo_-?wHrtUUX?xME&;tZC+}c@-1x<Zq3dpS|@K?^=d7
z9kK59i!Z)d)=?9fmGNl`;~U0`#y_h+TQf{AExPvZ;pGW63=cB*-~T@A?6Sf=zCO!?
zORQu&PB0u$7W}zTSbcJDdxwqkPI=dhlb;sNbUjheaacg<lb4H}6zi!~9SZY%J3hG`
z&b29<>u}HF;I_vsxBG;1to=5;g>d|)v40eo?qz%RwW>|=zW@tk&3%1o_ER5fe{6mK
zdy{V3=9v@zWXwr-OUh^Dn0UVOn(XA5-gc9dK}&-wjU{-#ol5;IST0s5v-tY!y(*Q_
zE`6m*DTeL$*M+TaHsIN~_Vb$iE`couJlYI)6V`N}D8DLkZ22@5W`@wk3RN+}6CJh&
zKAg7n5U1I^!&kGeW^cb8@%vEX>Yn4tK5D{yk4br7P;8J;Kkc&pwrPBds3c$eYwxRq
zey;*2X^O9v6<etiB)aj?*+lglWhE^3$JRT2wErk`z@|4@?LYr~^*a+_k*hi9!Tj6j
X4$itZ+enasfq}u()z4*}Q$iB}(#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
zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?OfSc;uILpV4%IBGajIv5xj
zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh
zq!<{Ol{{S>LoyoQ&f4fN94K?#-ag~d%?pQ;GIH6E>#4CwMe?w^%chhR2*_ytZxY^Q
zut9*WBvHA=!q6bY$LEHMiK4|NK8f60lP*k<D9m_K++eH_eyjTXf~vj#pS)-7{$BU}
z_r2=x@9w=15A?d|S+do-VYZsUn{uXub?OkxJ$ge&gwm%tmnqG<ogF(e*1J6E?zmI7
z<J^{xE77_4MV3yP#+cl&>rj&3ZS4n350{?GyJc>CKG<sV$(RBQ1A~P5RZ2?!xy*7_
zTf@C3o=tme_wsY?xnGeCOM_0X+?(xm%U1fr{rmn)gBUArzxX41JZ{cS)~c$i4LYYi
zYL2n4U%%ei+S+?>-2Retn{=K%f37b(f9A}GKYq+;Zf16$9~>OqXYR%RxG8w0$m-Rr
z*Zqo^cJ$GsMK1$nKI-g<(c8RjTbk0eX*X}*zWn}8;?z2~&!OLU<=)J_vuO55fr$na
z*x$7rPCRz}_{+C%uYS6!wKb~u>{(wvetyO}24}C8P1@?alxxZs|7tkj;H5TMYySDw
zuOGd5;nCaEb3=JI|DCIyk<~4^E=%}-F!ZQQ_I&p28Aof+`c@qsoef*JvVIVi2=;pW
z`o~8diGLmcM0(xY+uGaD*Vjlaj9R;C_ipc{L7GhbB}bX=E&CFG`M2Q$qnSM)U(Pw3
z_IBl;Q`vLW%DwG*e`UE`UEQ2e{Q@aAppmltG0W^bE59?mdGp4=&@l0W?vo<R-|0tI
z>rZZ)&%ESvrkc7s@2*x4l|!daam`WV(^ubiHzDKme5S0}*x0P<>f04e3qrJ3W|(BD
zGs;zVUj59`-NCwt*{Qj?S%iy~i?zJ-NSK7IY-(~cb3&xcJME?WGA)e^cFFI2ShJ<0
zhCOd<YD;4^L#IpAyLWla@767g&?zb^n)JZL_0Q?t`sD5~z3Iwg-7|}>Pl(V-3s>Lz
zV#oJ_<DAzbmn>_vdaJ)=?snC4U0i3+ls<KIIn{9UQj_E(ua!lc-EIZ{`ctoWD>Lu3
zmF#z(?ETXoecW-<B9CXTVBOi5P9OC@vSqw{nzJP4m;J@U^92ew-m^6Q^;5X<{tw&5
YFxhQ$&a@n2U|?YIboFyt=akR{0IFB9<p2Nx

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