<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="source.xsl" type="text/xsl"?>
<article xmlns:dc="http://purl.org/dc/elements/1.1">
  <dc:title>Chess</dc:title>
  <dc:description>Code source d'une reproduction en mode console du jeu d'échecs</dc:description>
  <dc:creator>Jean-Frédéric Guilbault</dc:creator>
  <dc:subject>Échecs</dc:subject>
  <para type="filename">“Piece.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para type="comment">/**</para>
  <para type="comment">* types :</para>
  <para type="comment">*         1 pawn</para>
  <para type="comment">*         2 rook</para>
  <para type="comment">*         3 knight</para>
  <para type="comment">*         4 bishop</para>
  <para type="comment">*         5 queen </para>
  <para type="comment">*         6 king</para>
  <para type="comment">*/</para>
  <para/>
  <para type="function">public abstract class Piece {</para>
  <para>        private int type;</para>
  <para>        private boolean isWhite, hasMoved;</para>
  <para>        private Chess_Coord pos;</para>
  <para/>
  <para type="function">        public Piece () {</para>
  <para>                type = 0;</para>
  <para>                hasMoved = false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Piece (int n, Chess_Coord coord, boolean white) {</para>
  <para>                type = n;</para>
  <para>                isWhite = white;</para>
  <para>                hasMoved = false;</para>
  <para>                pos = coord;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Chess_Coord GetPos () {return pos;}</para>
  <para type="function">        public void SetPos (Chess_Coord coord) {pos = coord;}</para>
  <para type="function">        public boolean GetColor () {return isWhite;}</para>
  <para type="function">        public int GetType () {return type;}</para>
  <para type="function">        public void SetType (int n) {type = n;} </para>
  <para type="function">        public boolean GetHasMoved () {return hasMoved;}</para>
  <para type="function">        public void SetHasMoved () {hasMoved = true;}</para>
  <para type="function">        public boolean IsDead () {return (pos.GetX() == -1 &amp;&amp; pos.GetY() == -1);} </para>
  <para type="function">        public abstract int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p,Chess_Player opponent);</para>
  <para type="function">        public abstract boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent);</para>
  <para type="function">        public abstract boolean Kill (Piece o, Chess_Board b); // o est la pièce tuée</para>
  <para type="function">        public abstract void Die (); // coordonnées (-type, -type) svp</para>
  <para>}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Bishop.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para type="comment">// type 4</para>
  <para type="class">public class Bishop extends Piece {</para>
  <para type="function">        public Bishop (Chess_Coord pos, boolean white) {</para>
  <para>                super(4, pos, white);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p, Chess_Player opponent) {</para>
  <para>                if(ValidateMove(coord, b, opponent)) {</para>
  <para>                        if(OpponentOnCoord(coord, b, opponent)) Kill(b.GetPieceByCoord(coord, opponent), b);</para>
  <para>                        Chess_Coord temp = new Chess_Coord();</para>
  <para>                        temp = this.GetPos();</para>
  <para>                        this.SetPos(coord);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        b.ZeroCoord(temp);</para>
  <para>                        if(!GetHasMoved()) SetHasMoved();</para>
  <para>                        return 1;</para>
  <para>                }</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean OpponentOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color == b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false; </para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean FriendlyOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color != b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">private int GetDirection (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para>                int res = 0;</para>
  <para>                int diag = 1;</para>
  <para>                while(origX-diag &gt; 0 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX-diag, origY-diag), b, opponent)) res = 0;</para>
  <para>                        else if(new Chess_Coord(origX-diag, origY-diag).equals(coord)) return 1;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>        while(origX+diag &lt; 9 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                if(FriendlyOnCoord(new Chess_Coord(origX+diag, origY-diag), b, opponent)) res = 0;</para>
  <para>                else if(new Chess_Coord(origX+diag, origY-diag).equals(coord)) return 2;</para>
  <para>                diag++;</para>
  <para>        }</para>
  <para>        diag = 1;</para>
  <para>        while(origX+diag &lt; 9 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                if(FriendlyOnCoord(new Chess_Coord(origX+diag, origY+diag), b, opponent)) res = 0;</para>
  <para>                else if(new Chess_Coord(origX+diag, origY+diag).equals(coord)) return 3;</para>
  <para>                diag++;</para>
  <para>        }</para>
  <para>        diag = 1;</para>
  <para>        while(origX-diag &gt; 0 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                if(FriendlyOnCoord(new Chess_Coord(origX-diag, origY+diag), b, opponent)) res = 0;</para>
  <para>                else if(new Chess_Coord(origX-diag, origY+diag).equals(coord)) return 4;</para>
  <para>                diag++;</para>
  <para>        }</para>
  <para>        return res;</para>
  <para type="function">}</para>
  <para/>
  <para type="function">private Chess_Coord[] GetMoveOptions (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>        Chess_Coord[] moves = new Chess_Coord[7];</para>
  <para>        int direction = GetDirection(coord, b, opponent);</para>
  <para>        int origX = this.GetPos().GetX();</para>
  <para>        int origY = this.GetPos().GetY();</para>
  <para/>
  <para type="comment">        // si coordonnée erronée</para>
  <para>        if(direction == 0) {</para>
  <para>                for(int i = 0 ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10); </para>
  <para>                return moves; </para>
  <para>        }</para>
  <para/>
  <para>        int index = 0;</para>
  <para>        int diag = 1;</para>
  <para>        switch(direction) {</para>
  <para>                case 1: diag = 1; index = 0;</para>
  <para>                            while(origX-diag &gt; 0 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                     int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY-diag)); </para>
  <para>                                     if(n != 0) {</para>
  <para>                                              if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                      moves[index] = new Chess_Coord(origX-diag, origY-diag);</para>
  <para>                                                      for(int i = index+1 ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                      break;</para>
  <para>                                              }</para>
  <para>                                              else {</para>
  <para>                                                      for(int i = index ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                      break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      else moves[index] = new Chess_Coord(origX-diag, origY-diag);</para>
  <para>                                      diag++; index++;</para>
  <para>                              }</para>
  <para>                              break;</para>
  <para>                case 2:  diag = 1; index = 0;</para>
  <para>                              while(origX+diag &lt; 9 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                      int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY-diag)); </para>
  <para>                                      if(n != 0) {</para>
  <para>                                              if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                      moves[index] = new Chess_Coord(origX+diag, origY-diag);</para>
  <para>                                                      for(int i = index+1 ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                      break;</para>
  <para>                                              }</para>
  <para>                                              else {</para>
  <para>                                                      for(int i = index ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                      break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      else moves[index] = new Chess_Coord(origX+diag, origY-diag);</para>
  <para>                                      diag++; index++;</para>
  <para>                              }</para>
  <para>                              break;</para>
  <para>                case 3:  diag = 1; index = 0;</para>
  <para>                              while(origX+diag &lt; 9 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                      int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY+diag)); </para>
  <para>                                      if(n != 0) {</para>
  <para>                                              if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                      moves[index] = new Chess_Coord(origX+diag, origY+diag);</para>
  <para>                                                      for(int i = index+1 ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                      break;</para>
  <para>                                              }</para>
  <para>                                              else {</para>
  <para>                                                      for(int i = index ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                      break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      else moves[index] = new Chess_Coord(origX+diag, origY+diag);</para>
  <para>                                      diag++; index++;</para>
  <para>                              }</para>
  <para>                              break;</para>
  <para>                case 4:  diag = 1; index = 0;</para>
  <para>                                while(origX-diag &gt; 0 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                        int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY+diag)); </para>
  <para>                                        if(n != 0) {</para>
  <para>                                                if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                        moves[index] = new Chess_Coord(origX-diag, origY+diag);</para>
  <para>                                                        for(int i = index+1 ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                        break;</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        for(int i = index ; i &lt; 7 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                                                        break;</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                        else moves[index] = new Chess_Coord(origX-diag, origY+diag);</para>
  <para>                                        diag++; index++;</para>
  <para>                                }</para>
  <para>                                break;</para>
  <para>                default:    moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                break;</para>
  <para>                }</para>
  <para>                return moves;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] options = new Chess_Coord[7];</para>
  <para>                options = GetMoveOptions(coord, b, opponent);</para>
  <para>                for(int i = 0 ; i &lt; 7 ; i++) { </para>
  <para>                        if(options[i].equals(coord)) return true;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean Kill (Piece o, Chess_Board b) {</para>
  <para>                o.Die();</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public void Die () {this.GetPos().SetXY(-4, -4);}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“King.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para type="comment">// type 6</para>
  <para type="class">public class King extends Piece {</para>
  <para type="function">        public King (Chess_Coord pos, boolean white) {</para>
  <para>                super(6, pos, white);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p, Chess_Player opponent) {</para>
  <para type="comment">                // si le roi roque</para>
  <para type="comment">                // illégal si le roi a bougé</para>
  <para>                if(!this.GetHasMoved()) {</para>
  <para>                        if(this.GetColor())</para>
  <para>                                if((this.GetPos().GetX() + 2) == coord.GetX() || (this.GetPos().GetX() - 2) == coord.GetX() &amp;&amp;  coord.GetY() == 8)</para>
  <para>                                        return Move2(coord, p, b);</para>
  <para>                        else</para>
  <para>                                if((this.GetPos().GetX() + 2) == coord.GetX() || (this.GetPos().GetX() - 2) == coord.GetX() &amp;&amp;  coord.GetY() == 1)</para>
  <para>                                        return Move2(coord, p, b);</para>
  <para>                }</para>
  <para/>
  <para>                if(ValidateMove(coord, b, opponent)) {</para>
  <para>                        if(OpponentOnCoord(coord, b, opponent)) Kill(b.GetPieceByCoord(coord, opponent), b);</para>
  <para>                        Chess_Coord temp = new Chess_Coord();</para>
  <para>                        temp = this.GetPos();</para>
  <para>                        this.SetPos(coord);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        b.ZeroCoord(temp);</para>
  <para>                        if(!GetHasMoved()) SetHasMoved();</para>
  <para>                        return 1;</para>
  <para>                }</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int Move2 (Chess_Coord coord, Chess_Player p, Chess_Board b) {</para>
  <para>                if(p.r1.GetHasMoved() || p.r2.GetHasMoved()) return 0; // la tour a déjà bougé : illégal</para>
  <para>                else if(this.GetHasMoved()) return 0;// le roi a déjà bougé : illégal</para>
  <para>                else {</para>
  <para type="comment">                        // joueur blanc</para>
  <para>                        if(p.color == 1) {</para>
  <para>                                if(coord.equals(new Chess_Coord(3, 8))) { // tour 1</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(2, 8)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(3, 8)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(4, 8)) == 0) {</para>
  <para type="comment">                                                // roquer</para>
  <para>                                                Castling1(coord, p, b);</para>
  <para>                                                if(!GetHasMoved()) SetHasMoved();</para>
  <para>                                                return 2;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // tour 2</para>
  <para>                                else if(coord.equals(new Chess_Coord(7, 8))) {</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(6, 8)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(7, 8)) == 0) {</para>
  <para type="comment">                                                // roquer</para>
  <para>                                                Castling2(coord, p, b);</para>
  <para>                                                if(!GetHasMoved()) SetHasMoved();</para>
  <para>                                                return 2;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else if(p.color == 2) { //joueur noir</para>
  <para type="comment">                                // tour 1</para>
  <para>                                if(coord.equals(new Chess_Coord(3, 1))) {</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(2, 1)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(3, 1)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(4, 1)) == 0) {</para>
  <para>                                                // roquer</para>
  <para>                                                Castling1(coord, p, b);</para>
  <para>                                                if(!GetHasMoved()) SetHasMoved();</para>
  <para>                                                return 2;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // tour 2</para>
  <para>                                else if(coord.equals(new Chess_Coord(7, 1))) {</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(6, 1)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(7, 1)) == 0) {</para>
  <para type="comment">                                                // roquer</para>
  <para>                                                Castling2(coord, p, b);</para>
  <para>                                                if(!GetHasMoved()) SetHasMoved();</para>
  <para>                                                return 2;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Castling1 (Chess_Coord coord, Chess_Player p, Chess_Board b) {</para>
  <para>                if(p.color == 1) {</para>
  <para>                        this.GetPos().SetXY(3, 8);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        this.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 8));</para>
  <para>                        p.r1.GetPos().SetXY(4, 8);</para>
  <para>                        b.UpdateBoard(this.GetColor(), p.r1.GetType(), p.r1.GetPos());</para>
  <para>                        p.r1.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(1, 8));</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        this.GetPos().SetXY(3, 1);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        this.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 1));</para>
  <para>                        p.r1.GetPos().SetXY(4, 1);</para>
  <para>                        b.UpdateBoard(this.GetColor(), p.r1.GetType(), p.r1.GetPos());</para>
  <para>                        p.r1.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(1, 1));</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Castling2 (Chess_Coord coord, Chess_Player p, Chess_Board b) {</para>
  <para>                if(p.color == 1) {</para>
  <para>                        this.SetPos(new Chess_Coord(7, 8));</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        this.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 8));</para>
  <para>                        p.r2.SetPos(new Chess_Coord(6, 8));</para>
  <para>                        b.UpdateBoard(this.GetColor(), p.r2.GetType(), p.r2.GetPos());</para>
  <para>                        p.r2.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(8, 8));</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        this.SetPos(new Chess_Coord(7, 1));</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        this.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 1));</para>
  <para>                        p.r2.SetPos(new Chess_Coord(6, 1));</para>
  <para>                        b.UpdateBoard(this.GetColor(), p.r2.GetType(), p.r2.GetPos());</para>
  <para>                        p.r2.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(8, 1));</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean OpponentOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color == b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false; </para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean FriendlyOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color != b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private int GetDirection (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para>                int diag = 1;</para>
  <para>                if(origX-diag &gt; 0 &amp;&amp; origY-diag &gt; 0)</para>
  <para>                        if(new Chess_Coord(origX-diag, origY-diag).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 1;</para>
  <para>                if(origX+diag &lt; 9 &amp;&amp; origY-diag &gt; 0)</para>
  <para>                        if(new Chess_Coord(origX+diag, origY-diag).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 2;</para>
  <para>                if(origX+diag &lt; 9 &amp;&amp; origY+diag &lt; 9)</para>
  <para>                        if(new Chess_Coord(origX+diag, origY+diag).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 3;</para>
  <para>                if(origX-diag &gt; 0 &amp;&amp; origY+diag &lt; 9)</para>
  <para>                        if(new Chess_Coord(origX-diag, origY+diag).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 4;</para>
  <para>                if(origX == coord.GetX() &amp;&amp; origY-diag &gt; 0)</para>
  <para>                        if(new Chess_Coord(origX, origY-diag).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 5;</para>
  <para>                if(origX+diag &lt; 9 &amp;&amp; origY == coord.GetY())</para>
  <para>                        if(new Chess_Coord(origX+diag, origY).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 6;</para>
    <para>                if(origX == coord.GetX() &amp;&amp; origY+diag &lt; 9)</para>
  <para>                        if(new Chess_Coord(origX, origY+diag).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 7;</para>
  <para>                if(origX-diag &gt; -1 &amp;&amp; origY == coord.GetY())</para>
  <para>                        if(new Chess_Coord(origX-diag, origY).equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return 8;</para>
  <para>                return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Chess_Coord[] GetMoveOptions (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] moves = new Chess_Coord[1];</para>
  <para>                int direction = GetDirection(coord, b, opponent);</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para/>
  <para>                if(direction == 0) {</para>
  <para>                        moves[0] = new Chess_Coord(-10, -10); </para>
  <para>                        return moves; </para>
  <para>                }</para>
  <para/>
  <para>                int index = 0;</para>
  <para>                int diag = 1;</para>
  <para>                switch(direction) {</para>
  <para>                        case 1:   diag = 1; index = 0;</para>
  <para>                                      if(origX-diag &gt; 0 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX-diag, origY-diag);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX-diag, origY-diag);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   diag = 1; index = 0;</para>
  <para>                                      if(origX+diag &lt; 9 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY-diag);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY-diag);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   diag = 1; index = 0;</para>
  <para>                                      if(origX+diag &lt; 9 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY+diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY+diag);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY+diag);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:   diag = 1; index = 0;</para>
  <para>                                      if(origX-diag &gt; 0 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                                int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY+diag)); </para>
  <para>                                                if(n != 0) {</para>
  <para>                                                        if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                                moves[index] = new Chess_Coord(origX-diag, origY+diag);</para>
  <para>                                                        else break;</para>
  <para>                                                }</para>
  <para>                                                else moves[index] = new Chess_Coord(origX-diag, origY+diag);</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                        case 5:   diag = 1; index = 0;</para>
  <para>                                      if(origX == coord.GetX() &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX, origY-diag);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX, origY-diag);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 6:   diag = 1; index = 0;</para>
  <para>                                      if(origX+diag &lt; 9 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 7:   diag = 1; index = 0;</para>
  <para>                                      if(origX == coord.GetX() &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX, origY+diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX, origY+diag);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX, origY+diag);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 8:   diag = 1; index = 0;</para>
  <para>                                      if(origX-diag &gt; 0 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) </para>
  <para>                                                              moves[index] = new Chess_Coord(origX-diag, origY);</para>
  <para>                                                      else break;</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX-diag, origY);</para>
  <para>                                      }</para>
  <para>                                c    break;</para>
  <para>                        default:  moves[index] = new Chess_Coord(-6, -6);</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para>                return moves;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] options = new Chess_Coord[1];</para>
  <para>                options = GetMoveOptions(coord, b, opponent);</para>
  <para>                if(options[0].equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return true;</para>
  <para>                        return false;</para>
  <para type="function">                }</para>
  <para>        </para>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean Kill (Piece o, Chess_Board b) {</para>
  <para>                o.Die();</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public void Die () {</para>
  <para>                this.GetPos().SetXY(-6, -6);</para>
  <para>                if(this.GetColor()) System.out.println("\n\n\t\t\t\033[1;31mPartie terminée !\033[0m \033[5;47;30mBLACK LIVES MATTER !!!\033[0m");</para>
  <para>                else System.out.println("\033[1;31mPartie terminée !\033[0m \033[5;40;37mWHITE POWER !!!\033[0m");</para>
  <para>                System.exit(0);</para>
  <para type="function">        } </para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Knight.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para type="comment">// type 3</para>
  <para type="class">public class Knight extends Piece {</para>
  <para type="function">        public Knight (Chess_Coord coord, boolean white) {</para>
  <para>                super(3, coord, white);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p, Chess_Player opponent) {</para>
  <para>                if(ValidateMove(coord, b, opponent)) {</para>
  <para>                        if(OpponentOnCoord(coord, b, opponent)) Kill(b.GetPieceByCoord(coord, opponent), b);</para>
  <para>                                Chess_Coord temp = new Chess_Coord();</para>
  <para>                                temp = this.GetPos();</para>
  <para>                                this.SetPos(coord);</para>
  <para>                                b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                                b.ZeroCoord(temp);</para>
  <para>                                if(!GetHasMoved()) SetHasMoved();</para>
  <para>                                return 1;</para>
  <para>                }</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean OpponentOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) </para>
  <para>                if(opponent.color == b.ReadColorAsInt(n)) return true;</para>
  <para>                        return false; </para>
  <para type="function">                }</para>
  <para/>
  <para type="function">        private boolean FriendlyOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) </para>
  <para>                        if(opponent.color != b.ReadColorAsInt(n)) return true; </para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Chess_Coord[] GetMoveOptions () {</para>
  <para>                int coordX = this.GetPos().GetX();</para>
  <para>                int coordY = this.GetPos().GetY();</para>
  <para>                Chess_Coord[] options = new Chess_Coord[8];</para>
  <para>                Chess_Coord temp;</para>
  <para>                int tempX, tempY;</para>
  <para/>
  <para>                if((tempX = coordX - 2) &gt; 0 &amp;&amp; (tempY = coordY - 1) &gt; 0) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[0] = temp;</para>
  <para>                if((tempX = coordX - 1) &gt; 0 &amp;&amp; (tempY = coordY - 2) &gt; 0) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[1] = temp;</para>
  <para>                if((tempX = coordX + 1) &lt; 9 &amp;&amp; (tempY = coordY - 2) &gt; 0) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[2] = temp;</para>
  <para>                if((tempX = coordX + 2) &lt; 9 &amp;&amp; (tempY = coordY - 1) &gt; 0) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[3] = temp;</para>
  <para>                if((tempX = coordX + 2) &lt; 9 &amp;&amp; (tempY = coordY + 1) &lt; 9) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[4] = temp;</para>
  <para>                if((tempX = coordX + 1) &lt; 9 &amp;&amp; (tempY = coordY + 2) &lt; 9) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[5] = temp;</para>
  <para>                if((tempX = coordX - 1) &gt; 0 &amp;&amp; (tempY = coordY + 2) &lt; 9) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[6] = temp;</para>
  <para>                if((tempX = coordX - 2) &gt; 0 &amp;&amp; (tempY = coordY + 1) &lt; 9) temp = new Chess_Coord(tempX, tempY);</para>
  <para>                else temp = new Chess_Coord(-1, -1);</para>
  <para>                options[7] = temp;</para>
  <para/>
  <para>                return options;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] moves = new Chess_Coord[8];</para>
  <para>                moves = GetMoveOptions();</para>
  <para>                for(int i = 0 ; i &lt; 8 ; i++) </para>
  <para>                        if(moves[i].equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean Kill (Piece o, Chess_Board b) {</para>
  <para>                o.Die();</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public void Die () {this.GetPos().SetXY(-3, -3);}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Pawn.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para type="class">public class Pawn extends Piece {</para>
  <para type="function">        public Pawn (Chess_Coord coord, boolean white) {</para>
  <para>                super(1, coord, white);</para>
  <para type="function">        }</para>
  <para/>
  <para>        @Override</para>
  <para type="function">        public int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p, Chess_Player opponent) {</para>
  <para>                if(ValidateMove(coord, b, opponent)) {</para>
  <para type="comment">                        // cas de promotion</para>
  <para>                        if(this.GetColor()) {if(coord.GetY() == 1) return 3;}</para>
  <para>                        else {if(coord.GetY() == 8) return 3;}</para>
  <para/>
  <para>                        Chess_Coord temp = new Chess_Coord();</para>
  <para>                        temp = this.GetPos();</para>
  <para>                        this.SetPos(coord);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        b.ZeroCoord(temp);</para>
  <para>                        if(!GetHasMoved()) SetHasMoved();</para>
  <para>                        return 1;</para>
  <para>                }</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean OpponentOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) </para>
  <para>                if(opponent.color == b.ReadColorAsInt(n) &amp;&amp; b.ReadColorAsInt(n) != 0) return true;</para>
  <para>                return false; </para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean FriendlyOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) </para>
  <para>                if(opponent.color != b.ReadColorAsInt(n) &amp;&amp; b.ReadColorAsInt(n) != 0) return true; </para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Chess_Coord[] GetMoveOptions (Chess_Board b, Chess_Player opponent) {</para>
  <para>                int coordX = this.GetPos().GetX();</para>
  <para>                int coordY = this.GetPos().GetY();</para>
  <para>                Chess_Coord[] options = new Chess_Coord[4];</para>
  <para/>
  <para type="comment">                // joueur BLANC</para>
  <para>                if(this.GetColor()) {</para>
  <para>                        if((coordY - 1) &gt; 0) {</para>
  <para>                                if(b.GetPosParamsAsInt(new Chess_Coord(coordX, coordY-1)) == 0) {</para>
  <para>                                        options[0] = new Chess_Coord(coordX, coordY-1);</para>
  <para>                                        if((coordY - 2) &gt; 0) {</para>
  <para>                                                if(b.GetPosParamsAsInt(new Chess_Coord(coordX, coordY-2)) == 0 &amp;&amp;</para>
  <para>                                                !GetHasMoved()) {</para>
  <para>                                                        options[1] = new Chess_Coord(coordX, coordY-2);</para>
  <para>                                                }</para>
  <para>                                                else options[1] = new Chess_Coord(-10, -10);</para>
  <para>                                        }</para>
  <para>                                        else options[1] = new Chess_Coord(-10, -10);</para>
  <para>                                }</para>
  <para>                                else {</para>
  <para>                                        options[0] = new Chess_Coord(-10, -10);</para>
  <para>                                        options[1] = new Chess_Coord(-10, -10);</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                options[0] = new Chess_Coord(-10, -10);</para>
  <para>                                options[1] = new Chess_Coord(-10, -10);</para>
  <para>                        }</para>
  <para>                        if((coordX - 1) &gt; 0 &amp;&amp; (coordY - 1) &gt; 0) {</para>
  <para>                                if(OpponentOnCoord(new Chess_Coord(coordX-1, coordY-1), b, opponent) &amp;&amp;</para>
  <para>                                !FriendlyOnCoord(new Chess_Coord(coordX-1, coordY-1), b, opponent)) {</para>
  <para>                                        options[2] = new Chess_Coord(coordX-1, coordY-1);</para>
  <para>                                }</para>
  <para>                                else options[2] = new Chess_Coord(-10, -10); </para>
  <para>                        }</para>
  <para>                        else options[2] = new Chess_Coord(-10, -10);</para>
  <para>                        if((coordX + 1) &lt; 9 &amp;&amp; (coordY - 1) &gt; 0) {</para>
  <para>                                if(OpponentOnCoord(new Chess_Coord(coordX+1, coordY-1), b, opponent) &amp;&amp;</para>
  <para>                                !FriendlyOnCoord(new Chess_Coord(coordX+1, coordY-1), b, opponent)) {</para>
  <para>                                        options[3] = new Chess_Coord(coordX+1, coordY-1);</para>
  <para>                                }</para>
  <para>                                else options[3] = new Chess_Coord(-10, -10);</para>
  <para>                        }</para>
  <para>                        else options[3] = new Chess_Coord(-10, -10);</para>
  <para>                }</para>
  <para type="comment">                // joueur NOIR</para>
  <para>                else {</para>
  <para>                        if((coordY + 1) &gt; 0) {</para>
  <para>                                if(b.GetPosParamsAsInt(new Chess_Coord(coordX, coordY+1)) == 0) {</para>
  <para>                                        options[0] = new Chess_Coord(coordX, coordY+1);</para>
  <para>                                        if((coordY + 2) &lt; 9) {</para>
  <para>                                                if(b.GetPosParamsAsInt(new Chess_Coord(coordX, coordY+2)) == 0 &amp;&amp;</para>
  <para>                                                !GetHasMoved()) {</para>
  <para>                                                        options[1] = new Chess_Coord(coordX, coordY+2);</para>
  <para>                                                }</para>
  <para>                                                else options[1] = new Chess_Coord(-10, -10);</para>
  <para>                                        }</para>
  <para>                                        else options[1] = new Chess_Coord(-10, -10);</para>
  <para>                                }</para>
  <para>                                else {</para>
  <para>                                        options[0] = new Chess_Coord(-10, -10);</para>
  <para>                                        options[1] = new Chess_Coord(-10, -10);</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                options[0] = new Chess_Coord(-10, -10);</para>
  <para>                                options[1] = new Chess_Coord(-10, -10);</para>
  <para>                        }</para>
  <para>                        if((coordX - 1) &gt; 0 &amp;&amp; (coordY + 1) &lt; 9) {</para>
  <para>                                if(OpponentOnCoord(new Chess_Coord(coordX-1, coordY+1), b, opponent) &amp;&amp;</para>
  <para>                                !FriendlyOnCoord(new Chess_Coord(coordX-1, coordY+1), b, opponent)) {</para>
  <para>                                        options[2] = new Chess_Coord(coordX-1, coordY+1);</para>
  <para>                                }</para>
  <para>                                else options[2] = new Chess_Coord(-10, -10);</para>
  <para>                        }</para>
  <para>                        else options[2] = new Chess_Coord(-10, -10);</para>
  <para>                        if((coordX + 1) &lt; 9 &amp;&amp; (coordY + 1) &lt; 9) {</para>
  <para>                                if(OpponentOnCoord(new Chess_Coord(coordX+1, coordY+1), b, opponent) &amp;&amp;</para>
  <para>                                !FriendlyOnCoord(new Chess_Coord(coordX+1, coordY+1), b, opponent)) {</para>
  <para>                                        options[3] = new Chess_Coord(coordX+1, coordY+1);</para>
  <para>                                }</para>
  <para>                                else options[3] = new Chess_Coord(-10, -10);</para>
  <para>                        }</para>
  <para>                        else options[3] = new Chess_Coord(-10, -10);</para>
  <para>                }</para>
  <para>                return options;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] moves = new Chess_Coord[4];</para>
  <para>                moves = GetMoveOptions(b, opponent);</para>
  <para/>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) { </para>
  <para>                        if(i == 2) {</para>
  <para>                                if(!moves[i].equals(new Chess_Coord(-10, -10))) { </para>
  <para>                                        if(this.GetColor()) {</para>
  <para>                                                b.GetPieceByCoord(coord, opponent).Die();</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                b.GetPieceByCoord(coord, opponent).Die();</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        if(i == 3) {</para>
  <para>                                if(!moves[i].equals(new Chess_Coord(-10, -10))) { </para>
  <para>                                        if(this.GetColor()) {</para>
  <para>                                                b.GetPieceByCoord(coord, opponent).Die();</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                b.GetPieceByCoord(coord, opponent).Die();</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        if(moves[i].equals(coord)) return true;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean Kill (Piece o, Chess_Board b) {</para>
  <para>                o.Die();</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public void Die () {this.GetPos().SetXY(-1, -1);}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Queen.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para>// type 5</para>
  <para type="class">public class Queen extends Piece {</para>
  <para type="function">        public Queen (Chess_Coord pos, boolean white) {</para>
  <para>                super(5, pos, white);</para>
  <para type="function">        }</para>
  <para>        </para>
  <para type="comment">        @Override</para>
  <para type="function">        public int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p, Chess_Player opponent) {</para>
  <para>                if(ValidateMove(coord, b, opponent)) {</para>
  <para>                        if(OpponentOnCoord(coord, b, opponent)) Kill(b.GetPieceByCoord(coord, opponent), b);</para>
  <para>                        Chess_Coord temp = new Chess_Coord();</para>
  <para>                        temp = this.GetPos();</para>
  <para>                        this.SetPos(coord);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        b.ZeroCoord(temp);</para>
  <para>                        if(!GetHasMoved()) SetHasMoved();</para>
  <para>                        return 1;</para>
  <para>                }</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean OpponentOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color == b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false; </para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean FriendlyOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color != b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Chess_Coord[] GetMoveOptions (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] moves = new Chess_Coord[8];</para>
  <para>                int direction = GetDirection(coord, b, opponent);</para>
  <para>                System.out.println("direction queen : " + direction);</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para/>
  <para type="comment">                // si coordonnée erronée</para>
  <para>                if(direction == 0) {</para>
  <para>                        for(int i = 0 ; i &lt; 8 ; i++) moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                        return moves; </para>
  <para>                }</para>
  <para/>
  <para>                int index = 0;</para>
  <para>                int diag = 1;</para>
  <para>                switch(direction) {</para>
  <para>                        case 1:  diag = 1; index = 0;</para>
  <para>                                      while(origX-diag &gt; 0 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX-diag, origY-diag);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX-diag, origY-diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:  diag = 1; index = 0;</para>
  <para>                                      while(origX+diag &lt; 9 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY-diag);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY-diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:  diag = 1; index = 0;</para>
  <para>                                      while(origX+diag &lt; 9 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY+diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY+diag);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY+diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:  diag = 1; index = 0;</para>
  <para>                                      while(origX-diag &gt; 0 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY+diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX-diag, origY+diag);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX-diag, origY+diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 5:  diag = 1; index = 0;</para>
  <para>                                      while(origX == coord.GetX() &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX, origY-diag);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX, origY-diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 6:  diag = 1; index = 0;</para>
  <para>                                              while(origX+diag &lt; 9 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY);</para>
  <para>                                              diag++;         index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 7:  diag = 1; index = 0;</para>
  <para>                                      while(origX == coord.GetX() &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX, origY+diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                      moves[index] = new Chess_Coord(origX, origY+diag);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                               }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX, origY+diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 8:  diag = 1; index = 0;</para>
  <para>                                      while(origX-diag &gt; 0 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX-diag, origY);</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 8) {</para>
  <para>                                                                      while(index &lt; 8) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX-diag, origY);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para>                return moves;</para>
  <para type="function">        }        </para>
  <para/>
  <para type="function">        private int GetDirection (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para>                int res = 0;</para>
  <para>                int diag = 1;</para>
  <para>                while(origX-diag &gt; 0 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX-diag, origY-diag), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX-diag, origY-diag).equals(coord)) return 1;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX+diag &lt; 9 &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX+diag, origY-diag), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX+diag, origY-diag).equals(coord)) return 2;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX+diag &lt; 9 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX+diag, origY+diag), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX+diag, origY+diag).equals(coord)) return 3;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX-diag &gt; 0 &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX-diag, origY+diag), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX-diag, origY+diag).equals(coord)) return 4;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX == coord.GetX() &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX, origY-diag), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX, origY-diag).equals(coord)) return 5;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX+diag &lt; 9 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX+diag, origY), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX+diag, origY).equals(coord)) return 6;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX == coord.GetX() &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX, origY+diag), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX, origY+diag).equals(coord)) return 7;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX-diag &gt; 0 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX-diag, origY), b, opponent)) res = 0;</para>
  <para>                        if(new Chess_Coord(origX-diag, origY).equals(coord)) return 8;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                return res;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] options = new Chess_Coord[8];</para>
  <para>                options = GetMoveOptions(coord, b, opponent);</para>
  <para>                for(int i = 0 ; i &lt; 8 ; i++) {</para>
  <para>                        if(options[i].equals(new Chess_Coord(-10, -10))) return false;</para>
  <para>                        if(options[i].equals(coord)) return true;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean Kill (Piece o, Chess_Board b) {</para>
  <para>                o.Die();</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para>        public void Die () {this.GetPos().SetXY(-5, -5);}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Rook.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import game.Chess_Player;</para>
  <para/>
  <para>// type 2</para>
  <para type="class">public class Rook extends Piece {</para>
  <para type="function">        public Rook (Chess_Coord pos, boolean white) {</para>
  <para>                super(2, pos, white);</para>
  <para type="function">        }</para>
  <para>        </para>
  <para type="comment">        @Override</para>
  <para type="function">        public int Move1 (Chess_Coord coord, Chess_Board b, Chess_Player p, Chess_Player opponent) {</para>
  <para>                boolean direction = GoingVertical(coord);</para>
  <para>                if(direction == GoingHorizontal(coord)) return 0;</para>
  <para/>
  <para>                if(ValidateMove(coord, b, opponent)) {</para>
  <para>                        if(OpponentOnCoord(coord, b, opponent)) Kill(b.GetPieceByCoord(coord, opponent), b);</para>
  <para>                        Chess_Coord temp = new Chess_Coord();</para>
  <para>                        temp = this.GetPos();</para>
  <para>                        this.SetPos(coord);</para>
  <para>                        b.UpdateBoard(this.GetColor(), this.GetType(), coord);</para>
  <para>                        b.ZeroCoord(temp);</para>
  <para>                        if(!GetHasMoved()) SetHasMoved();</para>
  <para>                        return 1;</para>
  <para>                }</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para>        @Deprecated</para>
  <para type="function">        public boolean Move2 (Chess_Coord coord, Chess_Player p, Chess_Board b) {</para>
  <para type="comment">                // le roi a déjà bougé : illégal</para>
  <para>                if(p.k.GetHasMoved()) return false;</para>
  <para>                else if(this.GetHasMoved()) return false;// la tour a déjà bougé : illégal</para>
  <para>                else {</para>
  <para type="comment">                        // joueur blanc</para>
  <para>                        if(p.color == 1) {</para>
  <para>                                if(this.equals(p.r1)) { // tour 1</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(2, 8)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(3, 8)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(4, 8)) == 0) {</para>
  <para>                                                // roquer</para>
  <para>                                                Castling1(coord, p, b);</para>
  <para>                                                return true;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // tour 2</para>
  <para>                                else if(this.equals(p.r2)) {</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(6, 8)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(7, 8)) == 0) {</para>
  <para type="comment">                                                // roquer</para>
  <para>                                                Castling2(coord, p, b);</para>
  <para>                                                return true;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para type="comment">                        //joueur noir</para>
  <para>                        else if(p.color == 2) {</para>
  <para>                                if(this.equals(p.r1)) { // tour 1</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(2, 1)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(3, 1)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(4, 1)) == 0) {</para>
  <para type="comment">                                                // roquer</para>
  <para>                                                Castling1(coord, p, b);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // tour 2</para>
  <para>                                else if(this.equals(p.r2)) {</para>
  <para>                                        if(b.GetPosParamsAsInt(new Chess_Coord(6, 1)) == 0 &amp;&amp;</para>
  <para>                                        b.GetPosParamsAsInt(new Chess_Coord(7, 1)) == 0) {</para>
  <para type="comment">                                                // roquer</para>
  <para>                                                Castling2(coord, p, b);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Deprecated</para>
  <para type="function">        private void Castling1 (Chess_Coord coord, Chess_Player p, Chess_Board b) {</para>
  <para>                if(p.color == 1) {</para>
  <para>                        p.k.SetPos(new Chess_Coord(3, 8));</para>
  <para>                        p.k.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 8));</para>
  <para>                        p.r1.SetPos(new Chess_Coord(4, 8));</para>
  <para>                        p.r1.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(1, 8));</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        p.k.SetPos(new Chess_Coord(3, 1));</para>
  <para>                        p.k.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 1));</para>
  <para>                        p.r1.SetPos(new Chess_Coord(4, 1));</para>
  <para>                        p.r1.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(1, 1));</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Deprecated</para>
  <para type="function">        private void Castling2 (Chess_Coord coord, Chess_Player p, Chess_Board b) {</para>
  <para>                if(p.color == 1) {</para>
  <para>                        p.k.SetPos(new Chess_Coord(7, 8));</para>
  <para>                        p.k.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 8));</para>
  <para>                        p.r2.SetPos(new Chess_Coord(6, 8));</para>
  <para>                        p.r2.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(8, 8));</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        p.k.SetPos(new Chess_Coord(7, 1));</para>
  <para>                        p.k.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(5, 1));</para>
  <para>                        p.r2.SetPos(new Chess_Coord(6, 1));</para>
  <para>                        p.r2.SetHasMoved();</para>
  <para>                        b.ZeroCoord(new Chess_Coord(8, 1));</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean OpponentOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color == b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false; </para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean FriendlyOnCoord (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int n = b.GetPosParamsAsInt(coord);</para>
  <para>                if(n != 0) {</para>
  <para>                        if(opponent.color != b.ReadColorAsInt(n)) return true;</para>
  <para>                } </para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Deprecated</para>
  <para type="function">        private boolean GoingVertical (Chess_Coord coord) {</para>
  <para>                if(this.GetPos().GetX() == coord.GetX() &amp;&amp; this.GetPos().GetY() != coord.GetY()) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Deprecated</para>
  <para type="function">        private boolean GoingHorizontal (Chess_Coord coord) {</para>
  <para>                if(this.GetPos().GetY() == coord.GetY() &amp;&amp;</para>
  <para>                this.GetPos().GetX() != coord.GetX()) return true;</para>
  <para>                else return false;</para>
  <para>        }</para>
  <para/>
  <para>        private int GetDirection (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para>                int diag = 1;</para>
  <para>                while(origX == coord.GetX() &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX, origY-diag), b, opponent)) return 0;</para>
  <para>                        if(new Chess_Coord(origX, origY-diag).equals(coord)) return 1;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX+diag &lt; 9 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX+diag, origY), b, opponent)) return 0;</para>
  <para>                        if(new Chess_Coord(origX+diag, origY).equals(coord)) return 2;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX == coord.GetX() &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX, origY+diag), b, opponent)) return 0;</para>
  <para>                        if(new Chess_Coord(origX, origY+diag).equals(coord)) return 3;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                diag = 1;</para>
  <para>                while(origX-diag &gt; 0 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                        if(FriendlyOnCoord(new Chess_Coord(origX-diag, origY), b, opponent)) return 0;</para>
  <para>                        if(new Chess_Coord(origX-diag, origY).equals(coord)) return 4;</para>
  <para>                        diag++;</para>
  <para>                }</para>
  <para>                return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Chess_Coord[] GetMoveOptions (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                int direction = GetDirection(coord, b, opponent);</para>
  <para>                int origX = this.GetPos().GetX();</para>
  <para>                int origY = this.GetPos().GetY();</para>
  <para>                Chess_Coord[] moves = new Chess_Coord[7];</para>
  <para/>
  <para>                if(direction == 0) {</para>
  <para>                        for(int i = 0 ; i &lt; 7 ; i++) {</para>
  <para>                                moves[i] = new Chess_Coord(-10, -10);</para>
  <para>                        }</para>
  <para>                        return moves;</para>
  <para>                }</para>
  <para/>
  <para>                int index = 0;</para>
  <para>                int diag = 1; </para>
  <para>                switch(direction) {</para>
  <para>                        case 1:  diag = 1; index = 0;</para>
  <para>                                      while(origX == coord.GetX() &amp;&amp; origY-diag &gt; 0) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX, origY-diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) { </para>
  <para>                                                              moves[index] = new Chess_Coord(origX, origY-diag);</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {                                                                        </para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX, origY-diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:  diag = 1; index = 0;</para>
  <para>                                      while(origX+diag &lt; 9 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX+diag, origY)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX+diag, origY);</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX+diag, origY);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:  diag = 1; index = 0;</para>
  <para>                                      while(origX == coord.GetX() &amp;&amp; origY+diag &lt; 9) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX, origY+diag)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX, origY+diag);</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX, origY+diag);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:  diag = 1; index = 0;</para>
  <para>                                      while(origX-diag &gt; 0 &amp;&amp; origY == coord.GetY()) {</para>
  <para>                                              int n = b.GetPosParamsAsInt(new Chess_Coord(origX-diag, origY)); </para>
  <para>                                              if(n != 0) {</para>
  <para>                                                      if(b.ReadColorAsInt(n) == opponent.color) {</para>
  <para>                                                              moves[index] = new Chess_Coord(origX-diag, origY);</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      index++;</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                                      else {</para>
  <para>                                                              if(index &lt; 7) {</para>
  <para>                                                                      while(index &lt; 7) {</para>
  <para>                                                                              moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                                                              index++;</para>
  <para>                                                                      }</para>
  <para>                                                                      break;</para>
  <para>                                                              }</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else moves[index] = new Chess_Coord(origX-diag, origY);</para>
  <para>                                              diag++; index++;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  moves[index] = new Chess_Coord(-10, -10);</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para>                return moves;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean ValidateMove (Chess_Coord coord, Chess_Board b, Chess_Player opponent) {</para>
  <para>                Chess_Coord[] options = new Chess_Coord[7];</para>
  <para>                options = GetMoveOptions(coord, b, opponent);</para>
  <para>                for(int i = 0 ; i &lt; 7 ; i++) {</para>
  <para>                        if(options[i].equals(new Chess_Coord(-10, -10))) return false;</para>
  <para>                        if(options[i].equals(coord) &amp;&amp; !FriendlyOnCoord(coord, b, opponent)) return true;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public boolean Kill (Piece o, Chess_Board b) {</para>
  <para>                o.Die();</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Override</para>
  <para type="function">        public void Die () {this.GetPos().SetXY(-2, -2);}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Chess_Coord.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="class">public class Chess_Coord {</para>
  <para>        private int x, y;</para>
  <para/>
  <para type="function">        public Chess_Coord () {</para>
  <para>                x = 0;</para>
  <para>                y = 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Chess_Coord (int a, int b) {</para>
  <para>                x = a;</para>
  <para>                y = b;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int GetX () {return x;}</para>
  <para type="function">        public int GetY () {return y;}</para>
  <para type="function">        public void SetX (int n) {x = n;}</para>
  <para type="function">        public void SetY (int n) {y = n;}</para>
  <para type="function">        public void SetXY (int a, int b) {x = a; y = b;}</para>
  <para/>
  <para type="function">        public boolean equals (Chess_Coord o) {</para>
  <para>                if(this.x == o.x &amp;&amp; this.y == o.y) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Chess_Board.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="import">import game.Chess_Player;</para>
  <para type="import">import pieces.Pawn;</para>
  <para type="import">import pieces.Piece;</para>
  <para/>
  <para type="comment">/**</para>
  <para type="comment">* couleur :</para>
  <para type="comment">*         1 - white (true)</para>
  <para type="comment">*         2 - black (false)</para>
  <para type="comment">* type :</para>
  <para type="comment">*         1 - pawn</para>
  <para type="comment">*         2 - rook</para>
  <para type="comment">*         3 - knight</para>
  <para type="comment">*         4 - bishop</para>
  <para type="comment">*         5 - queen</para>
  <para type="comment">*         6 - king</para>
  <para type="comment">* x et y : entre 1 et 8 inclusivement</para>
  <para type="comment">*/</para>
  <para/>
  <para type="class">public class Chess_Board {</para>
  <para type="comment">        // 4 chiffres : couleur.type.x.y</para>
  <para>        private int[][] situation; </para>
  <para/>
  <para type="function">        public Chess_Board () {</para>
  <para>                Init();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                situation = new int[8][8];</para>
  <para type="comment">                // origine coin supérieur gauche (0, 0)</para>
  <para>                for(int i = 0 ; i &lt; 8 ; i++) { </para>
  <para>                        for(int j = 0 ; j &lt; 8 ; j++) { </para>
  <para>                                situation[i][j] = 0; // 0 = vide</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        @Deprecated</para>
  <para type="function">        public void DisplaySituation () {</para>
  <para>                System.out.println("\n\t\t\033[5;1;37;101mSituation :\033[25;0m\n");</para>
  <para>                for(int i = 0 ; i &lt; 8 ; i++) {</para>
  <para>                        for(int j = 0 ; j &lt; 8 ; j++) {</para>
  <para>                                if(situation[i][j] == 0) System.out.print("\033[31m" + situation[i][j] + "\033[0m ");</para>
  <para>                                else System.out.print("\033[5;1;33m" + situation[i][j] + "\033[0m ");</para>
  <para>                        }</para>
  <para>                        System.out.println("\n");</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void DisplayBoard () {</para>
  <para>                boolean tile = true;</para>
  <para/>
  <para>                System.out.print(" ");</para>
  <para>                for(int i = 0 ; i &lt; 8 ; i++) System.out.print("\033[1;31m " + (i+1) + "\033[0m ");</para>
  <para>                System.out.println();</para>
  <para>                for(int i = 0 ; i &lt; 8 ; i++) {</para>
  <para>                        if(tile) System.out.print("\n \033[1;31m" + (i+1) + " \033[46;0m "); </para>
  <para>                        else System.out.print("\n \033[1;31m" + (i+1) + " \033[42;0m "); </para>
  <para>                        for(int j = 0 ; j &lt; 8 ; j++) {</para>
  <para>                                if(GetTypeAsChar(situation[i][j]) != 0) {</para>
  <para>                                        if(ReadColorAsInt(situation[i][j]) == 1) {</para>
  <para>                                                if(tile) System.out.print("\033[46;1;97m" + GetTypeAsChar(situation[i][j]) + "\033[0m");</para>
  <para>                                                else System.out.print("\033[42;1;97m" + GetTypeAsChar(situation[i][j]) + "\033[0m");</para>
  <para>                                        }</para>
  <para>                                        else { </para>
  <para>                                                if(tile) System.out.print("\033[46;1;90m" + GetTypeAsChar(situation[i][j]) + "\033[0m");</para>
  <para>                                                else System.out.print("\033[42;1;90m" + GetTypeAsChar(situation[i][j]) + "\033[0m");</para>
  <para>                                        }</para>
  <para>                                } </para>
  <para>                                else {</para>
  <para>                                        if(tile) System.out.print("\033[46;1;34m" + GetTypeAsChar(situation[i][j]) + " \033[0m");</para>
  <para>                                        else System.out.print("\033[42;1;34m" + GetTypeAsChar(situation[i][j]) + " \033[0m");</para>
  <para>                                } </para>
  <para>                                tile = ToggleTile(tile);</para>
  <para>                        }</para>
  <para>                        if(tile) System.out.print("\n \033[46m \033[42m \033[46m \033[42m \033[46m \033[42m \033[46m \033[42m \033[0m");</para>
  <para>                        else System.out.print("\n \033[42m \033[46m \033[42m \033[46m \033[42m \033[46m \033[42m \033[46m \033[0m");</para>
  <para>                        tile = ToggleTile(tile);</para>
  <para>                }</para>
  <para>                System.out.println("\n\033[0m");</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean ToggleTile(boolean b) {</para>
  <para>                if(b) return false;</para>
  <para>                else return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void UpdateBoard (boolean color, int type, Chess_Coord pos) {</para>
  <para type="comment">                // ici color devient un int</para>
  <para>                int col;</para>
  <para>                if(color) col = 1;</para>
  <para>                else col = 2;</para>
  <para>                situation[pos.GetY()-1][pos.GetX()-1] = ConvertParamsAsInt(col, type, pos);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void ZeroCoord (Chess_Coord pos) {</para>
  <para>                situation[pos.GetY()-1][pos.GetX()-1] = 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int GetPosParamsAsInt (Chess_Coord pos) {</para>
  <para>                return situation[pos.GetY()-1][pos.GetX()-1];</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private int ConvertParamsAsInt (int color, int type, Chess_Coord pos) {</para>
  <para>                int x_ = (pos.GetX()) * 10;</para>
  <para>                int y_ = pos.GetY();</para>
  <para>                int type_, color_;</para>
  <para>                type_ = type * 100;</para>
  <para>                color_ = color * 1000;</para>
  <para>                return (color_ + type_ + x_ + y_);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Piece GetPieceByCoord (Chess_Coord coord, Chess_Player p) {</para>
  <para>                Pawn temp = new Pawn(new Chess_Coord(-10, -10), true); </para>
  <para>                int n = GetPosParamsAsInt(coord);</para>
  <para/>
  <para>                if(n != 0) {</para>
  <para>                        int typ = ReadTypeAsInt(n);</para>
  <para>                        switch(typ) {</para>
  <para>                                case 1:   if(coord.equals(p.p1.GetPos())) return p.p1;</para>
  <para>                                              else if(coord.equals(p.p2.GetPos())) return p.p2;</para>
  <para>                                              else if(coord.equals(p.p3.GetPos())) return p.p3;</para>
  <para>                                              else if(coord.equals(p.p4.GetPos())) return p.p4;</para>
  <para>                                              else if(coord.equals(p.p5.GetPos())) return p.p5;</para>
  <para>                                              else if(coord.equals(p.p6.GetPos())) return p.p6;</para>
  <para>                                              else if(coord.equals(p.p7.GetPos())) return p.p7;</para>
  <para>                                              else if(coord.equals(p.p8.GetPos())) return p.p8;</para>
  <para>                                              break;</para>
  <para/>
  <para/>
  <para>                                case 2:   if(coord.equals(p.r1.GetPos())) return p.r1;</para>
  <para>                                              else if(coord.equals(p.r2.GetPos())) return p.r2;</para>
  <para type="comment">                                              // recherche parmis les extras</para>
  <para>                                              else {</para>
  <para>                                              return SearchExtras(coord, p);</para>
  <para>                                              }</para>
  <para>                                case 3:   if(coord.equals(p.n1.GetPos())) return p.n1;</para>
  <para>                                              else if(coord.equals(p.n2.GetPos())) return p.n2;</para>
  <para type="comment">                                              // recherche parmis les extras</para>
  <para>                                              else {</para>
  <para>                                              return SearchExtras(coord, p);</para>
  <para>                                              }</para>
  <para>                                case 4:   if(coord.equals(p.b1.GetPos())) return p.b1;</para>
  <para>                                              else if(coord.equals(p.b2.GetPos())) return p.b2;</para>
  <para type="comment">                                              // recherche parmis les extras</para>
  <para>                                              else {</para>
  <para>                                              return SearchExtras(coord, p);</para>
  <para>                                              }</para>
  <para>                                case 5:   if(coord.equals(p.q.GetPos())) return p.q;</para>
  <para type="comment">                                              // recherche parmis les extras</para>
  <para>                                              else {</para>
  <para>                                              return SearchExtras(coord, p);</para>
  <para>                                              }</para>
  <para>                                case 6:   if(coord.equals(p.k.GetPos())) return p.k;</para>
  <para>                                              break;</para>
  <para>                                default:  return temp;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return temp;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Piece SearchExtras (Chess_Coord coord, Chess_Player p) {</para>
  <para>                int prom = p.GetPromCount();</para>
  <para>                Piece temp = new Pawn(new Chess_Coord(-1, -1), true);</para>
  <para/>
  <para>                if(prom &gt; 0) {</para>
  <para>                        for(int i = 1 ; i &lt;= prom ; i++) {</para>
  <para>                                switch(i) {</para>
  <para>                                        case 1:   if(p.e1.GetPos().equals(coord)) return p.e1;</para>
  <para>                                        case 2:   if(p.e2.GetPos().equals(coord)) return p.e2;</para>
  <para>                                        case 3:   if(p.e3.GetPos().equals(coord)) return p.e3;</para>
  <para>                                        case 4:   if(p.e4.GetPos().equals(coord)) return p.e4;</para>
  <para>                                        case 5:   if(p.e5.GetPos().equals(coord)) return p.e5;</para>
  <para>                                        case 6:   if(p.e6.GetPos().equals(coord)) return p.e6;</para>
  <para>                                        case 7:   if(p.e7.GetPos().equals(coord)) return p.e7;</para>
  <para>                                        case 8:   if(p.e8.GetPos().equals(coord)) return p.e8;</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return temp;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        /**</para>
  <para type="comment">        * Fonctions de lecture de position XXXX</para>
  <para type="comment">        * @param n</para>
  <para type="comment">        * @return</para>
  <para type="comment">        */</para>
  <para type="function">        public int ReadColorAsInt (int n) {return n / 1000;}</para>
  <para/>
  <para type="function">        public int ReadTypeAsInt (int n) {</para>
  <para>                int i = ReadColorAsInt(n) * 1000;</para>
  <para>                i = n - i;</para>
  <para>                return i / 100;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int ReadXAsInt (int n) {</para>
  <para>                int i = ReadColorAsInt(n) * 1000;</para>
  <para>                i = n - i;</para>
  <para>                int j = ReadTypeAsInt(n) * 100;</para>
  <para>                j = i - j;</para>
  <para>                return j / 10;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int ReadYAsInt (int n) {</para>
  <para>                int i = ReadColorAsInt(n) * 1000;</para>
  <para>                i = n - i;</para>
  <para>                int j = ReadTypeAsInt(n) * 100;</para>
  <para>                j = i - j;</para>
  <para>                int k = ReadXAsInt(n);</para>
  <para>                k = j - k * 10;</para>
  <para>                return k;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public char GetTypeAsChar (int n) {</para>
  <para>                int type = ReadTypeAsInt(n);</para>
  <para>                char c;</para>
  <para>                switch(type) {</para>
  <para>                        case 1:   c = 'P';</para>
  <para>                                      break;</para>
  <para>                        case 2:   c = 'R';</para>
  <para>                                      break;</para>
  <para>                        case 3:   c = 'N';</para>
  <para>                                      break;</para>
  <para>                        case 4:   c = 'B';</para>
  <para>                                      break;</para>
  <para>                        case 5:   c = 'Q';</para>
  <para>                                      break;</para>
  <para>                        case 6:   c = 'K';</para>
  <para>                                      break;</para>
  <para>                        default:  c = '*';</para>
  <para>                }</para>
  <para>                return c;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Chess_Game.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import java.util.Scanner;</para>
  <para type="import">import java.io.IOException;</para>
  <para type="import">import board.*;</para>
  <para type="import">import pieces.*;</para>
  <para/>
  <para type="class">public class Chess_Game {</para>
  <para>        private Chess_Player p1, p2;</para>
  <para>        private Chess_Board b;</para>
  <para>        private Chess_Coord startCoord, endCoord;</para>
  <para>        private boolean turn; // p1 = true, p2 = false</para>
  <para>        private Chess_Setup setup;</para>
  <para>        private Scanner scan;</para>
  <para/>
  <para type="function">        public Chess_Game () {</para>
  <para>                turn = true;</para>
  <para>                b = new Chess_Board();</para>
  <para>                p1 = new Chess_Player(1);</para>
  <para>                p2 = new Chess_Player(2);</para>
  <para type="comment">                // setup initialise le board</para>
  <para>                setup = new Chess_Setup();</para>
  <para>                p1 = setup.GetPlayer(1);</para>
  <para>                p2 = setup.GetPlayer(2);</para>
  <para>                b = setup.GetBoard();</para>
  <para>                scan = new Scanner(System.in);</para>
  <para>                Splash();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void PlayTurn () {</para>
  <para type="comment">                /**</para>
  <para type="comment">                * Si joueur 1 : Si joueur 2 :</para>
  <para type="comment">                * p1 = joueur courant p2 = joueur courant</para>
  <para type="comment">                * p2 = joueur 'opponent' p1 = joueur 'opponent'</para>
  <para type="comment">                */</para>
  <para>                Chess_Coord[] coords = new Chess_Coord[2];</para>
  <para>                boolean ok = false;</para>
  <para>                int moveResult;</para>
  <para>                do {</para>
  <para>                        DisplayBoard();</para>
  <para>                        coords = InputCoord(turn);</para>
  <para>                        int newType;</para>
  <para>                        if(turn) {</para>
  <para>                                moveResult = b.GetPieceByCoord(coords[0], p1).Move1(coords[1], b, p1, p2);</para>
  <para>                                if(moveResult == 3) {</para>
  <para type="comment">                                        // retourne le nouveau type (int)</para>
  <para>                                        newType = Promote(p1);</para>
  <para type="comment">                                        // détruire pawn + créer pièce de nouveau type + updater le board</para>
  <para type="comment">                                        // pièce qui "disparaît"</para>
  <para>                                        Piece oldPiece = b.GetPieceByCoord(coords[1], p1);</para>
  <para>                                        Piece newPiece;</para>
  <para>                                        newPiece = ExtraFactory(p1, newType, coords[1]);</para>
  <para>                                        oldPiece.Die();</para>
  <para>                                        b.ZeroCoord(coords[0]);</para>
  <para>                                        b.UpdateBoard(newPiece.GetColor(), newPiece.GetType(), newPiece.GetPos());</para>
  <para>                                }</para>
  <para>                                if(moveResult &gt; 0 &amp;&amp; moveResult &lt; 4) ok = true;</para>
  <para type="comment">                                // (pour les tests)</para>
  <para type="comment">                                //b.DisplaySituation();</para>
  <para type="comment">                                //scan.nextLine();</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                moveResult = b.GetPieceByCoord(coords[0], p2).Move1(coords[1], b, p2, p1);</para>
  <para>                                if(moveResult == 3) {</para>
  <para type="comment">                                        // retourne le nouveau type (int)</para>
  <para>                                        newType = Promote(p2);</para>
  <para type="comment">                                        // détruire pawn + créer pièce de nouveau type + updater le board</para>
  <para type="comment">                                        // pièce qui "disparaît"</para>
  <para>                                        Piece oldPiece = b.GetPieceByCoord(coords[1], p2);</para>
  <para>                                        Piece newPiece;</para>
  <para>                                        newPiece = ExtraFactory(p2, newType, coords[1]);</para>
  <para>                                        oldPiece.Die();</para>
  <para>                                        b.ZeroCoord(coords[0]);</para>
  <para>                                        b.UpdateBoard(newPiece.GetColor(), newPiece.GetType(), newPiece.GetPos());</para>
  <para>                                }</para>
  <para>                                if(moveResult &gt; 0 &amp;&amp; moveResult &lt; 4) ok = true;</para>
  <para type="comment">                                // (pour les tests)</para>
  <para type="comment">                                //b.DisplaySituation();</para>
  <para type="comment">                                //scan.nextLine();</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                while(!ok);</para>
  <para>                EndTurn();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // attention, l'erreur de type n'est pas définie</para>
  <para type="function">        private Piece ExtraFactory(Chess_Player p, int type_, Chess_Coord coord) {</para>
  <para>                int prom = p.GetPromCount();</para>
  <para type="comment">                // promCount a déjà été incrémenté à ce point</para>
  <para>                switch(prom) {</para>
  <para>                        case 1:   switch(type_) {</para>
  <para>                                              case 2:   p.e1 = new Rook(coord, turn);</para>
  <para>                                                            return p.e1;</para>
  <para>                                              case 3:   p.e1 = new Knight(coord, turn);</para>
  <para>                                                            return p.e1;</para>
  <para>                                              case 4:   p.e1 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e1;</para>
  <para>                                              case 5:   p.e1 = new Queen(coord, turn);</para>
  <para>                                                            return p.e1        ;</para>
  <para>                                      } </para>
  <para>                        case 2:   switch(type_) {</para>
  <para>                                              case 2:   p.e2 = new Rook(coord, turn);</para>
  <para>                                                            return p.e2;</para>
  <para>                                              case 3:   p.e2 = new Knight(coord, turn);</para>
  <para>                                                            return p.e2;</para>
  <para>                                              case 4:   p.e2 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e2;</para>
  <para>                                              case 5:   p.e2 = new Queen(coord, turn);</para>
  <para>                                                            return p.e2;</para>
  <para>                                      } </para>
  <para>                        case 3:   switch(type_) {</para>
  <para>                                              case 2:   p.e3 = new Rook(coord, turn);</para>
  <para>                                                            return p.e3;</para>
  <para>                                              case 3:   p.e3 = new Knight(coord, turn);</para>
  <para>                                                            return p.e3;</para>
  <para>                                              case 4:   p.e3 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e3;</para>
  <para>                                              case 5:   p.e3 = new Queen(coord, turn);</para>
  <para>                                                            return p.e3;</para>
  <para>                                      } </para>
  <para>                        case 4:   switch(type_) {</para>
  <para>                                              case 2:   p.e4 = new Rook(coord, turn);</para>
  <para>                                                            return p.e4;</para>
  <para>                                              case 3:   p.e4 = new Knight(coord, turn);</para>
  <para>                                                            return p.e4;</para>
  <para>                                              case 4:   p.e4 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e4;</para>
  <para>                                              case 5:   p.e4 = new Queen(coord, turn);</para>
  <para>                                                            return p.e4;</para>
  <para>                                              } </para>
  <para>                        case 5:   switch(type_) {</para>
  <para>                                              case 2:   p.e5 = new Rook(coord, turn);</para>
  <para>                                                            return p.e5;</para>
  <para>                                              case 3:   p.e5 = new Knight(coord, turn);</para>
  <para>                                                            return p.e5;</para>
  <para>                                              case 4:   p.e5 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e5;</para>
  <para>                                              case 5:   p.e5 = new Queen(coord, turn);</para>
  <para>                                                            return p.e5;</para>
  <para>                                      } </para>
  <para>                        case 6:   switch(type_) {</para>
  <para>                                              case 2:   p.e6 = new Rook(coord, turn);</para>
  <para>                                                            return p.e6;</para>
  <para>                                              case 3:   p.e6 = new Knight(coord, turn);</para>
  <para>                                                            return p.e6;</para>
  <para>                                              case 4:   p.e6 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e6;</para>
  <para>                                              case 5:   p.e6 = new Queen(coord, turn);</para>
  <para>                                                            return p.e6;</para>
  <para>                                      } </para>
  <para>                        case 7:   switch(type_) {</para>
  <para>                                              case 2:   p.e7 = new Rook(coord, turn);</para>
  <para>                                                            return p.e7;</para>
  <para>                                              case 3:   p.e7 = new Knight(coord, turn);</para>
  <para>                                                            return p.e7;</para>
  <para>                                              case 4:   p.e7 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e7;</para>
  <para>                                              case 5:   p.e7 = new Queen(coord, turn);</para>
  <para>                                                            return p.e7;</para>
  <para>                                      } </para>
  <para>                        case 8:   switch(type_) {</para>
  <para>                                              case 2:   p.e8 = new Rook(coord, turn);</para>
  <para>                                                            return p.e8;</para>
  <para>                                              case 3:   p.e8 = new Knight(coord, turn);</para>
  <para>                                                            return p.e8;</para>
  <para>                                              case 4:   p.e8 = new Bishop(coord, turn);</para>
  <para>                                                            return p.e8;</para>
  <para>                                              case 5:   p.e8 = new Queen(coord, turn);</para>
  <para>                                                            return p.e8;</para>
  <para>                                      } </para>
  <para>                        default:  Pawn temp = new Pawn(new Chess_Coord(-1, -1), true);</para>
  <para>                                      return temp;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void DisplayBoard () {</para>
  <para>                Clear();</para>
  <para>                b.DisplayBoard();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Chess_Coord[] InputCoord (boolean who) {</para>
  <para>                String s1, s2;</para>
  <para>                Chess_Coord[] vector = new Chess_Coord[2];</para>
  <para>                boolean ok = true;</para>
  <para>                if(who) System.out.println("\n\t\t\033[40;1;37m** Joueur BLANC **\033[0m");</para>
  <para>                else System.out.println("\n\t\t\033[47;1;30m** Joueur NOIR **\033[0m");</para>
  <para>                while(ok) {</para>
  <para>                        do {</para>
  <para>                                System.out.print("\t\033[1;36mCoordonnées de départ \033[31m(PIÈCE.X.Y)\033[1;36m : \033[1;33m");</para>
  <para>                                s1 = scan.nextLine();</para>
  <para>                        }</para>
  <para>                        while(!ValidateCoordString(s1, true));</para>
  <para>                        do{</para>
  <para>                                System.out.print("\t\033[1;36mCoordonnées de fin \033[31m(X.Y)\033[1;36m : \033[1;33m");</para>
  <para>                                s2 = scan.nextLine();</para>
  <para>                        }</para>
  <para>                        while(!ValidateCoordString(s2, false));</para>
  <para>                        System.out.print("\033[0m");</para>
  <para/>
  <para type="comment">                        // vérifie si la pièce est autorisée</para>
  <para>                        startCoord = new Chess_Coord(GetXFromString(s1, true), GetYFromString(s1, true));</para>
  <para>                        if(turn) {</para>
  <para>                                if(GetPieceFromString(s1, turn, true).GetType() == GetTypeFromString(s1) &amp;&amp;</para>
  <para>                                GetPieceFromString(s1, turn, true).GetColor() == true) {</para>
  <para>                                        endCoord = new Chess_Coord(GetXFromString(s2, false), GetYFromString(s2, false)); </para>
  <para>                                        vector[0] = startCoord;</para>
  <para>                                        vector[1] = endCoord;</para>
  <para>                                        ok = false;</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(GetPieceFromString(s1, turn, true).GetType() == GetTypeFromString(s1) &amp;&amp;</para>
  <para>                                GetPieceFromString(s1, turn, true).GetColor() == false) {</para>
  <para>                                        endCoord = new Chess_Coord(GetXFromString(s2, false), GetYFromString(s2, false));</para>
  <para>                                        vector[0] = startCoord;</para>
  <para>                                        vector[1] = endCoord;</para>
  <para>                                        ok = false;</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return vector;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private boolean ValidateCoordString (String s, boolean isStart) {</para>
  <para>                String[] tokens = s.split("[.]");</para>
  <para type="comment">                // pour coordonnées de départ</para>
  <para>                if(isStart) {</para>
  <para>                        if(s.length() == 5) {</para>
  <para>                                if(tokens[0].length() == 1) {</para>
  <para>                                        if(tokens[0].toLowerCase().equalsIgnoreCase("p") ||</para>
  <para>                                        tokens[0].toLowerCase().equalsIgnoreCase("r") ||</para>
  <para>                                        tokens[0].toLowerCase().equalsIgnoreCase("n") ||</para>
  <para>                                        tokens[0].toLowerCase().equalsIgnoreCase("b") ||</para>
  <para>                                        tokens[0].toLowerCase().equalsIgnoreCase("q") ||</para>
  <para>                                        tokens[0].toLowerCase().equalsIgnoreCase("k")) {</para>
  <para>                                                if(tokens[1].length() == 1) {</para>
  <para>                                                        int x = Character.getNumericValue(tokens[1].charAt(0));</para>
  <para>                                                        if(x &gt; 0 &amp;&amp; x &lt; 9) {</para>
  <para>                                                                if(tokens[2].length() == 1) {</para>
  <para>                                                                        int y = Character.getNumericValue(tokens[2].charAt(0));</para>
  <para>                                                                        if(y &gt; 0 &amp;&amp; y &lt; 9) return true;</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // pour coordonnées de fin</para>
  <para>                else {</para>
  <para>                        if(s.length() == 3) {</para>
  <para>                                if(tokens[0].length() == 1) {</para>
  <para>                                        int x = Character.getNumericValue(tokens[0].charAt(0));</para>
  <para>                                        if(x &gt; 0 &amp;&amp; x &lt; 9) {</para>
  <para>                                                if(tokens[1].length() == 1) {</para>
  <para>                                                        int y = Character.getNumericValue(tokens[1].charAt(0));</para>
  <para>                                                        if(y &gt; 0 &amp;&amp; y &lt; 9) return true;</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private int Promote (Chess_Player p) {</para>
  <para>                String s;</para>
  <para>                System.out.print("\n\033[5;1;91mNouveau type : \033[25;1;33m");</para>
  <para>                s = scan.nextLine();</para>
  <para>                System.out.print("\033[0m");</para>
  <para>                int i = ValidatePromoteString(s);</para>
  <para>                p.SetPromCount();</para>
  <para>                return i;</para>
  <para type="function">        }</para>
  <para>        </para>
  <para type="function">        private int ValidatePromoteString (String s) {</para>
  <para>                s = s.toLowerCase();</para>
  <para>                if(s.charAt(0) == 'r') return 2;</para>
  <para>                else if(s.charAt(0) == 'n') return 3;</para>
  <para>                else if(s.charAt(0) == 'b') return 4;</para>
  <para>                else if(s.charAt(0) == 'q') return 5;</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private int GetTypeFromString (String s) {</para>
  <para>                if(Character.valueOf(s.charAt(0)) == 'P' || Character.valueOf(s.charAt(0)) == 'p') return 1;</para>
  <para>                else if(Character.valueOf(s.charAt(0)) == 'R' || Character.valueOf(s.charAt(0)) == 'r') return 2;</para>
  <para>                else if(Character.valueOf(s.charAt(0)) == 'N' || Character.valueOf(s.charAt(0)) == 'n') return 3;</para>
  <para>                else if(Character.valueOf(s.charAt(0)) == 'B' || Character.valueOf(s.charAt(0)) == 'b') return 4;</para>
  <para>                else if(Character.valueOf(s.charAt(0)) == 'Q' || Character.valueOf(s.charAt(0)) == 'q') return 5;</para>
  <para>                else if(Character.valueOf(s.charAt(0)) == 'K' || Character.valueOf(s.charAt(0)) == 'k') return 6;</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private int GetXFromString (String s, boolean opt1) {</para>
  <para>                if(opt1) return Character.getNumericValue(s.charAt(2));</para>
  <para>                else return Character.getNumericValue(s.charAt(0));</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private int GetYFromString (String s, boolean opt1) {</para>
  <para>                if(opt1) return Character.getNumericValue(s.charAt(4));</para>
  <para>                else return Character.getNumericValue(s.charAt(2));</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private Piece GetPieceFromString (String s, boolean turn_, boolean opt1) {</para>
  <para>                if(turn_) return b.GetPieceByCoord(new Chess_Coord(GetXFromString(s, opt1), GetYFromString(s, opt1)), p1);</para>
  <para>                else return b.GetPieceByCoord(new Chess_Coord(GetXFromString(s, opt1), GetYFromString(s, opt1)), p2);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void EndTurn () {</para>
  <para>                if(turn) turn = false;</para>
  <para>                else turn = true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public boolean GetTurn () {return turn;}</para>
  <para/>
  <para type="function">        public void Clear () {</para>
  <para>                try {</para>
  <para>                        if(System.getProperty("os.name").contains("Windows")) </para>
  <para>                                new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();</para>
  <para>                        else System.out.print("\033\143");</para>
  <para>                } </para>
  <para>                catch (IOException | InterruptedException ex) {System.out.println("Clear : " + ex.getMessage());}</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Splash () {</para>
  <para>                Clear();</para>
  <para>                System.out.println("\n\n\n");</para>
  <para>                System.out.println("\033[1;47;30m ############### #### #### ################ ################# ");</para>
  <para>                System.out.println(" ################# ###### ###### ################## ###################");</para>
  <para>                System.out.println(" ####### ###### ###### ###### ######## ###### ###### ");</para>
  <para>                System.out.println("####### ###### ###### ####### ##### ");</para>
  <para>                System.out.println("###### ###### ###### ###### ###### ");</para>
  <para>                System.out.println("###### ###### ###### ###### ################## ");</para>
  <para>                System.out.println("###### ###### ###### ###### ################### ");</para>
  <para>                System.out.println("###### ####### ####### ####### #####");</para>
  <para>                System.out.println("###### #################### ############# ######");</para>
  <para>                System.out.println("###### #################### ############## ################# ");</para>
  <para>                System.out.println("\033[1;40;37m###### #################### ############# ################# ");</para>
  <para>                System.out.println("###### ####### ####### ####### ###### ");</para>
  <para>                System.out.println("###### ###### ###### ###### ##### ");</para>
  <para>                System.out.println("###### ###### ###### ###### ###### ");</para>
  <para>                System.out.println("###### ###### ###### ###### ################# ");</para>
  <para>                System.out.println("###### ###### ###### ###### ################# ");</para>
  <para>                System.out.println("####### ###### ###### ####### #####");</para>
  <para>                System.out.println(" ####### ###### ###### ###### ######## ###### #####");</para>
  <para>                System.out.println(" ################# ###### ###### ################## ################## ");</para>
  <para>                System.out.println(" ############### #### #### ################ ################## \033[0m");</para>
  <para>                System.out.println();</para>
  <para>                System.out.print("\t\t\t\033[32mAppuyer sur une touche ...\033[0m");</para>
  <para>                scan.nextLine();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Chess_Player.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import pieces.*;</para>
  <para/>
  <para type="class">public class Chess_Player {</para>
  <para>        public Pawn p1, p2, p3, p4, p5, p6, p7, p8;</para>
  <para>        public Rook r1, r2;</para>
  <para>        public Knight n1, n2;</para>
  <para>        public Bishop b1, b2;</para>
  <para>        public Queen q;</para>
  <para>        public King k;</para>
  <para>        public int color;</para>
  <para>        public Piece e1, e2, e3, e4, e5, e6, e7, e8;</para>
  <para>        private int promCount;</para>
  <para/>
  <para type="function">        public Chess_Player (int num) {</para>
  <para>                color = num;</para>
  <para>                promCount = 0;</para>
  <para>                Init();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                if(color == 1) {</para>
  <para type="comment">                        // set régulier</para>
  <para>                        p1 = new Pawn(new Chess_Coord(1, 7), true);</para>
  <para>                        p2 = new Pawn(new Chess_Coord(2, 7), true);</para>
  <para>                        p3 = new Pawn(new Chess_Coord(3, 7), true);</para>
  <para>                        p4 = new Pawn(new Chess_Coord(4, 7), true);</para>
  <para>                        p5 = new Pawn(new Chess_Coord(5, 7), true);</para>
  <para>                        p6 = new Pawn(new Chess_Coord(6, 7), true);</para>
  <para>                        p7 = new Pawn(new Chess_Coord(7, 7), true);</para>
  <para>                        p8 = new Pawn(new Chess_Coord(8, 7), true);</para>
  <para>                        r1 = new Rook(new Chess_Coord(1, 8), true);</para>
  <para>                        r2 = new Rook(new Chess_Coord(8, 8), true);</para>
  <para>                        n1 = new Knight(new Chess_Coord(2, 8), true);</para>
  <para>                        n2 = new Knight(new Chess_Coord(7, 8), true);</para>
  <para>                        b1 = new Bishop(new Chess_Coord(3, 8), true);</para>
  <para>                        b2 = new Bishop(new Chess_Coord(6, 8), true);</para>
  <para>                        q = new Queen(new Chess_Coord(4, 8), true);</para>
  <para>                        k = new King(new Chess_Coord(5, 8), true);</para>
  <para/>
  <para type="comment">                        // set de test</para>
  <para type="comment">                        /*p1 = new Pawn(new Chess_Coord(1, 7), true);</para>
  <para type="comment">                        p2 = new Pawn(new Chess_Coord(2, 7), true);</para>
  <para type="comment">                        p3 = new Pawn(new Chess_Coord(3, 7), true);</para>
  <para type="comment">                        p4 = new Pawn(new Chess_Coord(4, 7), true);</para>
  <para type="comment">                        p5 = new Pawn(new Chess_Coord(5, 7), true);</para>
  <para type="comment">                        p6 = new Pawn(new Chess_Coord(6, 7), true);</para>
  <para type="comment">                        p7 = new Pawn(new Chess_Coord(7, 7), true);</para>
  <para type="comment">                        p8 = new Pawn(new Chess_Coord(8, 7), true);</para>
  <para type="comment">                        r1 = new Rook(new Chess_Coord(1, 6), true);</para>
  <para type="comment">                        r2 = new Rook(new Chess_Coord(8, 8), true);</para>
  <para type="comment">                        n1 = new Knight(new Chess_Coord(2, 6), true);</para>
  <para type="comment">                        n2 = new Knight(new Chess_Coord(7, 6), true);</para>
  <para type="comment">                        b1 = new Bishop(new Chess_Coord(3, 6), true);</para>
  <para type="comment">                        b2 = new Bishop(new Chess_Coord(6, 6), true);</para>
  <para type="comment">                        q = new Queen(new Chess_Coord(4, 6), true);</para>
  <para type="comment">                        k = new King(new Chess_Coord(5, 3), true);*/</para>
  <para type="comment">                }        </para>
  <para>                else {</para>
  <para type="comment">                        // set régulier</para>
  <para>                        p1 = new Pawn(new Chess_Coord(1, 2), false);</para>
  <para>                        p2 = new Pawn(new Chess_Coord(2, 2), false);</para>
  <para>                        p3 = new Pawn(new Chess_Coord(3, 2), false);</para>
  <para>                        p4 = new Pawn(new Chess_Coord(4, 2), false);</para>
  <para>                        p5 = new Pawn(new Chess_Coord(5, 2), false);</para>
  <para>                        p6 = new Pawn(new Chess_Coord(6, 2), false);</para>
  <para>                        p7 = new Pawn(new Chess_Coord(7, 2), false);</para>
  <para>                        p8 = new Pawn(new Chess_Coord(8, 2), false);</para>
  <para>                        r1 = new Rook(new Chess_Coord(1, 1), false);</para>
  <para>                        r2 = new Rook(new Chess_Coord(8, 1), false);</para>
  <para>                        n1 = new Knight(new Chess_Coord(2, 1), false);</para>
  <para>                        n2 = new Knight(new Chess_Coord(7, 1), false);</para>
  <para>                        b1 = new Bishop(new Chess_Coord(3, 1), false);</para>
  <para>                        b2 = new Bishop(new Chess_Coord(6, 1), false);</para>
  <para>                        q = new Queen(new Chess_Coord(4, 1), false);</para>
  <para>                        k = new King(new Chess_Coord(5, 1), false);</para>
  <para/>
  <para type="comment">                        // set de test</para>
  <para type="comment">                        /*p1 = new Pawn(new Chess_Coord(1, 7), false);</para>
  <para type="comment">                        p2 = new Pawn(new Chess_Coord(2, 2), false);</para>
  <para type="comment">                        p3 = new Pawn(new Chess_Coord(3, 2), false);</para>
  <para type="comment">                        p4 = new Pawn(new Chess_Coord(4, 2), false);</para>
  <para type="comment">                        p5 = new Pawn(new Chess_Coord(5, 2), false);</para>
  <para type="comment">                        p6 = new Pawn(new Chess_Coord(6, 2), false);</para>
  <para type="comment">                        p7 = new Pawn(new Chess_Coord(7, 2), false);</para>
  <para type="comment">                        p8 = new Pawn(new Chess_Coord(8, 2), false);</para>
  <para type="comment">                        r1 = new Rook(new Chess_Coord(1, 1), false);</para>
  <para type="comment">                        r2 = new Rook(new Chess_Coord(8, 1), false);</para>
  <para type="comment">                        n1 = new Knight(new Chess_Coord(2, 3), false);</para>
  <para type="comment">                        n2 = new Knight(new Chess_Coord(7, 3), false);</para>
  <para type="comment">                        b1 = new Bishop(new Chess_Coord(3, 3), false);</para>
  <para type="comment">                        b2 = new Bishop(new Chess_Coord(6, 3), false);</para>
  <para type="comment">                        q = new Queen(new Chess_Coord(4, 3), false);</para>
  <para type="comment">                        k = new King(new Chess_Coord(5, 1), false);*/</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Piece GetPiece (Piece o) {</para>
  <para>                if(o.equals(p1)) return p1;</para>
  <para>                else if(o.equals(p2)) return p2;</para>
  <para>                else if(o.equals(p3)) return p3;</para>
  <para>                else if(o.equals(p4)) return p4;</para>
  <para>                else if(o.equals(p5)) return p5;</para>
  <para>                else if(o.equals(p6)) return p6;</para>
  <para>                else if(o.equals(p7)) return p7;</para>
  <para>                else if(o.equals(p8)) return p8;</para>
  <para>                else if(o.equals(r1)) return r1;</para>
  <para>                else if(o.equals(r2)) return r2;</para>
  <para>                else if(o.equals(n1)) return n1;</para>
  <para>                else if(o.equals(n2)) return n2;</para>
  <para>                else if(o.equals(b1)) return b1;</para>
  <para>                else if(o.equals(b2)) return b2;</para>
  <para>                else if(o.equals(q)) return q;</para>
  <para>                else return k;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int GetPromCount () {return promCount;}</para>
  <para/>
  <para type="function">        public void SetPromCount () {promCount++;}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Chess_Setup.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para>import pieces.*;</para>
  <para/>
  <para type="class">public class Chess_Setup {</para>
  <para>        private Chess_Board gBoard;</para>
  <para>        private Chess_Player player1, player2;</para>
  <para/>
  <para type="function">        public Chess_Setup () {</para>
  <para>                Init();</para>
  <para>                InitPiecesOnBoard(player1);</para>
  <para>                InitPiecesOnBoard(player2);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                gBoard = new Chess_Board();</para>
  <para>                player1 = new Chess_Player(1);</para>
  <para>                player2 = new Chess_Player(2);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void InitPiecesOnBoard (Chess_Player p) {</para>
  <para>                SetPieceOnBoard(p.p1);</para>
  <para>                SetPieceOnBoard(p.p2);</para>
  <para>                SetPieceOnBoard(p.p3);</para>
  <para>                SetPieceOnBoard(p.p4);</para>
  <para>                SetPieceOnBoard(p.p5);</para>
  <para>                SetPieceOnBoard(p.p6);</para>
  <para>                SetPieceOnBoard(p.p7);</para>
  <para>                SetPieceOnBoard(p.p8);</para>
  <para>                SetPieceOnBoard(p.r1);</para>
  <para>                SetPieceOnBoard(p.r2);</para>
  <para>                SetPieceOnBoard(p.n1);</para>
  <para>                SetPieceOnBoard(p.n2);</para>
  <para>                SetPieceOnBoard(p.b1);</para>
  <para>                SetPieceOnBoard(p.b2);</para>
  <para>                SetPieceOnBoard(p.q);</para>
  <para>                SetPieceOnBoard(p.k);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void SetPieceOnBoard (Piece o) {</para>
  <para>                gBoard.UpdateBoard(o.GetColor(), o.GetType(), o.GetPos());</para>
  <para type="function">        }</para>
  <para/>
  <para/>
  <para/>
  <para type="function">        public Chess_Board GetBoard () {return gBoard;}</para>
  <para>                </para>
  <para type="function">        public Chess_Player GetPlayer (int num) {</para>
  <para>                if(num == 1) return player1;</para>
  <para>                else return player2;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Chess.java”</para>
  <para/>
  <para type="import">import game.*;</para>
  <para/>
  <para type="class">public class Chess {</para>
  <para type="function">        public static void main (String[] args) throws NullPointerException {</para>
  <para>                Chess_Game game = new Chess_Game();</para>
  <para>                try {</para>
  <para>                        while(true) game.PlayTurn();</para>
  <para>                }</para>
  <para>                catch(NullPointerException e) {System.out.println("Erreur : " + e.getMessage());}</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
</article>
