<?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>Trouble</dc:title>
  <dc:description>Code source d'une reproduction en mode console du jeu de table Trouble</dc:description>
  <dc:creator>Jean-Frédéric Guilbault</dc:creator>
  <dc:subject>Trouble</dc:subject>
  <para type="filename">“TBL_Dice.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="class">public class TBL_Dice {</para>
  <para>        private int result;</para>
  <para/>
  <para type="function">        public TBL_Dice () {result = 0;}</para>
  <para/>
  <para type="function">        public int RollDice () {</para>
  <para>                result = ((int)(Math.random() * (double)6)) + 1;</para>
  <para>                return result;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int GetDiceResult () {return result;}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“TBL_Piece.java”</para>
  <para/>
  <para type="package">package pieces;</para>
  <para/>
  <para type="import">import board.TBL_Coord;</para>
  <para/>
  <para type="class">public class TBL_Piece {</para>
  <para>        private boolean isFinished;</para>
  <para>        private TBL_Coord pos;</para>
  <para>        private int color;</para>
  <para>        private int status; // 0-home - 7-finish - 1-running</para>
  <para>        private int count; // 1 tour = 42</para>
  <para>        public static final int HOME = 0;</para>
  <para>        public static final int FINISH = 7;</para>
  <para>        public static final int RUN = 1;</para>
  <para/>
  <para type="function">        public TBL_Piece () {</para>
  <para>                Init();</para>
  <para>                color = 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public TBL_Piece (TBL_Coord coord, int color_) {</para>
  <para>                Init();</para>
  <para>                color = color_;</para>
  <para>                pos = new TBL_Coord(coord);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                status = 0;</para>
  <para>                count = 0;</para>
  <para>                isFinished = false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public boolean GetIsFinished () {return isFinished;}</para>
  <para type="function">        public void SetIsFinished (boolean b) {isFinished = b;}</para>
  <para/>
  <para type="function">        public TBL_Coord GetPos () {return pos;}</para>
  <para type="function">        public void SetPos (TBL_Coord coord) {pos = coord;}</para>
  <para type="function">        public void SetPos (int x_, int y_) {pos.SetXY(x_, y_);}</para>
  <para/>
  <para type="function">        public int GetColor () {return color;}</para>
  <para type="function">        public void SetColor (int col) {color = col;}</para>
  <para/>
  <para type="function">        public int GetStatus () {return status;}</para>
  <para type="function">        public void SetStatus (int status_) {status = status_;}</para>
  <para/>
  <para type="function">        public int GetCount () {return count;}</para>
  <para type="function">        public void SetCount (int n) {count = n;}</para>
  <para type="function">        public void IncrementCount () {count++;}</para>
  <para type="function">        public void ResetCount () {count = 0;}</para>
  <para/>
  <para type="function">        public boolean equals (TBL_Piece o) {</para>
  <para>                if(this.GetPos().equals(o.GetPos()) &amp;&amp; this.color == o.color &amp;&amp; </para>
  <para>                this.status == o.status &amp;&amp; this.count == o.count) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“TBL_Coord.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="class">public class TBL_Coord {</para>
  <para>        private int x, y;</para>
  <para/>
  <para type="function">        public TBL_Coord () {</para>
  <para>                x = 0;</para>
  <para>                y = 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public TBL_Coord (int a, int b) {</para>
  <para>                x = a;</para>
  <para>                y = b;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public TBL_Coord (TBL_Coord coord) {</para>
  <para>                x = coord.x;</para>
  <para>                y = coord.y;</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 (TBL_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">“TBL_Board.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="import">import game.TBL_Player;</para>
  <para type="import">import pieces.TBL_Dice;</para>
  <para type="import">import pieces.TBL_Piece;</para>
  <para/>
  <para type="class">public class TBL_Board {</para>
  <para>        private int[][] situation;</para>
  <para>        private TBL_Dice dice;</para>
  <para/>
  <para type="function">        public TBL_Board () {</para>
  <para>                Init();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                dice = new TBL_Dice();</para>
  <para>                situation = new int[15][15];</para>
  <para type="comment">                // initialise le tableau à 0</para>
  <para>                for(int i = 0 ; i &lt; 15 ; i++) </para>
  <para>                        for(int j = 0 ; j &lt; 15 ; j++) situation[i][j] = 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche situation (pour les tests)</para>
  <para type="comment">        @Deprecated</para>
  <para type="function">        public void DisplaySituation () {</para>
  <para>                for(int i = 0 ; i &lt; 15 ; i++) {</para>
  <para>                        for(int j = 0 ; j &lt; 15 ; j++) {</para>
  <para>                                System.out.print(situation[i][j] + " | ");</para>
  <para>                        }</para>
  <para>                        System.out.println();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le board et les pièces</para>
  <para type="function">        public void DisplayBoard (TBL_Player[] p, int turn) {</para>
  <para type="comment">                // 0</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(3); PrintR(1, 0, p);</para>
  <para>                Space(3); PrintR(3, 0, p);</para>
  <para>                Space(3); PrintR(5, 0, p);</para>
  <para>                Space(3); PrintX(7, 0, p);</para>
  <para>                Space(3); PrintR(9, 0, p);</para>
  <para>                Space(3); PrintR(11, 0, p);</para>
  <para>                Space(3); PrintR(13, 0, p);</para>
  <para>                Space(3); </para>
  <para>                System.out.println();</para>
  <para type="comment">                // 1</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintR(0, 1, p); Space(29); PrintR(14, 1, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 2</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(13); </para>
  <para>                PrintH(5, 2, p, 3); PrintH(6, 2, p, 3); PrintH(7, 2, p, 3); PrintH(8, 2, p, 3);</para>
  <para>                Space(13);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 3</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintR(0, 3, p); Space(6);</para>
  <para>                PrintF(3, 3, p, 2); Space(15);</para>
  <para>                PrintF(11, 3, p, 3); Space(6);</para>
  <para>                PrintR(14, 3, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 4</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(9); PrintF(4, 4, p, 2);</para>
  <para>                Space(11); PrintF(10, 4, p, 3);</para>
  <para>                Space(7);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 5</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintR(0, 5, p); Space(10);</para>
  <para>                PrintF(5, 5, p, 2); Space(7);</para>
  <para>                PrintF(9, 5, p, 3); Space(10);</para>
  <para>                PrintR(14, 5, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 6</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(5); PrintH(2, 6, p, 2);</para>
  <para>                Space(7); PrintF(6, 6, p, 2);</para>
  <para>                Space(3); PrintF(8, 6, p, 3);</para>
  <para>                Space(7); PrintH(12, 6, p, 4);</para>
  <para>                Space(3);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 7</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintX(0, 7, p); Space(4); PrintH(2, 7, p, 2);</para>
  <para>                Space(9); PrintD(turn); Space(9);</para>
  <para>                PrintH(12, 7, p, 4); Space(4); PrintX(14, 7, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 8</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(5); PrintH(2, 8, p, 2);</para>
  <para>                Space(7); PrintF(6, 8, p, 1);</para>
  <para>                Space(3); PrintF(8, 8, p, 4);</para>
  <para>                Space(7); PrintH(12, 8, p, 4);</para>
  <para>                Space(5);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 9</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintR(0, 9, p); Space(4); PrintH(2, 9, p, 2); Space(5);</para>
  <para>                PrintF(5, 9, p, 1); Space(7); PrintF(9, 9, p, 4);</para>
  <para>                Space(5); PrintH(12, 9, p, 4); Space(4); PrintR(14, 9, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 10</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(9); PrintF(4, 10, p, 1);</para>
  <para>                Space(11); PrintF(10, 10, p, 4);</para>
  <para>                Space(16);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 11</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintR(0, 11, p); Space(6);</para>
  <para>                PrintF(3, 11, p, 1); Space(15);</para>
  <para>                PrintF(11, 11, p, 4); Space(6);</para>
  <para>                PrintR(14, 11, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 12</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(13); </para>
  <para>                PrintH(5, 12, p, 1); PrintH(6, 12, p, 1); PrintH(7, 12, p, 1); PrintH(8, 12, p, 1);</para>
  <para>                Space(13);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 13</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                PrintR(0, 13, p); Space(29); PrintR(14, 13, p);</para>
  <para>                System.out.println();</para>
  <para type="comment">                // 14</para>
  <para>                System.out.print("\t\t\t");</para>
  <para>                Space(3); PrintR(1, 14, p);</para>
  <para>                Space(3); PrintR(3, 14, p);</para>
  <para>                Space(3); PrintR(5, 14, p);</para>
  <para>                Space(3); PrintX(7, 14, p);</para>
  <para>                Space(3); PrintR(9, 14, p);</para>
  <para>                Space(3); PrintR(11, 14, p);</para>
  <para>                Space(3); PrintR(13, 14, p);</para>
  <para>                Space(3);</para>
  <para>                System.out.println();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // utilitaire de l'affichage RUNNING</para>
  <para type="function">        private void PrintR (int x, int y, TBL_Player[] p) {</para>
  <para>                TBL_Coord coord = new TBL_Coord(x, y);</para>
  <para>                int n = GetParams(coord);</para>
  <para>                int col = ReadColor(n);</para>
  <para>                int stat = ReadStatus(n);</para>
  <para/>
  <para>                if(n == 0) System.out.print("\033[1;90m*\033[0m");</para>
  <para>                else if(stat == 1) {</para>
  <para>                switch(col) {</para>
  <para type="comment">                        // rouge</para>
  <para>                        case 1:     if(p[0].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(1)))</para>
  <para>                                                        System.out.print("\033[1;31m1\033[0m");</para>
  <para>                                                else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(2)))</para>
  <para>                                                        System.out.print("\033[1;31m2\033[0m");</para>
  <para>                                                else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(3)))</para>
  <para>                                                        System.out.print("\033[1;31m3\033[0m");</para>
  <para>                                                else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(4)))</para>
  <para>                                                        System.out.print("\033[1;31m4\033[0m");</para>
  <para>                                        }</para>
  <para>                                        else System.out.print("\033[1;37m*\033[0m");</para>
  <para>                                        break;</para>
  <para type="comment">                        // vert</para>
  <para>                        case 2:     if(p[1].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(1)))</para>
  <para>                                                        System.out.print("\033[1;32m1\033[0m");</para>
  <para>                                                else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(2)))</para>
  <para>                                                        System.out.print("\033[1;32m2\033[0m");</para>
  <para>                                                else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(3)))</para>
  <para>                                                        System.out.print("\033[1;32m3\033[0m");</para>
  <para>                                                else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(4)))</para>
  <para>                                                        System.out.print("\033[1;32m4\033[0m");</para>
  <para>                                        }</para>
  <para>                                        else System.out.print("\033[1;37m*\033[0m");</para>
  <para>                                        break;</para>
  <para type="comment">                        // jaune</para>
  <para>                        case 3:     if(p[2].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(1)))</para>
  <para>                                                        System.out.print("\033[1;33m1\033[0m");</para>
  <para>                                                else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(2)))</para>
  <para>                                                        System.out.print("\033[1;33m2\033[0m");</para>
  <para>                                                else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(3)))</para>
  <para>                                                        System.out.print("\033[1;33m3\033[0m");</para>
  <para>                                                else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(4)))</para>
  <para>                                                        System.out.print("\033[1;33m4\033[0m");</para>
  <para>                                        }</para>
  <para>                                        else System.out.print("\033[1;37m*\033[0m");</para>
  <para>                                        break;</para>
  <para type="comment">                           // bleu</para>
  <para>                           case 4:     if(p[3].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                   if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(1)))</para>
  <para>                                                           System.out.print("\033[1;34m1\033[0m");</para>
  <para>                                                   else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(2)))</para>
  <para>                                                           System.out.print("\033[1;34m2\033[0m");</para>
  <para>                                                   else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(3)))</para>
  <para>                                                           System.out.print("\033[1;34m3\033[0m");</para>
  <para>                                                   else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(4)))</para>
  <para>                                                           System.out.print("\033[1;34m4\033[0m");</para>
  <para>                                           }</para>
  <para>                                           else System.out.print("\033[1;37m*\033[0m");</para>
  <para>                                           break;</para>
  <para>                           default:    System.out.print("\033[1;37m*\033[0m");</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // utilitaire de l'affichage HOME</para>
  <para type="function">        private void PrintH (int x, int y, TBL_Player[] p, int color_) {</para>
  <para>                TBL_Coord coord = new TBL_Coord(x, y);</para>
  <para>                int n = GetParams(coord);</para>
  <para>                int col = ReadColor(n);</para>
  <para>                int stat = ReadStatus(n);</para>
  <para/>
  <para>                if(n == 0) {</para>
  <para>                        if(color_ == 1) System.out.print("\033[1;31m*\033[0m");</para>
  <para>                        else if(color_ == 2) System.out.print("\033[1;32m*\033[0m");</para>
  <para>                        else if(color_ == 3) System.out.print("\033[1;33m*\033[0m");</para>
  <para>                        else if(color_ == 4) System.out.print("\033[1;34m*\033[0m");</para>
  <para>                }</para>
  <para>                else if(stat == 0) {</para>
  <para>                        switch(col) {</para>
  <para type="comment">                                // rouge</para>
  <para>                                case 1:     if(p[0].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;31m1\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;31m2\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;31m3\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;31m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;31m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // vert</para>
  <para>                                case 2:     if(p[1].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;32m1\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;32m2\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;32m3\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;32m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;32m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // jaune</para>
  <para>                                case 3:     if(p[2].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;33m1\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;33m2\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;33m3\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;33m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;33m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // bleu</para>
  <para>                                case 4:     if(p[3].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;34m1\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;34m2\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;34m3\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;34m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;34m*\033[0m");</para>
  <para>                                                break;</para>
  <para>                                default:   System.out.print("\033[1;37m*\033[0m");</para>
  <para>                        } </para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // utilitaire de l'affichage FINISH</para>
  <para type="function">        private void PrintF (int x, int y, TBL_Player[] p, int color_) {</para>
  <para>                TBL_Coord coord = new TBL_Coord(x, y);</para>
  <para>                int n = GetParams(coord);</para>
  <para>                int col = ReadColor(n);</para>
  <para>                int stat = ReadStatus(n);</para>
  <para/>
  <para>                if(n == 0) {</para>
  <para>                        if(color_ == 1) System.out.print("\033[1;31m*\033[0m");</para>
  <para>                        else if(color_ == 2) System.out.print("\033[1;32m*\033[0m");</para>
  <para>                        else if(color_ == 3) System.out.print("\033[1;33m*\033[0m");</para>
  <para>                        else if(color_ == 4) System.out.print("\033[1;34m*\033[0m");</para>
  <para>                }</para>
  <para>                else if(stat == 7) {</para>
  <para>                        switch(col) {</para>
  <para type="comment">                                // rouge</para>
  <para>                                case 1:     if(p[0].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;31m1\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;31m2\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;31m3\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;31m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;31m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // vert</para>
  <para>                                case 2:     if(p[1].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;32m1\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;32m2\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;32m3\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;32m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;32m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // jaune</para>
  <para>                                case 3:     if(p[2].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;33m1\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;33m2\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;33m3\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;33m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;33m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // bleu</para>
  <para>                                case 4:     if(p[3].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;34m1\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;34m2\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;34m3\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;34m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;34m*\033[0m");</para>
  <para>                                                break;</para>
  <para>                                default:    System.out.print("\033[1;37m*\033[0m");</para>
  <para>                        } </para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // utilitaire de l'affichage case XX</para>
  <para type="function">        private void PrintX (int x, int y, TBL_Player[] p) {</para>
  <para>                TBL_Coord coord = new TBL_Coord(x, y);</para>
  <para>                int n = GetParams(coord);</para>
  <para>                int col = ReadColor(n);</para>
  <para>                int stat = ReadStatus(n);</para>
  <para/>
  <para>                if(n == 0) System.out.print("\033[1;95m*\033[0m");</para>
  <para>                else if(stat == 1) {</para>
  <para>                        switch(col) {</para>
  <para type="comment">                                // rouge</para>
  <para>                                case 1:     if(p[0].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;31m1\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;31m2\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;31m3\033[0m");</para>
  <para>                                                        else if(p[0].GetPieceByCoord(coord).equals(p[0].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;31m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;95m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // vert</para>
  <para>                                case 2:     if(p[1].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;32m1\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;32m2\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;32m3\033[0m");</para>
  <para>                                                        else if(p[1].GetPieceByCoord(coord).equals(p[1].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;32m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;95m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // jaune</para>
  <para>                                case 3:     if(p[2].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;33m1\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;33m2\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;33m3\033[0m");</para>
  <para>                                                        else if(p[2].GetPieceByCoord(coord).equals(p[2].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;33m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[195m*\033[0m");</para>
  <para>                                                break;</para>
  <para type="comment">                                // bleu</para>
  <para>                                case 4:     if(p[3].GetPieceByCoord(coord).GetPos().equals(coord)) {</para>
  <para>                                                        if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(1)))</para>
  <para>                                                                System.out.print("\033[1;34m1\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(2)))</para>
  <para>                                                                System.out.print("\033[1;34m2\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(3)))</para>
  <para>                                                                System.out.print("\033[1;34m3\033[0m");</para>
  <para>                                                        else if(p[3].GetPieceByCoord(coord).equals(p[3].GetPieceByNumber(4)))</para>
  <para>                                                                System.out.print("\033[1;34m4\033[0m");</para>
  <para>                                                }</para>
  <para>                                                else System.out.print("\033[1;95m*\033[0m");</para>
  <para>                                                break;</para>
  <para>                                default:    System.out.print("\033[1;37m*\033[0m");</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // utilitaire de l'affichage, insertion d'espaces</para>
  <para type="function">        private void Space (int spaces) {for(int i = 1 ; i &lt;= spaces ; i++) System.out.print(" ");}</para>
  <para/>
  <para type="comment">        // utilitaire de l'affichage DICE</para>
  <para type="function">        private void PrintD (int turn) {</para>
  <para>                switch(turn) {</para>
  <para>                        case 1:     System.out.print("\033[1;5;40;31m" + (situation[7][7] = dice.GetDiceResult()) + "\033[25;0m");</para>
  <para>                                        break;</para>
  <para>                        case 2:     System.out.print("\033[1;5;40;32m" + (situation[7][7] = dice.GetDiceResult()) + "\033[25;0m");</para>
  <para>                                        break;</para>
  <para>                        case 3:     System.out.print("\033[1;5;40;33m" + (situation[7][7] = dice.GetDiceResult()) + "\033[25;0m");</para>
  <para>                                        break;</para>
  <para>                        case 4:     System.out.print("\033[1;5;40;34m" + (situation[7][7] = dice.GetDiceResult()) + "\033[25;0m");</para>
  <para>                                        break;</para>
  <para>                        default:    System.out.println("Erreur dans TBL_Board.PrintD()");</para>
  <para>                }</para>
  <para>        }</para>
  <para/>
  <para type="comment">        // retourne un nombre aléatoire entre 1 et 6 inclusivement</para>
  <para type="function">        public int RollNGetDiceResult () {</para>
  <para>                int n = dice.RollDice();</para>
  <para>                UpdateDice(n);</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // update sitution pour la position du dé</para>
  <para type="function">        public void UpdateDice (int n) {situation[7][7] = n;}</para>
  <para/>
  <para type="comment">        // update situation (cas général)</para>
  <para type="function">        public void UpdateSituation (TBL_Coord coord, int player, int status) {</para>
  <para>                situation[coord.GetY()][coord.GetX()] = ConvertParamsToInt(player, status);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // met à zéro une coordonnée</para>
  <para type="function">        public void ZeroCoord (TBL_Coord coord) {situation[coord.GetY()][coord.GetX()] = 0;}</para>
  <para type="comment">        // retourne la conversion (joueur, statut) en int</para>
  <para type="function">        private int ConvertParamsToInt (int player, int status) {return (player * 10) + status;}</para>
  <para/>
  <para type="comment">        // retourne le paramètre de situation à une coordonnée donnée</para>
  <para type="function">        public int GetParams (TBL_Coord coord) {return situation[coord.GetY()][coord.GetX()];}</para>
  <para/>
  <para type="comment">        // retourne couleur à partir du paramètre de situation</para>
  <para type="function">        public int ReadColor (int n) {return (n / 10);}</para>
  <para/>
  <para type="comment">        // retourne le statut à partir du paramètre de situation</para>
  <para type="function">        public int ReadStatus (int n) {return (n % 10);}</para>
  <para/>
  <para type="comment">        // retourne une pièce selon les coordonnées</para>
  <para type="function">        public TBL_Piece GetPieceByCoord (TBL_Coord coord, TBL_Player[] p) {</para>
  <para>                int n = GetParams(coord);</para>
  <para>                int col = ReadColor(n);</para>
  <para/>
  <para>                switch(col) {</para>
  <para type="comment">                        // rouge</para>
  <para>                        case 1:         if(p[0].GetPieceByCoord(coord).GetPos().equals(coord)) return p[0].GetPieceByCoord(coord);</para>
  <para type="comment">                        // vert</para>
  <para>                        case 2:         if(p[1].GetPieceByCoord(coord).GetPos().equals(coord)) return p[1].GetPieceByCoord(coord);</para>
  <para type="comment">                        // jaune</para>
  <para>                        case 3:         if(p[2].GetPieceByCoord(coord).GetPos().equals(coord)) return p[2].GetPieceByCoord(coord);</para>
  <para type="comment">                        // bleu</para>
  <para>                        case 4:         if(p[3].GetPieceByCoord(coord).GetPos().equals(coord)) return p[3].GetPieceByCoord(coord);</para>
  <para>                        default:        return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“TBL_Game.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import java.io.IOException;</para>
  <para type="import">import board.TBL_Board;</para>
  <para type="import">import board.TBL_Coord;</para>
  <para type="import">import pieces.TBL_Piece;</para>
  <para/>
  <para type="import">import java.util.Scanner;</para>
  <para/>
  <para type="class">public class TBL_Game {</para>
  <para>        private TBL_Setup setup;</para>
  <para>        private TBL_Player[] p;</para>
  <para>        private TBL_Board b;</para>
  <para>        private Scanner scan;</para>
  <para>        private int turn;</para>
  <para>        private int[] podium;</para>
  <para/>
  <para type="function">        public TBL_Game () {</para>
  <para>I                nit();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                scan = new Scanner(System.in);</para>
  <para>                Clear();</para>
  <para>                setup = new TBL_Setup();</para>
  <para>                p = setup.GetPlayers();</para>
  <para>                b = setup.GetBoard();</para>
  <para>                turn = setup.GetFirstToPlay();</para>
  <para>                podium = new int[4];</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) podium[i] = 0;</para>
  <para>                Clear();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void PlayTurn () {</para>
  <para>                TBL_Coord special = new TBL_Coord();</para>
  <para>                TBL_Player now = GetPlayer();</para>
  <para>                int opt = 0;</para>
  <para>                if(now.GetIsActive() &amp;&amp; GetPodiumCount() &lt; 3) {</para>
  <para>                        Clear();</para>
  <para>                        b.DisplayBoard(p, turn); //b.DisplaySituation();</para>
  <para type="comment">                        // roulement de dé HUMAN / AUTO</para>
  <para>                        if(now.GetIsHuman()) now.SetLastDice(Roll(turn));</para>
  <para>                        else { // si AUTO</para>
  <para>                                now.SetLastDice(b.RollNGetDiceResult());</para>
  <para>                        }</para>
  <para>                        if(now.GetLastDice() == 6) { // dé == 6</para>
  <para>                                opt = 0;</para>
  <para>                                if(GetCountRUNNING(now) &gt; 0) { // reste au moins une pièce RUNNING</para>
  <para>                                        opt = MenuHomeOrRunning(now);</para>
  <para>                                }</para>
  <para type="comment">                                          // aucune pièce RUNNING</para>
  <para>                                else { </para>
  <para>                                        opt = 1;</para>
  <para>                                }</para>
  <para>                                if(opt == 1) {</para>
  <para>                                        if(GetCountHOME(now) &gt; 0) PlaceOnSTART(now); //placer sur start</para>
  <para>                                }</para>
  <para type="comment">                                          // avancer (demander pièce etc)</para>
  <para>                                else {</para>
  <para>                                        special = SubTurnGotRUNNING(now);</para>
  <para>                                } </para>
  <para>                        }</para>
  <para>                        else { // dé != 6</para>
  <para>                                if(GetCountRUNNING(now) &gt; 0) { // reste au moins une pièce RUNNING</para>
  <para>                                        special = SubTurnGotRUNNING(now);</para>
  <para>                                }</para>
  <para type="comment">                                          // aucune pièce RUNNING</para>
  <para>                                else {</para>
  <para>                                        if(GetCountHOME(now) == 0) { //GAME OVER - INSERER DANS PALMARES tant qu'il reste des joueurs</para>
  <para>                                                GameOver(now.GetColor()); // TEMPORAIRE!!!!!!!!!!!!!!!!!!!!!</para>
  <para>                                        } </para>
  <para>                                }</para>
  <para>                        }</para>
  <para/>
  <para type="comment">                        // fin de tour sauf sur un 6</para>
  <para>                        if(!IsXX(special)) {</para>
  <para>                                if(GetPlayer().GetLastDice() != 6) EndTurn();</para>
  <para>                        } </para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        if(GetPodiumCount() &gt;= 3) {</para>
  <para>                                Clear();</para>
  <para>                                b.DisplayBoard(p, turn);</para>
  <para>                                DisplayPodium();</para>
  <para>                                System.exit(0); // exit</para>
  <para>                        }</para>
  <para>                        else EndTurn();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // sous-procédure commune si des pièces RUNNING existent</para>
  <para type="function">        private TBL_Coord SubTurnGotRUNNING (TBL_Player p_) {</para>
  <para>                TBL_Coord tempCoord = new TBL_Coord();</para>
  <para>                TBL_Piece temp = new TBL_Piece();</para>
  <para>                TBL_Player now = GetPlayer();</para>
  <para>                TBL_Piece[] pRSet = GetPlayerPiecesRUNNING(now);</para>
  <para>                int choice = 0;</para>
  <para/>
  <para type="comment">                // plus d'une pièce</para>
  <para>                if(GetCountRUNNING(p_) &gt; 1){</para>
  <para>                        do {</para>
  <para>                                choice = SubTurnChoice(p_);</para>
  <para>                                switch(choice) {</para>
  <para>                                        case 1:     if(!p_.GetPieceByNumber(1).GetIsFinished()) temp = p_.GetPieceByNumber(1);</para>
  <para>                                                        break;</para>
  <para>                                        case 2:     if(!p_.GetPieceByNumber(2).GetIsFinished()) temp = p_.GetPieceByNumber(2);</para>
  <para>                                                        break;</para>
  <para>                                        case 3:     if(!p_.GetPieceByNumber(3).GetIsFinished()) temp = p_.GetPieceByNumber(3);</para>
  <para>                                                        break;</para>
  <para>                                        case 4:     if(!p_.GetPieceByNumber(4).GetIsFinished()) temp = p_.GetPieceByNumber(4);</para>
  <para>                                                        break;</para>
  <para>                                        default:    System.out.println("Erreur dans TBL_Game.SubTurnGotRUNNING");</para>
  <para>                                }</para>
  <para>                                tempCoord = ComputeDestination(temp, p_.GetLastDice());</para>
  <para>                        }</para>
  <para>                        while(IsFriendlyOnCoord(tempCoord));</para>
  <para type="comment">                        // ici temp est la pièce à jouer, contient ancienne position</para>
  <para type="comment">                        // déplacement standard</para>
  <para>                        if(temp.GetCount() &lt; 23) {</para>
  <para>                                tempCoord = SubMoveUpdate(p_, temp);</para>
  <para>                        } </para>
  <para>                        else if(temp.GetCount() &gt;= 23 &amp;&amp; p_.GetLastDice() &lt; (29 - temp.GetCount())) {</para>
  <para>                                tempCoord = SubMoveUpdate(p_, temp);</para>
  <para>                        }</para>
  <para type="comment">                        // mode "FINISH"</para>
  <para>                        else {</para>
  <para>                                FinishMode(p_, temp);</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                        // seulement une pièce RUNNING</para>
  <para>                else {</para>
  <para type="comment">                        //set temp</para>
  <para>                        int i = 0;</para>
  <para>                        do {</para>
  <para>                                if(pRSet[i].equals(p_.GetPieceByNumber(1))) temp = pRSet[i];</para>
  <para>                                else if(pRSet[i].equals(p_.GetPieceByNumber(2))) temp = pRSet[i];</para>
  <para>                                else if(pRSet[i].equals(p_.GetPieceByNumber(3))) temp = pRSet[i];</para>
  <para>                                else if(pRSet[i].equals(p_.GetPieceByNumber(4))) temp = pRSet[i];</para>
  <para>                                i++;</para>
  <para>                        } </para>
  <para>                        while(temp != null &amp;&amp; i &lt; 4);</para>
  <para type="comment">                        // pour le tour de table seulement (test case XX)</para>
  <para>                        tempCoord = ComputeDestination(temp, p_.GetLastDice());</para>
  <para type="comment">                        // ici temp est la pièce à jouer, contient ancienne position</para>
  <para>                        if(temp.GetCount() &lt; 23) { // déplacement standard</para>
  <para>                                tempCoord = SubMoveUpdate(p_, temp);</para>
  <para>                        }</para>
  <para>                        else if(temp.GetCount() &gt;= 23 &amp;&amp; p_.GetLastDice() &lt; (29 - temp.GetCount())) {</para>
  <para>                                tempCoord = SubMoveUpdate(p_, temp);</para>
  <para>                        }</para>
  <para type="comment">                        // mode "FINISH"</para>
  <para>                        else {</para>
  <para>                                FinishMode(p_, temp);</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return tempCoord;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // update position du déplacement</para>
  <para type="function">        private TBL_Coord SubMoveUpdate (TBL_Player p_, TBL_Piece o) {</para>
  <para type="comment">                 // coord est la destination</para>
  <para>                TBL_Coord coord = ComputeDestination(o, p_.GetLastDice());</para>
  <para type="comment">                 // slot occupée par pièce (adversaire ou amie)</para>
  <para>                if(!IsEmptySlot(coord)) {</para>
  <para>                        int n = GetOccupied(coord).GetColor();</para>
  <para/>
  <para>                        if(n == 1) {if(n != turn) GoHome(p[0], GetOccupied(coord));}</para>
  <para>                        else if(n == 2) {if(n != turn) GoHome(p[1], GetOccupied(coord));}</para>
  <para>                        else if(n == 3) {if(n != turn) GoHome(p[2], GetOccupied(coord));}</para>
  <para>                        else if(n == 4) {if(n != turn) GoHome(p[3], GetOccupied(coord));}</para>
  <para>                        else {</para>
  <para>                                System.out.println("Erreur dans TBL_Game.SubMoveUpdate - conditions GoHome");</para>
  <para>                                scan.nextLine();</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // avancer (update)</para>
  <para>                b.ZeroCoord(o.GetPos());</para>
  <para>                o.SetPos(coord);</para>
  <para>                b.UpdateSituation(coord, GetPlayerNumber(p_), 1);</para>
  <para>                o.SetCount(o.GetCount() + p_.GetLastDice());</para>
  <para>                return o.GetPos();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // exécute le "FINISH" mode</para>
  <para type="function">        private void FinishMode (TBL_Player p_, TBL_Piece o) { </para>
  <para>                int n = 29 - o.GetCount();</para>
  <para>                int m = p_.GetLastDice() - n;</para>
  <para/>
  <para>                switch(p_.GetColor()) {</para>
  <para>                        case 1:     if(m == 0 &amp;&amp; b.GetParams(new TBL_Coord(3, 11)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 0);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(3, 11));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 1 &amp;&amp; b.GetParams(new TBL_Coord(4, 10)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 1);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(4, 10));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 2 &amp;&amp; b.GetParams(new TBL_Coord(5, 9)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 2);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(5, 9));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 3 &amp;&amp; b.GetParams(new TBL_Coord(6, 8)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 3);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(6, 8));</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                        case 2:     if(m == 0 &amp;&amp; b.GetParams(new TBL_Coord(3, 3)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 0);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(3, 3));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 1 &amp;&amp; b.GetParams(new TBL_Coord(4, 4)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 1);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(4, 4));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 2 &amp;&amp; b.GetParams(new TBL_Coord(5, 5)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 2);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(5, 5));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 3 &amp;&amp; b.GetParams(new TBL_Coord(6, 6)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 3);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(6, 6));</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                        case 3:     if(m == 0 &amp;&amp; b.GetParams(new TBL_Coord(11, 3)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 0);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(11, 3));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 1 &amp;&amp; b.GetParams(new TBL_Coord(10, 4)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 1);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(10, 4));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 2 &amp;&amp; b.GetParams(new TBL_Coord(9, 5)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 2);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(9, 5));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 3 &amp;&amp; b.GetParams(new TBL_Coord(8, 6)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 3);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(8, 6));</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                        case 4:     if(m == 0 &amp;&amp; b.GetParams(new TBL_Coord(11, 11)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 0);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(11, 11));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 1 &amp;&amp; b.GetParams(new TBL_Coord(10, 10)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 1);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(10, 10));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 2 &amp;&amp; b.GetParams(new TBL_Coord(9, 9)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 2);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(9, 9));</para>
  <para>                                        }</para>
  <para>                                        else if(m == 3 &amp;&amp; b.GetParams(new TBL_Coord(8, 8)) == 0) {</para>
  <para>                                                UpdateFinishSpot(p_, 1, 3);</para>
  <para>                                                SubFinishUpdate(p_, o, new TBL_Coord(8, 8));</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                        default:    SubMoveUpdate(p_, o);</para>
  <para>                }        </para>
  <para/>
  <para type="comment">						   // OVER - INSÉRER DANS PALMARÈS</para>
  <para>                if(CountFINISH(p_) == 4) {</para>
  <para>                        p_.SetIsActive(false); </para>
  <para>                        GameOver(p_.GetColor());</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // update position pour un "FINISH"</para>
  <para type="function">        private void SubFinishUpdate (TBL_Player p_, TBL_Piece o, TBL_Coord coord) {</para>
  <para>                b.ZeroCoord(o.GetPos());</para>
  <para>                o.SetPos(coord);</para>
  <para>                o.SetIsFinished(true);</para>
  <para>                o.SetStatus(7);</para>
  <para>                b.UpdateSituation(coord, GetPlayerNumber(p_), 7);</para>
  <para>                b.DisplayBoard(p, turn);</para>
  <para>        }</para>
  <para/>
  <para type="comment">        // retourne le numéro de la pièce choisie à jouer</para>
  <para type="function">        private int SubTurnChoice (TBL_Player p_) {</para>
  <para>                int choice = 0;</para>
  <para>                TBL_Piece temp = new TBL_Piece();</para>
  <para/>
  <para>                if(p_.GetIsHuman()) {</para>
  <para>                        do {</para>
  <para>                                System.out.print("\n\t\t\t\033[1;37m # Pièce à jouer : \033[1;33m");</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                                scan.nextLine();</para>
  <para>                                System.out.print("\033[0m");</para>
  <para>                                if(choice == 1) temp = p_.GetPieceByNumber(1);</para>
  <para>                                else if(choice ==2) temp = p_.GetPieceByNumber(2);</para>
  <para>                                else if(choice ==3) temp = p_.GetPieceByNumber(3);</para>
  <para>                                else if(choice ==4) temp = p_.GetPieceByNumber(4);</para>
  <para>                        } </para>
  <para type="comment">                        // vérifie si pièce choisie n'est pas "FINISHED", est RUNNING ou si elle peut "finir"</para>
  <para>                        while(temp.GetIsFinished() || temp.GetStatus() != 1 &amp;&amp; !CanFinish(p_, choice));</para>
  <para>                }</para>
  <para type="comment">                // si AUTO</para>
  <para>                else {</para>
  <para>                        int res = 1;</para>
  <para>                        int[] tab = new int[4];</para>
  <para>                        for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                if(p_.GetPieceByNumber(i+1).GetStatus() == 1) tab[i] = 1;</para>
  <para>                        }</para>
  <para>                        res = RandOneTo_N(4);</para>
  <para>                        while(tab[res-1] != 1 &amp;&amp; !IsFriendlyOnCoord(ComputeDestination(p_.GetPieceByNumber(res), p_.GetLastDice()))) res = RandOneTo_N(4);</para>
  <para>                        return res;</para>
  <para>                }</para>
  <para>                return choice;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // place pièce sur START</para>
  <para type="function">        private void PlaceOnSTART (TBL_Player p_) {</para>
  <para>                TBL_Piece temp;</para>
  <para/>
  <para>                switch(p_.GetColor()) {</para>
  <para type="comment">                        // rouge </para>
  <para>                        case 1:     temp = PickFromHOME(p_);</para>
  <para type="comment">                                        // vérifie si adversaire sur coordonnées</para>
  <para>                                        if(!IsEmptySlot(new TBL_Coord(1, 14))){ // slot occupée</para>
  <para type="comment">                                                // retourner pièce, l'envoyer à sa base</para>
  <para>                                                GoHome(p_, GetOccupied(new TBL_Coord(1, 14))); </para>
  <para>                                        }</para>
  <para type="comment">                                        // updater situation pour pièce courante</para>
  <para>                                        temp.IncrementCount();</para>
  <para>                                        temp.SetStatus(1);</para>
  <para>                                        temp.SetPos(1, 14);</para>
  <para>                                        b.UpdateSituation(temp.GetPos(), 1, 1);</para>
  <para>                                        break;</para>
  <para>                        case 2:     temp = PickFromHOME(p_);</para>
  <para type="comment">                                        // vérifie si adversaire sur coordonnées</para>
  <para>                                        if(!IsEmptySlot(new TBL_Coord(0, 1))){ // slot occupée</para>
  <para type="comment">                                                // retourner pièce, l'envoyer à sa base</para>
  <para>                                                GoHome(p_, GetOccupied(new TBL_Coord(0, 1))); </para>
  <para>                                        }</para>
  <para type="comment">                                        // updater situation pour pièce courante</para>
  <para>                                        temp.IncrementCount();</para>
  <para>                                        temp.SetStatus(1);</para>
  <para>                                        temp.SetPos(0, 1);</para>
  <para>                                        b.UpdateSituation(temp.GetPos(), 2, 1);</para>
  <para>                                        break;</para>
  <para>                        case 3:     temp = PickFromHOME(p_);</para>
  <para type="comment">                                        // vérifie si adversaire sur coordonnées</para>
  <para>                                        if(!IsEmptySlot(new TBL_Coord(13, 0))){ // slot occupée</para>
  <para type="comment">                                                // retourner pièce, l'envoyer à sa base</para>
  <para>                                                GoHome(p_, GetOccupied(new TBL_Coord(13, 0))); </para>
  <para>                                        }</para>
  <para type="comment">                                        // updater situation pour pièce courante</para>
  <para>                                        temp.IncrementCount();</para>
  <para>                                        temp.SetStatus(1);</para>
  <para>                                        temp.SetPos(13, 0);</para>
  <para>                                        b.UpdateSituation(temp.GetPos(), 3, 1);</para>
  <para>                                        break;</para>
  <para>                        case 4:     temp = PickFromHOME(p_);</para>
  <para type="comment">                                        // vérifie si adversaire sur coordonnées</para>
  <para>                                        if(!IsEmptySlot(new TBL_Coord(14, 13))){ // slot occupée</para>
  <para type="comment">                                                // retourner pièce, l'envoyer à sa base</para>
  <para>                                                GoHome(p_, GetOccupied(new TBL_Coord(14, 13))); </para>
  <para>                                        }</para>
  <para type="comment">                                        // updater situation pour pièce courante</para>
  <para>                                        temp.IncrementCount();</para>
  <para>                                        temp.SetStatus(1);</para>
  <para>                                        temp.SetPos(14, 13);</para>
  <para>                                        b.UpdateSituation(temp.GetPos(), 4, 1);</para>
  <para>                                        break;</para>
  <para>                        default:    break;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // vérifie si une slot est libre</para>
  <para type="function">        private boolean IsEmptySlot (TBL_Coord coord) {</para>
  <para>                if(b.GetParams(coord) == 0) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne pièce qui occupe une slot convoitée</para>
  <para type="function">        private TBL_Piece GetOccupied (TBL_Coord coord) {return b.GetPieceByCoord(coord, p);}</para>
  <para/>
  <para type="comment">        // retourne pièce de HOME</para>
  <para type="function">        private TBL_Piece PickFromHOME (TBL_Player p_) {</para>
  <para>                switch(p_.GetColor()) {</para>
  <para>                        case 1:     if(p_.GetPieceByNumber(1).GetPos().equals(new TBL_Coord(5, 12))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 0);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(5, 12));</para>
  <para>                                                return p_.GetPieceByNumber(1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).GetPos().equals(new TBL_Coord(6, 12))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 1);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(6, 12));</para>
  <para>                                                return p_.GetPieceByNumber(2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).GetPos().equals(new TBL_Coord(7, 12))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 2);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(7, 12));</para>
  <para>                                                return p_.GetPieceByNumber(3);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).GetPos().equals(new TBL_Coord(8, 12))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 3);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(8, 12));</para>
  <para>                                                return p_.GetPieceByNumber(4);</para>
  <para>                                        }</para>
  <para>                                        else return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                        case 2:     if(p_.GetPieceByNumber(1).GetPos().equals(new TBL_Coord(2, 6))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 0);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(2, 6));</para>
  <para>                                                return p_.GetPieceByNumber(1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).GetPos().equals(new TBL_Coord(2, 7))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 1);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(2, 7));</para>
  <para>                                                return p_.GetPieceByNumber(2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).GetPos().equals(new TBL_Coord(2, 8))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 2);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(2, 8));</para>
  <para>                                                return p_.GetPieceByNumber(3);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).GetPos().equals(new TBL_Coord(2, 9))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 3);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(2, 9));</para>
  <para>                                                return p_.GetPieceByNumber(4);</para>
  <para>                                        }</para>
  <para>                                        else return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                        case 3:     if(p_.GetPieceByNumber(1).GetPos().equals(new TBL_Coord(8, 2))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 0);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(8, 2));</para>
  <para>                                                return p_.GetPieceByNumber(1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).GetPos().equals(new TBL_Coord(7, 2))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 1);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(7, 2));</para>
  <para>                                                return p_.GetPieceByNumber(2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).GetPos().equals(new TBL_Coord(6, 2))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 2);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(6, 2));</para>
  <para>                                                return p_.GetPieceByNumber(3);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).GetPos().equals(new TBL_Coord(5, 2))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 3);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(5, 2));</para>
  <para>                                                return p_.GetPieceByNumber(4);</para>
  <para>                                        }</para>
  <para>                                        else return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                        case 4:     if(p_.GetPieceByNumber(1).GetPos().equals(new TBL_Coord(12, 9))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 0);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(12, 9));</para>
  <para>                                                return p_.GetPieceByNumber(1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).GetPos().equals(new TBL_Coord(12, 8))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 1);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(12, 8));</para>
  <para>                                                return p_.GetPieceByNumber(2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).GetPos().equals(new TBL_Coord(12, 7))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 2);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(12, 7));</para>
  <para>                                                return p_.GetPieceByNumber(3);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).GetPos().equals(new TBL_Coord(12, 6))) {</para>
  <para>                                                UpdateHomeSpot(p_, 0, 3);</para>
  <para>                                                b.ZeroCoord(new TBL_Coord(12, 6));</para>
  <para>                                                return p_.GetPieceByNumber(4);</para>
  <para>                                        }</para>
  <para>                                        else return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                        default:    return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // update homeSpot</para>
  <para type="function">        private void UpdateHomeSpot (TBL_Player p_, int value, int index) {p_.SetHSpot(value, index);}</para>
  <para/>
  <para type="comment">        // update finishSpot</para>
  <para type="function">        private void UpdateFinishSpot (TBL_Player p_, int value, int index) {p_.SetFSpot(value, index);}</para>
  <para/>
  <para type="comment">        // place une pièce à HOME (player p_ est la couleur de la pièce o "mangée")</para>
  <para type="function">        private void GoHome (TBL_Player p_, TBL_Piece o) {</para>
  <para>                switch(p_.GetColor()) {</para>
  <para type="comment">                        // rouge</para>
  <para>                        case 1:     if(p_.GetPieceByNumber(1).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(5, 12);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 1, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 0);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(6, 12);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 1, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(7, 12);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 1, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(8, 12);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 1, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 3);</para>
  <para>                                        }</para>
  <para>                                        else System.out.println("Erreur : TBL_Game.GoHome : pas une pièce rouge");</para>
  <para>                                        break;</para>
  <para type="comment">                        // vert</para>
  <para>                        case 2:     if(p_.GetPieceByNumber(1).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(2, 6);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 2, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 0);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(2, 7);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 2, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(2, 8);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 2, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(2, 9);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 2, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 3);</para>
  <para>                                        }</para>
  <para>                                        else System.out.println("Erreur : TBL_Game.GoHome : pas une pièce verte");</para>
  <para>                                        break;</para>
  <para type="comment">                        // jaune</para>
  <para>                        case 3:     if(p_.GetPieceByNumber(1).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(8, 2);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 3, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 0);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(7, 2);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 3, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(6, 2);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 3, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(5, 2);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 3, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 3);</para>
  <para>                                        }</para>
  <para>                                        else System.out.println("Erreur : TBL_Game.GoHome : pas une pièce jaune");</para>
  <para>                                        break;</para>
  <para type="comment">                        // bleu</para>
  <para>                        case 4:     if(p_.GetPieceByNumber(1).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(12, 9);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 4, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 0);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(2).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(12, 8);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 4, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 1);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(3).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(12, 7);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 4, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 2);</para>
  <para>                                        }</para>
  <para>                                        else if(p_.GetPieceByNumber(4).equals(o)) {</para>
  <para>                                                b.ZeroCoord(o.GetPos());</para>
  <para>                                                o.SetPos(12, 6);</para>
  <para>                                                o.SetCount(0);</para>
  <para>                                                o.SetStatus(0);</para>
  <para>                                                b.UpdateSituation(o.GetPos(), 4, 0);</para>
  <para>                                                UpdateHomeSpot(p_, 1, 3);</para>
  <para>                                        }</para>
  <para>                                        else System.out.println("Erreur : TBL_Game.GoHome : pas une pièce bleue");</para>
  <para>                                        break;</para>
  <para>                        default:    System.out.println("Erreur dans TBL_Game.GoHome");</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // 1-HOME--&gt;START &amp; 2-avancer</para>
  <para type="function">        private int MenuHomeOrRunning (TBL_Player p_) {</para>
  <para>                int n = 0;</para>
  <para>                if(p_.GetIsHuman()) {</para>
  <para>                        do {</para>
  <para>                                System.out.println("\t\t\t\033[1;100;37mOptions :\033[0m");</para>
  <para>                                if(!FriendlyOnStart() &amp;&amp; GetCountHOME(p_) &gt; 0) System.out.println("\t\t\t \033[1;32m1. Sortir pièce de  sa base\033[0m");</para>
  <para>                                else System.out.println("\t\t\t \033[1;31m** Sortie non disponible **\033[0m");</para>
  <para>                                System.out.println("\t\t\t \033[1;32m2. Avancer pièce\033[0m");</para>
  <para>                                System.out.print("\t\t\t\t\033[1;37m--&gt; \033[1;33m");</para>
  <para>                                n = scan.nextInt();</para>
  <para>                                System.out.print("\033[0m");</para>
  <para>                                scan.nextLine();</para>
  <para>                        }</para>
  <para>                        while(n == 0 || (FriendlyOnStart() &amp;&amp; n == 1));</para>
  <para>                }</para>
  <para>                else { // si AUTO</para>
  <para>                        if(FriendlyOnStart()) return 2;</para>
  <para>                        else {</para>
  <para>                                if(GetCountHOME(p_) &gt; 0) return RandOneTo_N(2);</para>
  <para>                                else return 2;</para>
  <para>                        } </para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // calcule random entre 1 et n inclusivement</para>
  <para type="function">        private int RandOneTo_N (int n) {</para>
  <para>                int result = ((int)(Math.random() * (double)n)) + 1;</para>
  <para>                return result;</para>
  <para>        }</para>
  <para/>
  <para type="comment">        // valide si pièce de même couleur déjà sur START</para>
  <para type="function">        private boolean FriendlyOnStart () {</para>
  <para>                int n;</para>
  <para>                switch(turn) {</para>
  <para>                        case 1:     n = b.GetParams(new TBL_Coord(1, 14));</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 1) return true;</para>
  <para>                                        break;</para>
  <para>                        case 2:     n = b.GetParams(new TBL_Coord(0, 1));</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 2) return true;</para>
  <para>                                        break;</para>
  <para>                        case 3:     n = b.GetParams(new TBL_Coord(13, 0));</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 3) return true;</para>
  <para>                                        break;</para>
  <para>                        case 4:     n = b.GetParams(new TBL_Coord(14, 13));</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 4) return true;</para>
  <para>                                        break;</para>
  <para>                        default:    return false;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide si pièce de même couleur sur coord</para>
  <para type="function">        private boolean IsFriendlyOnCoord (TBL_Coord coord) {</para>
  <para>                int n;</para>
  <para>                switch(turn) {</para>
  <para>                        case 1:     n = b.GetParams(coord);</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 1) return true;</para>
  <para>                                        break;</para>
  <para>                        case 2:     n = b.GetParams(coord);</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 2) return true;</para>
  <para>                                        break;</para>
  <para>                        case 3:     n = b.GetParams(coord);</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 3) return true;</para>
  <para>                                        break;</para>
  <para>                        case 4:     n = b.GetParams(coord);</para>
  <para>                                        if(n != 0 &amp;&amp; (n / 10) == 4) return true;</para>
  <para>                                        break;</para>
  <para>                        default:    return false;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne toutes les pièces RUNNING du joueur courant</para>
  <para type="function">        private TBL_Piece[] GetPlayerPiecesRUNNING (TBL_Player p_) {</para>
  <para>                TBL_Piece[] setR = new TBL_Piece[4];</para>
  <para>                if(p_.GetPieceByNumber(1).GetStatus() == 1 &amp;&amp; </para>
  <para>                !p_.GetPieceByNumber(1).GetIsFinished()) setR[0] = p_.GetPieceByNumber(1);</para>
  <para>                else setR[0] = new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                if(p_.GetPieceByNumber(2).GetStatus() == 1 &amp;&amp;</para>
  <para>                !p_.GetPieceByNumber(2).GetIsFinished()) setR[1] = p_.GetPieceByNumber(2);</para>
  <para>                else setR[1] = new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                if(p_.GetPieceByNumber(3).GetStatus() == 1 &amp;&amp;</para>
  <para>                !p_.GetPieceByNumber(3).GetIsFinished()) setR[2] = p_.GetPieceByNumber(3);</para>
  <para>                else setR[2] = new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                if(p_.GetPieceByNumber(4).GetStatus() == 1 &amp;&amp;</para>
  <para>                !p_.GetPieceByNumber(4).GetIsFinished()) setR[3] = p_.GetPieceByNumber(4);</para>
  <para>                else setR[3] = new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para>                return setR;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne nombre de pièces RUNNING du joueur courant</para>
  <para type="function">        private int GetCountRUNNING (TBL_Player p_) {</para>
  <para>                int count = 0;</para>
  <para>                if(p_.GetPieceByNumber(1).GetStatus() == 1) count++;</para>
  <para>                if(p_.GetPieceByNumber(2).GetStatus() == 1) count++;</para>
  <para>                if(p_.GetPieceByNumber(3).GetStatus() == 1) count++;</para>
  <para>                if(p_.GetPieceByNumber(4).GetStatus() == 1) count++;</para>
  <para>                return count;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne nombre de pièces HOME du joueur courant</para>
  <para type="function">        private int GetCountHOME (TBL_Player p_) {</para>
  <para>                int count = 0;</para>
  <para>                if(p_.GetPieceByNumber(1).GetStatus() == 0) count++;</para>
  <para>                if(p_.GetPieceByNumber(2).GetStatus() == 0) count++;</para>
  <para>                if(p_.GetPieceByNumber(3).GetStatus() == 0) count++;</para>
  <para>                if(p_.GetPieceByNumber(4).GetStatus() == 0) count++;</para>
  <para>                return count;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le joueur selon le tour courant</para>
  <para type="function">        private TBL_Player GetPlayer () {</para>
  <para>                if(turn == 1) return p[0];</para>
  <para>                else if(turn == 2) return p[1];</para>
  <para>                else if(turn == 3) return p[2];</para>
  <para>                else return p[3];</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le numéro de joueur</para>
  <para type="function">        private int GetPlayerNumber (TBL_Player p_) {</para>
  <para>                if(p_.equals(p[0])) return 1;</para>
  <para>                else if(p_.equals(p[1])) return 2;</para>
  <para>                else if(p_.equals(p[2])) return 3;</para>
  <para>                else if(p_.equals(p[3])) return 4;</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // gère le déplacement autour du board</para>
  <para type="function">        private TBL_Coord ComputeDestination (TBL_Piece o, int dice) {</para>
  <para>                int posX = o.GetPos().GetX();</para>
  <para>                int posY = o.GetPos().GetY();</para>
  <para>                TBL_Coord destCoord;</para>
  <para>                int x = 0, y = 0;</para>
  <para/>
  <para type="comment">                // segment coin inférieur gauche - coin supérieur gauche (A-B)</para>
  <para>                if(posX == 0) {</para>
  <para>                        if(dice &lt;= (posY - 1) / 2) { // destination sur même axe</para>
  <para>                                x = 0;</para>
  <para>                                y = posY - 2 * dice;</para>
  <para>                        }</para>
  <para type="comment">                        // destination sur axe adjacent</para>
  <para>                        else {</para>
  <para>                                int n = (posY - 1) / 2;</para>
  <para>                                int m = dice - n;</para>
  <para>                                x = 2 * m - 1;</para>
  <para>                                y = 0;</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment coin supérieur gauche - coin supérieur droit (B-C)</para>
  <para>                if(posY == 0) {</para>
  <para type="comment">                        // destination sur même axe</para>
  <para>                        if(dice &lt;= (13 - posX) / 2) {</para>
  <para>                                x = posX + 2 * dice;</para>
  <para>                                y = 0;</para>
  <para>                        }</para>
  <para type="comment">                        // destination sur axe adjacent</para>
  <para>                        else {</para>
  <para>                                int n = (13 - posX) / 2;</para>
  <para>                                int m = dice - n;</para>
  <para>                                x = 14;</para>
  <para>                                y = 2 * m - 1;</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment coin supérieur droit - coin inférieur droit (C-D)</para>
  <para>                if(posX == 14) {</para>
  <para type="comment">                        // destination sur même axe</para>
  <para>                        if(dice &lt;= (13 - posY) / 2) {</para>
  <para>                                x = 14;</para>
  <para>                                y = posY + 2 * dice;</para>
  <para>                        }</para>
  <para type="comment">                        // destination sur axe adjacent</para>
  <para>                        else {</para>
  <para>                                int n = (13 - posY) / 2;</para>
  <para>                                int m = dice - n;</para>
  <para>                                x = 13 - 2 * (m - 1);</para>
  <para>                                y = 14;</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment coin inférieur droit - coin inférieur gauche (D-A)</para>
  <para>                if(posY == 14) {</para>
  <para type="comment">                        // destination sur même axe</para>
  <para>                        if(dice &lt;= (posX - 1) / 2) {</para>
  <para>                                x = posX - 2 * dice;</para>
  <para>                                y = 14;</para>
  <para>                        }</para>
  <para type="comment">                        // destination sur axe adjacent</para>
  <para>                        else {</para>
  <para>                                int n = (posX - 1) / 2;</para>
  <para>                                int m = dice - n;</para>
  <para>                                x = 0;</para>
  <para>                                y = 13 - 2 * (m - 1);</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                destCoord = new TBL_Coord(x, y);</para>
  <para>                return destCoord;</para>
  <para type="function">                }</para>
  <para/>
  <para type="comment">        // détermine si la pièce choisie peut se rendre dans une case "FINISH" par numéro</para>
  <para type="function">        private boolean CanFinish (TBL_Player p_, int pieceNum) {</para>
  <para>                switch(p_.GetColor()) {</para>
  <para>                        case 1:     if(ComputeDestination(p_.GetPieceByNumber(1), p_.GetLastDice()).equals(new TBL_Coord(3, 11)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(2), p_.GetLastDice()).equals(new TBL_Coord(4, 10)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(3), p_.GetLastDice()).equals(new TBL_Coord(5, 9)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(4), p_.GetLastDice()).equals(new TBL_Coord(6, 8))) return true;</para>
  <para>                        case 2:     if(ComputeDestination(p_.GetPieceByNumber(1), p_.GetLastDice()).equals(new TBL_Coord(3, 3)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(2), p_.GetLastDice()).equals(new TBL_Coord(4, 4)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(3), p_.GetLastDice()).equals(new TBL_Coord(5, 5)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(4), p_.GetLastDice()).equals(new TBL_Coord(6, 6))) return true;</para>
  <para>                        case 3:     if(ComputeDestination(p_.GetPieceByNumber(1), p_.GetLastDice()).equals(new TBL_Coord(11, 3)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(2), p_.GetLastDice()).equals(new TBL_Coord(10, 4)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(3), p_.GetLastDice()).equals(new TBL_Coord(9, 5)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(4), p_.GetLastDice()).equals(new TBL_Coord(8, 6))) return true;</para>
  <para>                        case 4:     if(ComputeDestination(p_.GetPieceByNumber(1), p_.GetLastDice()).equals(new TBL_Coord(11, 11)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(2), p_.GetLastDice()).equals(new TBL_Coord(10, 10)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(3), p_.GetLastDice()).equals(new TBL_Coord(9, 9)) ||</para>
  <para>                                        ComputeDestination(p_.GetPieceByNumber(4), p_.GetLastDice()).equals(new TBL_Coord(8, 8))) return true;</para>
  <para>                        default:    return false;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine le nombre de pièce dans FINISH</para>
  <para type="function">        private int CountFINISH (TBL_Player p_) {</para>
  <para>                int count = 0;</para>
  <para>                for(int i = 0 ; i &lt; p_.GetFSpot().length ; i++) {</para>
  <para>                        if(p_.GetFSpot()[i] == 1) count++;</para>
  <para>                }</para>
  <para>                return count;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne la valeur du roulement de dé (avec affichage) </para>
  <para type="function">        private int Roll (int turn) {</para>
  <para>                switch(turn) {</para>
  <para>                        case 1:     System.out.print("\n\t\t\033[1;37m Appuyer sur une \033[1;36mENTRÉE\033[0m pour \033[1;31mrouler le dé ...\033[0m");</para>
  <para>                                        break;        </para>
  <para>                        case 2:     System.out.print("\n\t\t\033[1;37m Appuyer sur une \033[1;36mENTRÉE\033[0m pour \033[1;32mrouler le dé ...\033[0m");</para>
  <para>                                        break;</para>
  <para>                        case 3:     System.out.print("\n\t\t\033[1;37m Appuyer sur une \033[1;36mENTRÉE\033[0m pour \033[1;33mrouler le dé ...\033[0m");</para>
  <para>                                        break; </para>
  <para>                        case 4:     System.out.print("\n\t\t\033[1;37m Appuyer sur une \033[1;36mENTRÉE\033[0m pour \033[1;34mrouler le dé ...\033[0m");</para>
  <para>                                        break;</para>
  <para>                        default:    System.out.println("Erreur dans TBL_Game.Roll");</para>
  <para>                }</para>
  <para>                scan.nextLine();</para>
  <para>                int n = b.RollNGetDiceResult();</para>
  <para>                GetPlayer().SetLastDice(n);</para>
  <para>                System.out.print("\t\t\t\033[1;37m Vous avez eu un \033[1;91m" + GetPlayer().GetLastDice() + " \033[1;37!!!\033[0m");</para>
  <para>                scan.nextLine();</para>
  <para>                b.UpdateDice(n);</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide positions XX (tour double)</para>
  <para type="function">        private boolean IsXX (TBL_Coord coord) {</para>
  <para>                if(coord.equals(new TBL_Coord(0, 7)) || coord.equals(new TBL_Coord(7, 0)) ||</para>
  <para>                coord.equals(new TBL_Coord(14, 7)) || coord.equals(new TBL_Coord(7, 14))) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // fin de tour + update pour tour suivant</para>
  <para type="function">        private void EndTurn () {</para>
  <para>                if(turn == 1) turn = 2;</para>
  <para>                else if(turn == 2) turn = 3;</para>
  <para>                else if(turn == 3) turn = 4;</para>
  <para>                else if(turn == 4) turn = 1;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // GAME OVER</para>
  <para type="function">        private void GameOver (int color_) {</para>
  <para>                System.out.println("GAME OVER");</para>
  <para>                UpdatePodium(color_);</para>
  <para>                switch(color_) {</para>
  <para>                        case 1:     p[0].SetIsActive(false);</para>
  <para>                                        break;</para>
  <para>                        case 2:     p[1].SetIsActive(false);</para>
  <para>                                        break;</para>
  <para>                        case 3:     p[2].SetIsActive(false);</para>
  <para>                                        break;</para>
  <para>                        case 4:     p[3].SetIsActive(false);</para>
  <para>                                        break;</para>
  <para>                        default:    System.exit(0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // update le podium</para>
  <para type="function">        private void UpdatePodium (int color_) {</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(podium[i] == 0) {</para>
  <para>                                podium[i] = color_;</para>
  <para>                                break;</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le compte de joueurs qui ont terminé</para>
  <para type="function">        private int GetPodiumCount () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(podium[i] != 0) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le podium après la partie</para>
  <para type="function">        private void DisplayPodium () {</para>
  <para>                System.out.println("\n\t\t\t\033[1;32m Palmarès des \033[1;5;31mTROUBLEMAKERS\033[25;0m");</para>
  <para>                System.out.println("\t\t\t\t\033[1;96m 1. \033[0m" + setup.ColorIntToString(podium[0]));</para>
  <para>                System.out.println("\t\t\t\t\033[1;96m 2. \033[0m" + setup.ColorIntToString(podium[1]));</para>
  <para>                System.out.println("\t\t\t\t\033[1;96m 3. \033[0m" + setup.ColorIntToString(podium[2]));</para>
  <para>                System.out.println("\t\t\t\t\033[1;96m 4. \033[0m" + setup.ColorIntToString(GetLastPodium()));</para>
  <para>                System.out.println();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // calcule couleur en 4e position</para>
  <para type="function">        private int GetLastPodium () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        n += podium[i];</para>
  <para>                }</para>
  <para>                if(n == 6) return 4;</para>
  <para>                else if(n == 7) return 3;</para>
  <para>                else if(n == 8) return 2;</para>
  <para>                else if(n == 9) return 1;</para>
  <para>                return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // efface l'affichage de la console</para>
  <para type="function">        public static 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 type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“TBL_Player.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.TBL_Coord;</para>
  <para type="import">import pieces.TBL_Piece;</para>
  <para/>
  <para type="class">public class TBL_Player {</para>
  <para>        private int[] homeSpot, finishSpot;</para>
  <para>        private int color, lastDice;</para>
  <para>        private TBL_Piece o1, o2, o3, o4;</para>
  <para>        private boolean isActive;</para>
  <para>        private boolean isHuman;</para>
  <para/>
  <para type="function">        public TBL_Player () {</para>
  <para>                Init(0);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public TBL_Player (int color_) {</para>
  <para>                Init(color_);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init (int color_) {</para>
  <para>                isActive = false;</para>
  <para>                isHuman = false;</para>
  <para>                lastDice = 0;</para>
  <para type="comment">                // initialise homeSpot à 1</para>
  <para>                homeSpot = new int[4];</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) homeSpot[i] = 1;</para>
  <para type="comment">                // initialise finishSpot à 0</para>
  <para>                finishSpot = new int[4];</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) finishSpot[i] = 0;</para>
  <para/>
  <para>                color = color_;</para>
  <para>                switch(color) {</para>
  <para>                        case 1:     o1 = new TBL_Piece(new TBL_Coord(5, 12), color);</para>
  <para>                                        o2 = new TBL_Piece(new TBL_Coord(6, 12), color);</para>
  <para>                                        o3 = new TBL_Piece(new TBL_Coord(7, 12), color);</para>
  <para>                                        o4 = new TBL_Piece(new TBL_Coord(8, 12), color);</para>
  <para>                                        break;</para>
  <para>                        case 2:     o1 = new TBL_Piece(new TBL_Coord(2, 6), color);</para>
  <para>                                        o2 = new TBL_Piece(new TBL_Coord(2, 7), color);</para>
  <para>                                        o3 = new TBL_Piece(new TBL_Coord(2, 8), color);</para>
  <para>                                        o4 = new TBL_Piece(new TBL_Coord(2, 9), color);</para>
  <para>                                        break;</para>
  <para>                        case 3:     o1 = new TBL_Piece(new TBL_Coord(8, 2), color);</para>
  <para>                                        o2 = new TBL_Piece(new TBL_Coord(7, 2), color);</para>
  <para>                                        o3 = new TBL_Piece(new TBL_Coord(6, 2), color);</para>
  <para>                                        o4 = new TBL_Piece(new TBL_Coord(5, 2), color);</para>
  <para>                                        break;</para>
  <para>                        case 4:     o1 = new TBL_Piece(new TBL_Coord(12, 9), color);</para>
  <para>                                        o2 = new TBL_Piece(new TBL_Coord(12, 8), color);</para>
  <para>                                        o3 = new TBL_Piece(new TBL_Coord(12, 7), color);</para>
  <para>                                        o4 = new TBL_Piece(new TBL_Coord(12, 6), color);</para>
  <para>                                        break;</para>
  <para>                        default:    System.out.println("Problème dans TBL_Player.Init()");</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne la pièce selon coordonnées</para>
  <para type="function">        public TBL_Piece GetPieceByCoord (TBL_Coord coord) {</para>
  <para>                if(o1.GetPos().equals(coord)) return o1;</para>
  <para>                else if(o2.GetPos().equals(coord)) return o2;</para>
  <para>                else if(o3.GetPos().equals(coord)) return o3;</para>
  <para>                else if(o4.GetPos().equals(coord)) return o4;</para>
  <para>                else return new TBL_Piece(new TBL_Coord(-1, -1), 0); // couleur 0 ET coord(-1,-1) si erreur</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne la pièce selon son numéro</para>
  <para type="function">        public TBL_Piece GetPieceByNumber (int n) {</para>
  <para>                if(n == 1) return o1;</para>
  <para>                else if(n == 2) return o2;</para>
  <para>                else if(n == 3) return o3;</para>
  <para>                else if(n == 4) return o4;</para>
  <para>                else return new TBL_Piece(new TBL_Coord(-1, -1), 0);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void RetrieveFromHOME (int index) {homeSpot[index] = 0;}</para>
  <para type="function">        public void PlaceIntoHOME (int index) {homeSpot[index] = 1;}</para>
  <para/>
  <para type="function">        public void PlaceIntoFINISH (int index) {finishSpot[index] = 1;}</para>
  <para/>
  <para type="function">        public boolean GetIsActive () {return isActive;}</para>
  <para type="function">        public void SetIsActive (boolean isActive_) {isActive = isActive_;}</para>
  <para/>
  <para type="function">        public boolean GetIsHuman () {return isHuman;}</para>
  <para type="function">        public void SetIsHuman (boolean isHuman_) {isHuman = isHuman_;}</para>
  <para/>
  <para type="function">        public int GetColor () {return color;}</para>
  <para type="function">        public void SetColor (int color_) { color = color_;}</para>
  <para/>
  <para type="function">        public int GetLastDice () {return lastDice;}</para>
  <para type="function">        public void SetLastDice (int n) {lastDice = n;}</para>
  <para/>
  <para type="function">        public int[] GetFSpot () {return finishSpot;}</para>
  <para type="function">        public void SetFSpot (int value, int index) {finishSpot[index] = value;}</para>
  <para type="function">        public int[] GetHSpot () {return homeSpot;}</para>
  <para type="function">        public void SetHSpot (int value, int index) {homeSpot[index] = value;}</para>
  <para/>
  <para type="comment">        // valide si des pièces RUNNING présentes pour joueur</para>
  <para type="function">        public boolean HasRUNNING (TBL_Player p_) {</para>
  <para>                if(p_.o1.GetStatus() == 1) return true;</para>
  <para>                else if(p_.o2.GetStatus() == 1) return true;</para>
  <para>                else if(p_.o3.GetStatus() == 1) return true;</para>
  <para>                else if(p_.o4.GetStatus() == 1) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“TBL_Setup.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import java.util.Scanner;</para>
  <para/>
  <para type="class">public class TBL_Setup {</para>
  <para>        private TBL_Board b;</para>
  <para>        private TBL_Player[] p;</para>
  <para>        private Scanner scan;</para>
  <para>        private int first;</para>
  <para/>
  <para type="function">        public TBL_Setup () {</para>
  <para>                Init();</para>
  <para>                Init2();</para>
  <para>                Menu1();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                scan = new Scanner(System.in);</para>
  <para>                TBL_Game.Clear();</para>
  <para>                Splash();</para>
  <para>                scan.nextLine();</para>
  <para>                first = 0;</para>
  <para>                b = new TBL_Board();</para>
  <para>                p = new TBL_Player[4];</para>
  <para>                for(int i = 0; i &lt; 4 ; i++) p[i] = new TBL_Player((i+1));</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // update board avec les positions des pièces de tous les joueurs</para>
  <para type="function">        private void Init2 () {</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        for(int j = 1 ; j &lt;=4 ; j++) {</para>
  <para>                                b.UpdateSituation(p[i].GetPieceByNumber(j).GetPos(), (i+1), 0);</para>
  <para>                        } </para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // menu de sélection de joueurs</para>
  <para type="function">        private void Menu1 () {</para>
  <para>                String choice = "";</para>
  <para>        </para>
  <para>                System.out.println("\033[1;37m** Sélectionner une couleur et/ou adversaires **\033[0m\n");</para>
  <para type="comment">                // rouge</para>
  <para>                do {</para>
  <para>                        System.out.print("\t\033[1;37mJoueur \033[1;31mROUGE\033[0m \033[35m(H[umain] / A[uto]) \033[1;37m: \033[1;36m");</para>
  <para>                        choice = scan.nextLine().toLowerCase();</para>
  <para>                }</para>
  <para>                while(!ValidateMenu1Choice(choice));</para>
  <para>                if(choice.equals("h")) {</para>
  <para>                        p[0].SetIsHuman(true);</para>
  <para>                }</para>
  <para>                p[0].SetIsActive(true);</para>
  <para>                p[0].SetColor(1);</para>
  <para>                System.out.println("\t\033[1;37mDé roulé : \033[5;1;31m" + RollForTurn(p[0]) + "\033[25;0m");</para>
  <para/>
  <para type="comment">                // vert</para>
  <para>                choice = "";</para>
  <para>                do {</para>
  <para>                        System.out.print("\t\033[1;37mJoueur \033[1;32mVERT\033[0m \033[35m(H[umain] / A[uto]) \033[1;37m: \033[1;36m");</para>
  <para>                        choice = scan.nextLine().toLowerCase();</para>
  <para>                }</para>
  <para>                while(!ValidateMenu1Choice(choice));</para>
  <para>                if(choice.equals("h")) {</para>
  <para>                        p[1].SetIsHuman(true);</para>
  <para>                }</para>
  <para>                p[1].SetIsActive(true);</para>
  <para>                p[1].SetColor(2);</para>
  <para>                System.out.println("\t\033[1;37mDé roulé : \033[5;1;31m" + RollForTurn(p[1]) + "\033[25;0m");</para>
  <para/>
  <para type="comment">                // jaune</para>
  <para>                choice = "";</para>
  <para>                do {</para>
  <para>                        System.out.print("\t\033[1;37mJoueur \033[1;33mJAUNE\033[0m \033[35m(H[umain] / A[uto]) \033[1;37m: \033[1;36m");</para>
  <para>                        choice = scan.nextLine().toLowerCase();</para>
  <para>                }</para>
  <para>                while(!ValidateMenu1Choice(choice));</para>
  <para>                if(choice.equals("h")) {</para>
  <para>                        p[2].SetIsHuman(true);</para>
  <para>                }</para>
  <para>                p[2].SetIsActive(true);</para>
  <para>                p[2].SetColor(3);</para>
  <para>                System.out.println("\t\033[1;37mDé roulé : \033[5;1;31m" + RollForTurn(p[2]) + "\033[25;0m");</para>
  <para/>
  <para type="comment">                // bleu</para>
  <para>                choice = "";</para>
  <para>                do {</para>
  <para>                        System.out.print("\t\033[1;37mJoueur \033[1;34mBLEU\033[0m \033[35m(H[umain] / A[uto]) \033[1;37m: \033[1;36m");</para>
  <para>                        choice = scan.nextLine().toLowerCase();</para>
  <para>                }</para>
  <para>                while(!ValidateMenu1Choice(choice));</para>
  <para>                if(choice.equals("h")) {</para>
  <para>                        p[3].SetIsHuman(true);</para>
  <para>                }</para>
  <para>                p[3].SetIsActive(true);</para>
  <para>                p[3].SetColor(4);</para>
  <para>                System.out.println("\t\033[1;37mDé roulé : \033[5;1;31m" + RollForTurn(p[3]) + "\033[25;0m");</para>
  <para/>
  <para>                System.out.print("\t\t\033[1;37mLe joueur " + ColorIntToString(WhoPlaysFirst(p)) + " \033[1;37mdébute ! ...\033[0m");</para>
  <para>                scan.nextLine();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le nom de couleur (coloré) selon int</para>
  <para type="function">        public String ColorIntToString (int n) {</para>
  <para>                String s = "";</para>
  <para>                if(n == 1) {</para>
  <para>                        s = "\033[5;1;31mROUGE\033[25;1;0m";</para>
  <para>                        return s;</para>
  <para>                }</para>
  <para>                else if(n == 2) {</para>
  <para>                        s = "\033[5;1;32mVERT\033[25;0m";</para>
  <para>                        return s;</para>
  <para>                }</para>
  <para>                else if(n == 3) {</para>
  <para>                        s = "\033[5;1;33mJAUNE\033[25;0m";</para>
  <para>                        return s;</para>
  <para>                }</para>
  <para>                else if(n == 4) {</para>
  <para>                        s = "\033[5;1;34mBLEU\033[25;0m";</para>
  <para>                        return s;</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        s = "TROUBLE !!!"; </para>
  <para>                        return s;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // roule le dé </para>
  <para type="function">        private int RollForTurn (TBL_Player p_) {</para>
  <para>                p_.SetLastDice(b.RollNGetDiceResult());</para>
  <para>                return p_.GetLastDice();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine quel joueur commence une partie</para>
  <para type="function">        private int WhoPlaysFirst (TBL_Player[] p) {</para>
  <para>                int max1 = 0;</para>
  <para>                int max2 = 0;</para>
  <para>                if(p[0].GetLastDice() &gt;= p[1].GetLastDice()) max1 = 1;</para>
  <para>                else max1 = 2;</para>
  <para>                if(p[2].GetLastDice() &gt;= p[3].GetLastDice()) max2 = 1;</para>
  <para>                else max2 = 2;</para>
  <para>                if(max1 == 1 &amp;&amp; max2 == 1) {</para>
  <para>                        if(p[0].GetLastDice() &gt;= p[2].GetLastDice()) return first = 1;</para>
  <para>                        else return first = 3;</para>
  <para>                }</para>
  <para>                else if(max1 == 1 &amp;&amp; max2 == 2) {</para>
  <para>                        if(p[0].GetLastDice() &gt;= p[3].GetLastDice()) return first = 1;</para>
  <para>                        else return first = 4;</para>
  <para>                }</para>
  <para>                else if(max1 == 2 &amp;&amp; max2 == 1) {</para>
  <para>                        if(p[1].GetLastDice() &gt;= p[2].GetLastDice()) return first = 2;</para>
  <para>                        else return first = 3;</para>
  <para>                }</para>
  <para>                else if(max1 == 2 &amp;&amp; max2 == 2) {</para>
  <para>                        if(p[1].GetLastDice() &gt;= p[3].GetLastDice()) return first = 2;</para>
  <para>                        else return first = 4;</para>
  <para>                }</para>
  <para>                else return first = 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le numéro du premier joueur</para>
  <para type="function">        public int GetFirstToPlay () {return first;}</para>
  <para/>
  <para type="comment">        // valide le choix humain vs auto</para>
  <para type="function">        private boolean ValidateMenu1Choice (String s) {</para>
  <para>                if(s.length() &gt; 1) return false;</para>
  <para>                if(s.equals("h") || s.equals("a")) return true;</para>
  <para>                else return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne board</para>
  <para type="function">        public TBL_Board GetBoard () {return b;}</para>
  <para/>
  <para type="comment">        // retourne les 4 joueurs</para>
  <para type="function">        public TBL_Player[] GetPlayers () {return p;}</para>
  <para/>
  <para type="comment">        // splash</para>
  <para type="function">        public void Splash () {</para>
  <para>        System.out.println("\033[1;31m################ \033[1;33m ######### \033[1;32m ##### \033[1;34m#### #### \033[1;31m############ \033[1;32m############\033[0m");</para>
  <para>                System.out.println("\033[1;31m################ \033[1;33m ############# \033[1;32m #### #### \033[1;34m#### #### \033[1;31m############# \033[1;32m############\033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m##### ## \033[1;32m#### #### \033[1;34m#### #### \033[1;31m#### ### \033[1;32m### \033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m#### ### \033[1;32m### ### \033[1;34m#### #### \033[1;31m#### ### \033[1;32m### \033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m#### ######## \033[1;32m### ### \033[1;34m#### #### \033[1;31m############ \033[1;32m########## \033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m#### #### \033[1;32m### ### \033[1;34m#### #### \033[1;31m############## \033[1;32m### \033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m#### ### \033[1;32m#### ### \033[1;34m #### #### \033[1;31m#### ### \033[1;32m### \033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m#### ### \033[1;32m #### #### \033[1;34m ########### \033[1;31m#### #### \033[1;32m############\033[0m");</para>
  <para>                System.out.println("\033[1;31m #### \033[1;33m#### ### \033[1;32m ##### \033[1;34m ####### \033[1;31m############# \033[1;32m############\033[0m");</para>
  <para>                System.out.println("\033[5;101m \033[25;0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### ### \033[1;31m ##### \033[1;33m ####### \033[1;34m############# \033[1;33m############\033[0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### ### \033[1;31m #### #### \033[1;33m ########### \033[1;34m#### #### \033[1;33m############\033[0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### ### \033[1;31m#### ### \033[1;33m #### #### \033[1;34m#### ### \033[1;33m### \033[0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### #### \033[1;31m### ### \033[1;33m#### #### \033[1;34m############## \033[1;33m### \033[0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### ######## \033[1;31m### ### \033[1;33m#### #### \033[1;34m############ \033[1;33m########## \033[0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### ### \033[1;31m### ### \033[1;33m#### #### \033[1;34m#### ### \033[1;33m### \033[0m");</para>
  <para>                System.out.println("\033[1;32m #### \033[1;34m#### ## \033[1;31m#### #### \033[1;33m#### #### \033[1;34m#### ### \033[1;33m### \033[0m");</para>
  <para>                System.out.println("\033[1;32m################ \033[1;34m############# \033[1;31m #### #### \033[1;33m#### #### \033[1;34m############# \033[1;33m############\033[0m");</para>
  <para>                System.out.println("\033[1;32m################ \033[1;34m######### \033[1;31m ##### \033[1;33m#### #### \033[1;34m############ \033[1;33m############\033[0m");</para>
  <para/>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Trouble.java”</para>
  <para/>
  <para type="import">import game.TBL_Game;</para>
  <para/>
  <para type="class">public class Trouble {</para>
  <para type="function">        public static void main (String[] args) {</para>
  <para>                TBL_Game game = new TBL_Game();</para>
  <para>                while(true) game.PlayTurn();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
</article>
