<?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>Sorry!</dc:title>
  <dc:description>Code source d'une reproduction en mode console du jeu de table Sorry!</dc:description>
  <dc:creator>Jean-Frédéric Guilbault</dc:creator>
  <dc:subject>Sorry!</dc:subject>
  <para type="filename">“BoardContext.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para/>
  <para type="class">public class BoardContext {</para>
  <para>        private BoardStrategy bs;</para>
  <para>        private Board b;</para>
  <para>        private Coord coord;</para>
  <para/>
  <para type="function">        public BoardContext (BoardStrategy strategy, Board b_, Coord c) {</para>
  <para>                bs = strategy;</para>
  <para>                b = b_;</para>
  <para>                coord = c;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public String print (int n, boolean slide) {return bs.print(b.readNumber(coord), slide);}</para>
  <para type="function">        public void setStrategy (BoardStrategy strategy) {bs = strategy;}</para>
  <para type="function">        public void setCoord (Coord coord_) {coord = coord_;}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardStrategy.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="import">import game.GameConstants;</para>
  <para/>
  <para type="class">public interface BoardStrategy extends GameConstants {</para>
  <para type="function">        String print (int n, boolean onOwnSlide);</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardStrategyDEFAULT.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="class">public class BoardStrategyDEFAULT implements BoardStrategy {</para>
  <para type="function">        public String print (int n, boolean onOwnSlide) { // n - numéro de pion (1, 2, 3 ou 4)</para>
  <para>                return E + "*" + N;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardStrategyBLUE.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="class">public class BoardStrategyBLUE implements BoardStrategy {</para>
  <para type="comment">        // n - numéro de pion (1, 2, 3 ou 4)</para>
  <para type="function">        public String print (int n, boolean onOwnSlide) {</para>
  <para>                if(onOwnSlide) return BK + Integer.toString(n) + N;</para>
  <para>                else return B + Integer.toString(n) + N;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardStrategyGREEN.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="class">public class BoardStrategyGREEN implements BoardStrategy {</para>
  <para type="comment">        // n - numéro de pion (1, 2, 3 ou 4)</para>
  <para type="function">        public String print (int n, boolean onOwnSlide) {</para>
  <para>                if(onOwnSlide) return BK + Integer.toString(n) + N;</para>
  <para>                else return G + Integer.toString(n) + N;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardStrategyRED.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="class">public class BoardStrategyRED implements BoardStrategy {</para>
  <para type="comment">        // n - numéro de pion (1, 2, 3 ou 4)</para>
  <para type="function">        public String print (int n, boolean onOwnSlide) {</para>
  <para>                if(onOwnSlide) return BK + Integer.toString(n) + N;</para>
  <para>                else return R + Integer.toString(n) + N;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardStrategyYELLOW.java”</para>
  <para/>
  <para type="package">package board.boardalgo;</para>
  <para/>
  <para type="class">public class BoardStrategyYELLOW implements BoardStrategy {</para>
  <para type="comment">        // n - numéro de pion (1, 2, 3 ou 4)</para>
  <para type="function">        public String print (int n, boolean onOwnSlide) {</para>
  <para>                if(onOwnSlide) return BK + Integer.toString(n) + N;</para>
  <para>                else return Y + Integer.toString(n) + N;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeContext.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class GoHomeContext {</para>
  <para>        private GoHomeStrategy strategy;</para>
  <para>        private Coord coord;</para>
  <para>        private Board board;</para>
  <para>        private Player[] p;</para>
  <para/>
  <para type="function">        public GoHomeContext (GoHomeStrategy strategy_, Coord start, Board b, Player[] p_) {</para>
  <para>                strategy = strategy_;</para>
  <para>                coord = start;</para>
  <para>                board = b;</para>
  <para>                p = p_;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void setStrategy (GoHomeStrategy strategy_) {</para>
  <para>                strategy = strategy_;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void operation () {</para>
  <para>                strategy.algorithm(coord, p, board);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeStrategy.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import game.GameConstants;</para>
  <para/>
  <para type="class">public interface GoHomeStrategy extends GameConstants {</para>
  <para type="function">        void algorithm (Coord start, Player[] p, Board b);</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeStrategyDEFAULT.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class GoHomeStrategyDEFAULT implements GoHomeStrategy {</para>
  <para type="function">        public void algorithm (Coord start, Player[] p, Board b) {}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeStrategyBLUE.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class GoHomeStrategyBLUE implements GoHomeStrategy {</para>
  <para type="function">        public void algorithm (Coord start, Player[] p, Board b) {</para>
  <para>                int x = start.getX();</para>
  <para/>
  <para>                if(start.equals(BSHORT_START)) {</para>
  <para>                        for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                if(b.getSituation()[x-i][0] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[x-i][0]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(start.equals(BLONG_START)) {</para>
  <para>                        for(int i = 0 ; i &lt; 5 ; i++) {</para>
  <para>                                if(b.getSituation()[x-i][0] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[x-i][0]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        } </para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeStrategyGREEN.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class GoHomeStrategyGREEN implements GoHomeStrategy {</para>
  <para type="function">        public void algorithm (Coord start, Player[] p, Board b) {</para>
  <para>                int x = start.getX();</para>
  <para/>
  <para>                if(start.equals(GSHORT_START)) {</para>
  <para>                        for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                if(b.getSituation()[x+i][15] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[x+i][15]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(start.equals(GLONG_START)){</para>
  <para>                        for(int i = 0 ; i &lt; 5 ; i++) {</para>
  <para>                                if(b.getSituation()[x+i][15] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[x+i][15]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeStrategyRED.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class GoHomeStrategyRED implements GoHomeStrategy {</para>
  <para type="function">        public void algorithm (Coord start, Player[] p, Board b) {</para>
  <para>                int y = start.getY();</para>
  <para/>
  <para>                if(start.equals(RSHORT_START)) {</para>
  <para>                        for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                if(b.getSituation()[15][y-i] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[15][y-i]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(start.equals(RLONG_START)){</para>
  <para>                        for(int i = 0 ; i &lt; 5 ; i++) {</para>
  <para>                                if(b.getSituation()[15][y-i] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[15][y-i]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoHomeStrategyYELLOW.java”</para>
  <para/>
  <para type="package">package board.home;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class GoHomeStrategyYELLOW implements GoHomeStrategy {</para>
  <para type="function">        public void algorithm (Coord start, Player[] p, Board b) {</para>
  <para>                int y = start.getY();</para>
  <para/>
  <para>                if(start.equals(YSHORT_START)) {</para>
  <para>                        for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                if(b.getSituation()[0][y+i] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[0][y+i]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(start.equals(YLONG_START)){</para>
  <para>                        for(int i = 0 ; i &lt; 5 ; i++) {</para>
  <para>                                if(b.getSituation()[15][y-i] != 0) {</para>
  <para>                                        b.goSTART(b.convertIntToPawn(p, b.getSituation()[15][y-i]));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartContext.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.*;</para>
  <para/>
  <para type="class">public class GoStartContext {</para>
  <para>        private GoStartStrategy strategy;</para>
  <para>        private Player[] p;</para>
  <para>        private int color;</para>
  <para>        private Board b;</para>
  <para/>
  <para type="function">        public GoStartContext (GoStartStrategy strategy_, Player[] p_, Board b_, int color_) {</para>
  <para>                strategy = strategy_;</para>
  <para>                p = p_;</para>
  <para>                color = color_;</para>
  <para>                b = b_;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void setStrategy (GoStartStrategy strategy_) {</para>
  <para>                strategy = strategy_;</para>
  <para type="function">        } </para>
  <para/>
  <para type="function">        public void operation () {</para>
  <para>                strategy.algorithm(p, color, b);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartStrategy.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.Board;</para>
  <para type="import">import game.GameConstants;</para>
  <para/>
  <para type="class">public interface GoStartStrategy extends GameConstants{</para>
  <para type="function">        void algorithm (Player[] p, int color, Board b);</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartStrategyDEFAULT.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.Board;</para>
  <para/>
  <para type="class">public class GoStartStrategyDEFAULT implements GoStartStrategy {</para>
  <para type="function">        public void algorithm (Player[] p, int color, Board b) {}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartStrategyBLUE.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.Board;</para>
  <para/>
  <para type="class">public class GoStartStrategyBLUE implements GoStartStrategy {</para>
  <para type="function">        public void algorithm (Player[] p, int color, Board b) {</para>
  <para>                if(!p[1].getSet()[0].getIsActive() &amp;&amp; !p[1].getSet()[0].getIsHome()) {</para>
  <para>                        p[1].getSet()[0].setPos(BSTART);</para>
  <para>                        p[1].getSet()[0].setIsActive(true);</para>
  <para>                        b.update(p[1].getSet()[0]);</para>
  <para>                        b.update(BBASE1, 0);</para>
  <para>                }</para>
  <para>                else if(!p[1].getSet()[1].getIsActive() &amp;&amp; !p[1].getSet()[1].getIsHome()) {</para>
  <para>                        p[1].getSet()[1].setPos(BSTART);</para>
  <para>                        p[1].getSet()[1].setIsActive(true);</para>
  <para>                        b.update(p[1].getSet()[1]);</para>
  <para>                        b.update(BBASE2, 0);</para>
  <para>                }</para>
  <para>                else if(!p[1].getSet()[2].getIsActive() &amp;&amp; !p[1].getSet()[2].getIsHome()) {</para>
  <para>                        p[1].getSet()[2].setPos(BSTART);</para>
  <para>                        p[1].getSet()[2].setIsActive(true);</para>
  <para>                        b.update(p[1].getSet()[2]);</para>
  <para>                        b.update(BBASE3, 0);</para>
  <para>                }</para>
  <para>                else if(!p[1].getSet()[3].getIsActive() &amp;&amp; !p[1].getSet()[3].getIsHome()) {</para>
  <para>                        p[1].getSet()[3].setPos(BSTART);</para>
  <para>                        p[1].getSet()[3].setIsActive(true);</para>
  <para>                        b.update(p[1].getSet()[3]);</para>
  <para>                        b.update(BBASE4, 0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartStrategyGREEN.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.Board;</para>
  <para/>
  <para type="class">public class GoStartStrategyGREEN implements GoStartStrategy {</para>
  <para type="function">        public void algorithm (Player[] p, int color, Board b) {</para>
  <para>                if(!p[3].getSet()[0].getIsActive() &amp;&amp; !p[3].getSet()[0].getIsHome()) {</para>
  <para>                        p[3].getSet()[0].setPos(GSTART);</para>
  <para>                        p[3].getSet()[0].setIsActive(true);</para>
  <para>                        b.update(p[3].getSet()[0]);</para>
  <para>                        b.update(GBASE1, 0);</para>
  <para>                }</para>
  <para>                else if(!p[3].getSet()[1].getIsActive() &amp;&amp; !p[3].getSet()[1].getIsHome()) {</para>
  <para>                        p[3].getSet()[1].setPos(GSTART);</para>
  <para>                        p[3].getSet()[1].setIsActive(true);</para>
  <para>                        b.update(p[3].getSet()[1]);</para>
  <para>                        b.update(GBASE2, 0);</para>
  <para>                }</para>
  <para>                else if(!p[3].getSet()[2].getIsActive() &amp;&amp; !p[3].getSet()[2].getIsHome()) {</para>
  <para>                        p[3].getSet()[2].setPos(GSTART);</para>
  <para>                        p[3].getSet()[2].setIsActive(true);</para>
  <para>                        b.update(p[3].getSet()[2]);</para>
  <para>                        b.update(GBASE3, 0);</para>
  <para>                }</para>
  <para>                else if(!p[3].getSet()[3].getIsActive() &amp;&amp; !p[3].getSet()[3].getIsHome()) {</para>
  <para>                        p[3].getSet()[3].setPos(GSTART);</para>
  <para>                        p[3].getSet()[3].setIsActive(true);</para>
  <para>                        b.update(p[3].getSet()[3]);</para>
  <para>                        b.update(GBASE4, 0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartStrategyRED.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.Board;</para>
  <para/>
  <para type="class">public class GoStartStrategyRED implements GoStartStrategy {</para>
  <para type="function">        public void algorithm (Player[] p, int color, Board b) {</para>
  <para>                if(!p[0].getSet()[0].getIsActive() &amp;&amp; !p[0].getSet()[0].getIsHome()) {</para>
  <para>                        p[0].getSet()[0].setPos(RSTART);</para>
  <para>                        p[0].getSet()[0].setIsActive(true);</para>
  <para>                        b.update(p[0].getSet()[0]);</para>
  <para>                        b.update(RBASE1, 0);</para>
  <para>                }</para>
  <para>                else if(!p[0].getSet()[1].getIsActive() &amp;&amp; !p[0].getSet()[1].getIsHome()) {</para>
  <para>                        p[0].getSet()[1].setPos(RSTART);</para>
  <para>                        p[0].getSet()[1].setIsActive(true);</para>
  <para>                        b.update(p[0].getSet()[1]);</para>
  <para>                        b.update(RBASE2, 0);</para>
  <para>                }</para>
  <para>                else if(!p[0].getSet()[2].getIsActive() &amp;&amp; !p[0].getSet()[2].getIsHome()) {</para>
  <para>                        p[0].getSet()[2].setPos(RSTART);</para>
  <para>                        p[0].getSet()[2].setIsActive(true);</para>
  <para>                        b.update(p[0].getSet()[2]);</para>
  <para>                        b.update(RBASE3, 0);</para>
  <para>                }</para>
  <para>                else if(!p[0].getSet()[3].getIsActive() &amp;&amp; !p[0].getSet()[3].getIsHome()) {</para>
  <para>                        p[0].getSet()[3].setPos(RSTART);</para>
  <para>                        p[0].getSet()[3].setIsActive(true);</para>
  <para>                        b.update(p[0].getSet()[3]);</para>
  <para>                        b.update(RBASE4, 0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GoStartStrategyYELLOW.java”</para>
  <para/>
  <para type="package">package board.start;</para>
  <para/>
  <para type="import">import player.Player;</para>
  <para type="import">import board.Board;</para>
  <para/>
  <para type="class">public class GoStartStrategyYELLOW implements GoStartStrategy {</para>
  <para type="function">        public void algorithm (Player[] p, int color, Board b) {</para>
  <para>                if(!p[2].getSet()[0].getIsActive() &amp;&amp; !p[2].getSet()[0].getIsHome()) {</para>
  <para>                        p[2].getSet()[0].setPos(YSTART);</para>
  <para>                        p[2].getSet()[0].setIsActive(true);</para>
  <para>                        b.update(p[2].getSet()[0]);</para>
  <para>                        b.update(YBASE1, 0);</para>
  <para>                }</para>
  <para>                else if(!p[2].getSet()[1].getIsActive() &amp;&amp; !p[2].getSet()[0].getIsHome()) {</para>
  <para>                        p[2].getSet()[1].setPos(YSTART);</para>
  <para>                        p[2].getSet()[1].setIsActive(true);</para>
  <para>                        b.update(p[2].getSet()[1]);</para>
  <para>                        b.update(YBASE2, 0);</para>
  <para>                }</para>
  <para>                else if(!p[2].getSet()[2].getIsActive() &amp;&amp; !p[2].getSet()[0].getIsHome()) {</para>
  <para>                        p[2].getSet()[2].setPos(YSTART);</para>
  <para>                        p[2].getSet()[2].setIsActive(true);</para>
  <para>                        b.update(p[2].getSet()[2]);</para>
  <para>                        b.update(YBASE3, 0);</para>
  <para>                }</para>
  <para>                else if(!p[2].getSet()[3].getIsActive() &amp;&amp; !p[2].getSet()[0].getIsHome()) {</para>
  <para>                        p[2].getSet()[3].setPos(YSTART);</para>
  <para>                        p[2].getSet()[3].setIsActive(true);</para>
  <para>                        b.update(p[2].getSet()[3]);</para>
  <para>                        b.update(YBASE4, 0);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Board.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="import">import deck.*;</para>
  <para type="import">import game.GameConstants;</para>
  <para type="import">import game.cardalgo.*;</para>
  <para type="import">import piece.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import board.boardalgo.*;</para>
  <para type="import">import board.home.*;</para>
  <para type="import">import board.start.*;</para>
  <para/>
  <para type="comment">/** Context strategy :</para>
  <para type="comment">* 0 - normal (NORMAL) BoardStrategyNORMAL</para>
  <para type="comment">* 1 - rouge (RED) BoardStrategyRED</para>
  <para type="comment">* 2 - bleu (BLUE) BoardStrategyBLUE</para>
  <para type="comment">* 3 - jaune (YELLOW) BoardStrategyYELLOW</para>
  <para type="comment">* 4 - vert (GREEN) BoardStrategyGREEN</para>
  <para type="comment">*/</para>
  <para/>
  <para type="class">public class Board implements BoardParams, GameConstants {</para>
  <para>        private BoardContext colorContext;</para>
  <para>        private BoardStrategy colorStrategy; </para>
  <para/>
  <para>        private PickContext algoContext;</para>
  <para/>
  <para>        private GoHomeContext goHomeContext;</para>
  <para>        private GoHomeStrategy goHomeStrategy;</para>
  <para/>
  <para>        private GoStartContext goStartContext;</para>
  <para>        private GoStartStrategy goStartStrategy;</para>
  <para/>
  <para>        private CardFactory cardFactory = new CardFactoryDown();</para>
  <para>        private UpDeck dropDeck = UpDeck.getInstance();</para>
  <para>        private DownDeck pickDeck = cardFactory.createDeck();</para>
  <para>        private Card picked;</para>
  <para/>
  <para>        private int[][] situation;</para>
  <para>        private int turn;</para>
  <para/>
  <para type="function">        public Board () {</para>
  <para>                Init();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para type="comment">                // initialisation de situation et visual</para>
  <para>                situation = new int[16][16];</para>
  <para>                for(int i = 0 ; i &lt; 16 ; i++) {</para>
  <para>                        for(int j = 0 ; j &lt; 16 ; j++) {</para>
  <para>                                situation[i][j] = EMPTY;</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // par défaut context est configuré à NORMAL</para>
  <para>                colorContext = new BoardContext(new BoardStrategyDEFAULT(), this, new Coord(0, 0));</para>
  <para type="comment">                // mélange les cartes de pickDeck</para>
  <para>                mixPickDeck();</para>
  <para type="function">        }</para>
  <para>        </para>
  <para type="comment">        // ** Fonctions de contrôle **</para>
  <para type="comment">        // détermine si des pions friendly sont actifs sur le board</para>
  <para type="function">        public boolean isActiveOnBoard (int color) {return countActive(color) &gt; 0;} </para>
  <para/>
  <para type="comment">        // compte le nombre de pions actifs friendly</para>
  <para type="function">        private int countActive (int color) {</para>
  <para>                int n = 0; // compteur</para>
  <para/>
  <para>                for(int i = 0 ; i &lt;= 15 ; i++) {</para>
  <para>                        if(situation[0][i] != 0) {</para>
  <para>                                if(readColor(new Coord(0, i)) == color &amp;&amp; readActive(new Coord(0, i)) == 1) n++;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                for(int i = 1 ; i &lt; 15 ; i++) {</para>
  <para>                        if(situation[i][15] != 0) {</para>
  <para>                                if(readColor(new Coord(i, 15)) == color &amp;&amp; readActive(new Coord(i, 15)) == 1) n++;</para>
  <para>                        }</para>
  <para>                } </para>
  <para>                for(int i = 15 ; i &gt;= 0 ; i--) {</para>
  <para>                        if(situation[15][i] != 0) {</para>
  <para>                                if(readColor(new Coord(15, i)) == color &amp;&amp; readActive(new Coord(15, i)) == 1) n++;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                for(int i = 14 ; i &gt; 0 ; i--) {</para>
  <para>                        if(situation[i][0] != 0) {</para>
  <para>                                if(readColor(new Coord(i, 0)) == color &amp;&amp; readActive(new Coord(i, 0)) == 1) n++;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // envoie un pion à HOME</para>
  <para type="function">        public boolean sendHOME (Player player, Pawn o) {</para>
  <para>                Coord old = new Coord(DEFAULT);</para>
  <para>                old.setCoord(o.getPos());</para>
  <para>                o.setPos(INFINITE);</para>
  <para>                o.setIsHome(true);</para>
  <para>                o.setIsActive(false);</para>
  <para>                update(o);</para>
  <para>                update(old, 0);</para>
  <para>                if(player.countHome() == 4) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // envoie un pion dans START (selon Pawn)</para>
  <para type="function">        public void goSTART (Pawn o) {</para>
  <para type="comment">                // reset l'ancienne position à 0</para>
  <para>                update(o.getPos(), 0);</para>
  <para type="comment">                // envoie à START</para>
  <para>                switch(o.getColor()) {</para>
  <para>                        case 1:   switch(o.getNumber()) {</para>
  <para>                                              case 1:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(RBASE1);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 2:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(RBASE2);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(RBASE3);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(RBASE4);        </para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   switch(o.getNumber()) {</para>
  <para>                                              case 1:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(BBASE1);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 2:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(BBASE2);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(BBASE3);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(BBASE4);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   switch(o.getNumber()) {</para>
  <para>                                              case 1:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(YBASE1);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 2:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(YBASE2);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(YBASE3);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(YBASE4);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                        case 4:   switch(o.getNumber()) {</para>
  <para>                                              case 1:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(GBASE1);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 2:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(GBASE2);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(GBASE3);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:  o.setIsActive(false);</para>
  <para>                                                            o.setPos(GBASE4);</para>
  <para>                                                            update(o);</para>
  <para>                                                            break;</para>
  <para>                                        }</para>
  <para>                                        break;</para>
  <para>                }</para>
  <para>                o.setCount(0);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // si sur slide, envoie les pions occupants à START - point d'entrée pour stratégie GoHome</para>
  <para type="function">        public void goSTART(Player[] p, Coord start) {</para>
  <para>                goHomeContext = new GoHomeContext(setContextStrategy3(start), start, this, p);</para>
  <para>                goHomeContext.operation();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne situation</para>
  <para type="function">        public int[][] getSituation () {return situation;}</para>
  <para/>
  <para type="comment">        // détermine si un pion dans un tableau est sur SA case départ</para>
  <para type="function">        public boolean isOnOwnStart (Pawn[] pset, int color) {</para>
  <para>                boolean ok = false;</para>
  <para/>
  <para>                for(Pawn o : pset) {</para>
  <para>                        if(isOnOwnStart2(o, color)) {</para>
  <para>                                ok = true;</para>
  <para>                                break;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return ok;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si un pion est sur SA case départ (surdéfinition)</para>
  <para type="function">        public boolean isOnOwnStart2 (Pawn o, int color) {</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   if(o.getPos().equals(RSTART)) return true;</para>
  <para>                                      break;</para>
  <para>                        case 2:   if(o.getPos().equals(BSTART)) return true;</para>
  <para>                                      break;</para>
  <para>                        case 3:   if(o.getPos().equals(YSTART)) return true;</para>
  <para>                                      break;</para>
  <para>                        case 4:   if(o.getPos().equals(GSTART)) return true;</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si une case est libre</para>
  <para type="function">        public boolean isFree (Coord coord) {return situation[coord.getX()][coord.getY()] == 0;}</para>
  <para/>
  <para type="comment">        // détermine si une case départ est occupée par même couleur</para>
  <para type="function">        public boolean isStartFree (int color) {</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   if(readParams(RSTART) != 0) {</para>
  <para>                                            if(readColor(RSTART) != 1) return true;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   if(readParams(BSTART) != 0) {</para>
  <para>                                            if(readColor(BSTART) != 2) return true;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   if(readParams(YSTART) != 0) {</para>
  <para>                                            if(readColor(YSTART) != 3) return true;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:   if(readParams(GSTART) != 0) {</para>
  <para>                                            if(readColor(GSTART) != 4) return true;</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  return false;</para>
  <para>                  }</para>
  <para>                  return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si une case est occupée par pion de même couleur</para>
  <para type="function">        public boolean isFriendly (Pawn o, Coord coord) {</para>
  <para>                if(!isFree(coord)) {</para>
  <para>                        return readColor(coord) == o.getColor();</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si une case est occupée par un adversaire</para>
  <para type="function">        public boolean isOpponent (Pawn o, Coord dest) {</para>
  <para>                if(!isFree(dest)) {</para>
  <para>                        return readColor(dest) != o.getColor();</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si coordonnée est un "friendly slide"</para>
  <para type="function">        public boolean isFriendlySlide (Pawn o, Coord dest) {</para>
  <para>                switch(o.getColor()) {</para>
  <para>                        case 1:   if(dest.equals(RSHORT_START) || dest.equals(RLONG_START)) return true;</para>
  <para>                                      break;</para>
  <para>                        case 2:   if(dest.equals(BSHORT_START) || dest.equals(BLONG_START)) return true;</para>
  <para>                                      break;</para>
  <para>                        case 3:   if(dest.equals(YSHORT_START) || dest.equals(YLONG_START)) return true;</para>
  <para>                                      break;</para>
  <para>                        case 4:   if(dest.equals(GSHORT_START) || dest.equals(GLONG_START)) return true;</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si coordonnée est un début de slide quelconque</para>
  <para type="function">        public boolean isOnSlide(Coord coord) {</para>
  <para>                return (coord.equals(RSHORT_START) || coord.equals(RLONG_START) ||</para>
  <para>                coord.equals(BSHORT_START) || coord.equals(BLONG_START) ||</para>
  <para>                coord.equals(YSHORT_START) || coord.equals(YLONG_START) ||</para>
  <para>                coord.equals(GSHORT_START) || coord.equals(GLONG_START));</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si coordonnée est un SAFETY</para>
  <para type="function">        public boolean isSafety (Coord coord, int color) {</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   return coord.equals(RSAFETY1) || coord.equals(RSAFETY2) || coord.equals(RSAFETY3) ||</para>
  <para>                                      coord.equals(RSAFETY4) || coord.equals(RSAFETY5);</para>
  <para>                        case 2:   return coord.equals(BSAFETY1) || coord.equals(BSAFETY2) || coord.equals(BSAFETY3) ||</para>
  <para>                                      coord.equals(BSAFETY4) || coord.equals(BSAFETY5);</para>
  <para>                        case 3:   return coord.equals(YSAFETY1) || coord.equals(YSAFETY2) || coord.equals(YSAFETY3) ||</para>
  <para>                                      coord.equals(YSAFETY4) || coord.equals(YSAFETY5);</para>
  <para>                        case 4:   return coord.equals(GSAFETY1) || coord.equals(GSAFETY2) || coord.equals(GSAFETY3) ||</para>
  <para>                                      coord.equals(GSAFETY4) || coord.equals(GSAFETY5);</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // place un pion sur la case départ - point d'entrée pour la stratégie GoStart</para>
  <para type="function">        public void getOnStart (Player[] p, int color) {</para>
  <para>                goStartContext = new GoStartContext(setContextStrategy4(color), p, this, turn);</para>
  <para>                goStartContext.operation();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // déplacement du pion (point d'entrée pour la stratégie algo)</para>
  <para type="function">        public void movePawn () {algoContext.operation();}</para>
  <para/>
  <para type="comment">        // assigne la couleur en cours pour prochain joueur</para>
  <para type="function">        public void setTurn () {</para>
  <para>                turn++;</para>
  <para>                if(turn &gt; 4) turn = 1;</para>
  <para type="function">        }</para>
  <para/>
  <para/>
  <para type="comment">        // idem (surdéfinition)</para>
  <para type="function">        public void setTurn (int n) {turn = n;}</para>
  <para/>
  <para type="comment">        // renvoie le tour</para>
  <para type="function">        public int getTurn () {return turn;}</para>
  <para>        </para>
  <para type="comment">        // retourne coordonnées d'un pion selon couleur et numéro</para>
  <para type="function">        public Coord getCoordFromColNum (Player[] p, int color, int number) {</para>
  <para>                int n = (color * 1000) + (number * 100) + 10;</para>
  <para>                for(int i = 0 ; i &lt; 16 ; i++) {</para>
  <para>                        for(int j = 0; j &lt; 16 ; j++) {</para>
  <para>                                if(situation[i][j] == n) return new Coord(i, j);</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return new Coord();</para>
  <para type="comment">                // x = -1 et y = -1</para>
  <para type="function">        } </para>
  <para/>
  <para type="comment">        // retourne cas de départ selon la couleur</para>
  <para type="function">        public Coord getStartingPos (int color) {</para>
  <para>                Coord coord = new Coord();</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   coord.setCoord(RSTART);</para>
  <para>                                      break;</para>
  <para>                        case 2:   coord.setCoord(BSTART);</para>
  <para>                                      break;</para>
  <para>                        case 3:   coord.setCoord(YSTART);</para>
  <para>                                      break;</para>
  <para>                        case 4:   coord.setCoord(GSTART);</para>
  <para>                                      break;</para>
  <para>                        default:  break;</para>
  <para>                }</para>
  <para>                return coord;</para>
  <para type="function">        } </para>
  <para/>
  <para type="comment">        // retourne la couleur de la slide selon coordonnée</para>
  <para type="function">        public int getSlideByCoord (Coord coord) {</para>
  <para>                int x = coord.getX();</para>
  <para>                int y = coord.getY();</para>
  <para/>
  <para>                if(coord.equals(RSAFETY1) || coord.equals(RSAFETY2) || coord.equals(RSAFETY3) || </para>
  <para>                coord.equals(RSAFETY4) || coord.equals(RSAFETY5)) return 1;</para>
  <para>                else if(coord.equals(BSAFETY1) || coord.equals(BSAFETY2) || coord.equals(BSAFETY3) || </para>
  <para>                coord.equals(BSAFETY4) || coord.equals(BSAFETY5)) return 2;</para>
  <para>                else if(coord.equals(YSAFETY1) || coord.equals(YSAFETY2) || coord.equals(YSAFETY3) || </para>
  <para>                coord.equals(YSAFETY4) || coord.equals(YSAFETY5)) return 3;</para>
  <para>                else if(coord.equals(GSAFETY1) || coord.equals(GSAFETY2) || coord.equals(GSAFETY3) || </para>
  <para>                coord.equals(GSAFETY4) || coord.equals(GSAFETY5)) return 4;</para>
  <para>                else if(x == 15) {</para>
  <para>                        if((y &gt; 1 &amp;&amp; y &lt; 7) || (y &gt; 10 &amp;&amp; y &lt; 15)) return 1;</para>
  <para>                }</para>
  <para>                else if(y == 0) {</para>
  <para>                        if((x &gt; 1 &amp;&amp; x &lt; 7) || (x &gt; 10 &amp;&amp; x &lt; 15)) return 2;</para>
  <para>                }</para>
  <para>                else if(x == 0) {</para>
  <para>                        if((y &gt; 0 &amp;&amp; y &lt; 5) || (y &gt; 8 &amp;&amp; y &lt; 14)) return 3;</para>
  <para>                }</para>
  <para>                else if(y == 15) {</para>
  <para>                        if((x &gt; 0 &amp;&amp; x &lt; 5) || (x &gt; 8 &amp;&amp; x &lt; 14)) return 4;</para>
  <para>                }</para>
  <para>                return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si une coordonnée se trouve sur une slide de même couleur</para>
  <para type="function">        public boolean isCoordOnOwnSlide (Coord coord) {</para>
  <para>                return readColor(coord) == getSlideByCoord(coord);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // ** Définitions des stratégies **</para>
  <para type="comment">        // configure la stratégie de couleur</para>
  <para type="function">        private BoardStrategy setContextStrategy1 (Coord coord) {</para>
  <para>                switch(readColor(coord)) {</para>
  <para>                        case 0:   colorStrategy = new BoardStrategyDEFAULT();</para>
  <para>                                      break;</para>
  <para>                        case 1:   colorStrategy = new BoardStrategyRED();</para>
  <para>                                      break;</para>
  <para>                        case 2:   colorStrategy = new BoardStrategyBLUE();</para>
  <para>                                      break;</para>
  <para>                        case 3:   colorStrategy = new BoardStrategyYELLOW();</para>
  <para>                                      break;</para>
  <para>                        case 4:   colorStrategy = new BoardStrategyGREEN();</para>
  <para>                                      break;</para>
  <para>                        default:  break;</para>
  <para>                }</para>
  <para>                return colorStrategy;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // configure la stratégie pour goHome</para>
  <para type="function">        private GoHomeStrategy setContextStrategy3 (Coord start) {</para>
  <para>                int n = 0;</para>
  <para>                if(start.equals(RSHORT_START) || start.equals(RLONG_START)) n = 1;</para>
  <para>                else if(start.equals(BSHORT_START) || start.equals(BLONG_START)) n = 2;</para>
  <para>                else if(start.equals(YSHORT_START) || start.equals(YLONG_START)) n = 3;</para>
  <para>                else if(start.equals(GSHORT_START) || start.equals(GLONG_START)) n = 4;</para>
  <para>                else n = 5;</para>
  <para/>
  <para>                switch(n) {</para>
  <para>                        case 1:   goHomeStrategy = new GoHomeStrategyRED();</para>
  <para>                                      break;</para>
  <para>                        case 2:   goHomeStrategy = new GoHomeStrategyBLUE();</para>
  <para>                                      break;</para>
  <para>                        case 3:   goHomeStrategy = new GoHomeStrategyYELLOW();</para>
  <para>                                      break;</para>
  <para>                        case 4:   goHomeStrategy = new GoHomeStrategyGREEN();</para>
  <para>                                      break;</para>
  <para>                        case 5:   goHomeStrategy = new GoHomeStrategyDEFAULT();</para>
  <para>                }</para>
  <para>                return goHomeStrategy;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // configure la stratégie pour goStart</para>
  <para type="function">        private GoStartStrategy setContextStrategy4 (int color_) {</para>
  <para>                switch(color_) {</para>
  <para>                        case 1:   goStartStrategy = new GoStartStrategyRED();</para>
  <para>                                      break;</para>
  <para>                        case 2:   goStartStrategy = new GoStartStrategyBLUE();</para>
  <para>                                      break;</para>
  <para>                        case 3:   goStartStrategy = new GoStartStrategyYELLOW();</para>
  <para>                                      break;</para>
  <para>                        case 4:   goStartStrategy = new GoStartStrategyGREEN();</para>
  <para>                                      break;</para>
  <para>                        default:  goStartStrategy = new GoStartStrategyDEFAULT();</para>
  <para>                }</para>
  <para>                return goStartStrategy;</para>
  <para type="function">        }</para>
  <para type="comment">        // ** Implémentation de l'interface BoardParams **</para>
  <para type="comment">        // lecture des paramètres</para>
  <para type="function">        public int readParams (Coord o) {return situation[o.getX()][o.getY()];}</para>
  <para/>
  <para type="function">        public int readColor (Coord o) {</para>
  <para>                return readParams(o) / 1000;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int readNumber (Coord o) {</para>
  <para>                return (readParams(o) - (readColor(o) * 1000)) / 100;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int readActive (Coord o) {</para>
  <para>                return (readParams(o) - (readColor(o) * 1000) - (readNumber(o) * 100)) / 10;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int readHome (Coord o) {</para>
  <para>                return readParams(o) - (readColor(o) * 1000) - (readNumber(o) * 100) - (readActive(o) * 10);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // modification des paramètres</para>
  <para type="function">        public void update (Pawn pawn) {</para>
  <para>                situation[pawn.getPos().getX()][pawn.getPos().getY()] = convertPawnToInt(pawn);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // injection de paramètres par coordonnée et valeur</para>
  <para type="function">        public void update (Coord coord, int value) {</para>
  <para>                situation[coord.getX()][coord.getY()] = value;</para>
  <para type="function">        } </para>
  <para/>
  <para type="comment">        // renvoie les paramètre en int</para>
  <para type="function">        public int convertPawnToInt (Pawn pawn) {</para>
  <para>                int active, home;</para>
  <para>                if(pawn.getIsActive()) active = 1;</para>
  <para>                else active = 0;</para>
  <para>                if(pawn.getIsHome()) home = 1;</para>
  <para>                else home = 0;</para>
  <para/>
  <para>                return pawn.getColor() * 1000 + pawn.getNumber() * 100 + active * 10 + home; </para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // renvoie un pion selon params (et Player[])</para>
  <para type="function">        public Pawn convertIntToPawn (Player[] p, int params) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn o = factory.createPawn(0, 0, new Coord(DEFAULT));</para>
  <para>                int color = params / 1000;</para>
  <para>                int number = (params - (color * 1000)) / 100;</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   switch(number) {</para>
  <para>                                              case 1:   return p[0].getSet()[0];</para>
  <para>                                              case 2:   return p[0].getSet()[1];</para>
  <para>                                              case 3:   return p[0].getSet()[2];</para>
  <para>                                              case 4:   return p[0].getSet()[3];</para>
  <para>                                      }</para>
  <para>                        case 2:   switch(number) {</para>
  <para>                                              case 1:   return p[1].getSet()[0];</para>
  <para>                                              case 2:   return p[1].getSet()[1];</para>
  <para>                                              case 3:   return p[1].getSet()[2];</para>
  <para>                                              case 4:   return p[1].getSet()[3];</para>
  <para>                                      }</para>
  <para>                        case 3:   switch(number) {</para>
  <para>                                              case 1:   return p[2].getSet()[0];</para>
  <para>                                              case 2:   return p[2].getSet()[1];</para>
  <para>                                              case 3:   return p[2].getSet()[2];</para>
  <para>                                              case 4:   return p[2].getSet()[3];</para>
  <para>                                      }</para>
  <para>                        case 4:   switch(number) {</para>
  <para>                                              case 1:   return p[3].getSet()[0];</para>
  <para>                                              case 2:   return p[3].getSet()[1];</para>
  <para>                                              case 3:   return p[3].getSet()[2];</para>
  <para>                                              case 4:   return p[3].getSet()[3];</para>
  <para>                                      }</para>
  <para>                }</para>	
  <para>                return o;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // renvoie un pion selon coordonnées</para>
  <para type="function">        public Pawn getPawnFromCoord (Player[] p, Coord coord) {</para>
  <para>                return convertIntToPawn(p, readParams(coord));</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // pige une carte de pickDeck</para>
  <para type="function">        public void pickCard () {</para>
  <para>                if(!isPickEmpty()) {</para>
  <para>                        picked = pickDeck.getCard();</para>
  <para>                        dropDeck.add(picked);</para>
  <para>                }</para>
  <para type="comment">                // sinon transfère, shuffle et pick</para>
  <para>                else {</para>
  <para>                        pickDeck.transfer(dropDeck.getList());</para>
  <para>                        dropDeck.getList().clear();</para>
  <para>                        pickDeck.mixDeck();</para>
  <para>                        picked = pickDeck.getCard();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // mélange les cartes</para>
  <para type="function">        private void mixPickDeck () {pickDeck.mixDeck();}</para>
  <para/>
  <para type="comment">        // insère carte pigée dans dropDeck</para>
  <para type="function">        public void dropCard () {</para>
  <para>                dropDeck.add(picked);</para>
  <para>                pickDeck.remove();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // vérifie si pickDeck vide</para>
  <para type="function">        public boolean isPickEmpty () {return pickDeck.isEmpty();}</para>
  <para/>
  <para type="comment">        // retourne la carte pigée (... peut avoir un bug ...)</para>
  <para type="function">        public Card getPickedCard () {return picked;}</para>
  <para/>
  <para type="comment">        // remet un JOKER dans le dropDeck</para>
  <para type="function">        public void dropJoker (Card joker) {dropDeck.add(joker);}</para>
  <para/>
  <para type="comment">        // configure le contexte des cartes</para>
  <para type="function">        public void setPickContext (PickContext context_) {algoContext = context_;}</para>
  <para/>
  <para type="comment">        // ** Fonctions pour l'affichage **</para>
  <para type="comment">        // affichage du board</para>
  <para type="function">        public void displayBoard (Player[] p, int turn) {</para>
  <para>                System.out.print(M + "\t\t\t\t\tTour courant : ");</para>
  <para>                switch(turn) {</para>
  <para>                        case 1:   System.out.println(R + "ROUGE" + N);</para>
  <para>                                      break;</para>
  <para>                        case 2:   System.out.println(B + "BLEU" + N);</para>
  <para>                                      break;</para>
  <para>                        case 3:   System.out.println(Y + "JAUNE" + N);</para>
  <para>                                      break;</para>
  <para>                        case 4:   System.out.println(G + "VERT" + N);</para>
  <para>                                      break;</para>
  <para>                        default:  System.out.println(E + "DEFAULT" + N);</para>
  <para>                        break;</para>
  <para>                }</para>
  <para type="comment">                // ligne 0</para>
  <para>                {</para>
  <para>                System.out.println();</para>
  <para>                space(34);</para>
  <para>                print(new Coord(0, 0), false); space(1); // case ordinaire</para>
  <para>                YellowBG(); print(YSHORT_START, isCoordOnOwnSlide(YSHORT_START)); YellowBG(); space(1); // début de SHORT                         SLIDE jaune</para>
  <para>                YellowBG(); print(new Coord(0, 2), isCoordOnOwnSlide(new Coord(0, 2))); YellowBG(); space(1); // SHORT SLIDE                         jaune</para>
  <para>                YellowBG(); print(new Coord(0, 3), isCoordOnOwnSlide(new Coord(0, 3))); YellowBG(); space(1); // SHORT SLIDE                         jaune</para>
  <para>                YellowBG(); print(YSTART, isCoordOnOwnSlide(YSTART)); space(1); // fin de SHORT SLIDE jaune</para>
  <para>                print(new Coord(0, 5), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(0, 6), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(0, 7), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(0, 8), false); space(1); // case ordinaire</para>
  <para>                YellowBG(); print(YLONG_START, isCoordOnOwnSlide(YLONG_START)); YellowBG(); space(1); // début de LONG                                 SLIDE jaune</para>
  <para>                YellowBG(); print(new Coord(0, 10), isCoordOnOwnSlide(new Coord(0, 10))); YellowBG(); space(1); // LONG SLIDE                         jaune</para>
  <para>                YellowBG(); print(new Coord(0, 11), isCoordOnOwnSlide(new Coord(0, 11))); YellowBG(); space(1); // LONG SLIDE                         jaune</para>
  <para>                YellowBG(); print(new Coord(0, 12), isCoordOnOwnSlide(new Coord(0, 12))); YellowBG(); space(1); // LONG SLIDE                         jaune</para>
  <para>                YellowBG(); print(YLONG_END, isCoordOnOwnSlide(YLONG_END)); space(1); // fin de LONG SLIDE jaune</para>
  <para>                print(new Coord(0, 14), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(0, 15), false); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 1</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                print(new Coord(1, 0), false); space(3); // case ordinaire</para>
  <para>                YellowBG(); print(YSAFETY1, isCoordOnOwnSlide(YSAFETY1)); space(25); // SAFETY jaune</para>
  <para>                GreenBG(); print(GSHORT_START, isCoordOnOwnSlide(GSHORT_START)); // début de SHORT SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 2</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(BLONG_END, isCoordOnOwnSlide(BLONG_END)); space(3); // fin de LONG SLIDE bleue</para>
  <para>                YellowBG(); print(YSAFETY2, isCoordOnOwnSlide(YSAFETY2)); space(3); // SAFETY jaune</para>
  <para>                print(YBASE4, false); space(1); // START jaune</para>
  <para>                print(YBASE3, false); space(5); // START jaune</para>
  <para>                printH(GREEN, p); space(3); // HOME vert</para>
  <para>                GreenBG(); print(GSAFETY5, isCoordOnOwnSlide(GSAFETY5)); GreenBG(); space(1); // SAFETY vert</para>
  <para>                GreenBG(); print(GSAFETY4, isCoordOnOwnSlide(GSAFETY4)); GreenBG(); space(1); // SAFETY vert</para>
  <para>                GreenBG(); print(GSAFETY3, isCoordOnOwnSlide(GSAFETY3)); GreenBG(); space(1); // SAFETY vert</para>
  <para>                GreenBG(); print(GSAFETY2, isCoordOnOwnSlide(GSAFETY2)); GreenBG(); space(1); // SAFETY vert</para>
  <para>                GreenBG(); print(GSAFETY1, isCoordOnOwnSlide(GSAFETY1)); GreenBG(); space(1); // SAFETY vert</para>
  <para>                GreenBG(); print(new Coord(2, 15), isCoordOnOwnSlide(new Coord(2, 15))); // LONG SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 3</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(new Coord(3, 0), isCoordOnOwnSlide(new Coord(3, 0))); space(3); // LONG SLIDE bleue</para>
  <para>                YellowBG(); print(YSAFETY3, isCoordOnOwnSlide(YSAFETY3)); space(3); // SAFETY jaune</para>
  <para>                print(YBASE2, false); space(1); // START jaune</para>
  <para>                print(YBASE1, false); space(19); // START jaune</para>
  <para>                GreenBG(); print(new Coord(3, 15), isCoordOnOwnSlide(new Coord(3, 15))); // SHORT SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 4</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(new Coord(4, 0), isCoordOnOwnSlide(new Coord(4, 0))); space(3); // LONG SLIDE bleue</para>
  <para>                YellowBG(); print(YSAFETY4, isCoordOnOwnSlide(YSAFETY4)); space(19); // SAFETY jaune</para>
  <para>                print(GBASE2, false); space(1); // START vert</para>
  <para>                print(GBASE4, false); space(3); // START vert</para>
  <para>                GreenBG(); print(GSTART, isCoordOnOwnSlide(GSTART)); // fin de SHORT SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 5</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(new Coord(5, 0), isCoordOnOwnSlide(new Coord(5, 0))); space(3); // LONG SLIDE bleue</para>
  <para>                YellowBG(); print(YSAFETY5, isCoordOnOwnSlide(YSAFETY5)); space(7); // SAFETY jaune</para>
  <para>                deck(7, 1); space(5); // DECK UP</para>
  <para>                print(GBASE1, false); space(1); // START vert</para>
  <para>                print(GBASE3, false); space(3); // START vert</para>
  <para>                print(new Coord(5, 15), false); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 6</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(BLONG_START, isCoordOnOwnSlide(BLONG_START)); space(11); // début LONG SLIDE bleue</para>
  <para>                deck(1, 1); space(1); // DECK UP</para>
  <para>                printD1(turn); space(1); // digit 1 DECK UP</para>
  <para>                printD2(turn); space(1); // digit 2 DECK UP</para>
  <para>                deck(1, 1); space(11); // DECK</para>
  <para>                print(new Coord(6, 15), false); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 7</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                print(new Coord(7, 0),false); space(3); // case ordinaire</para>
  <para>                System.out.print(Y);</para>
  <para>                printH(YELLOW, p); space(7); // HOME jaune</para>
  <para>                deck(7, 1); space(11); // DECK</para>
  <para>                print(new Coord(7, 15), false); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 8</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                print(new Coord(8, 0), false); space(11); // case ordinaire</para>
  <para>                deck(7, 4); space(7); // DECK</para>
  <para>                printH(RED, p); space(3); // HOME rouge</para>
  <para>                print(new Coord(8, 15), false); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 9</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                print(new Coord(9, 0), false); space(11); // case ordinaire </para>
  <para>                deck(1, 4); System.out.print("\033[1;95mSORRY\033[0m"); // DECK</para>
  <para>                deck(1, 4); space(11); // DECK</para>
  <para>                GreenBG(); print(GLONG_START, isCoordOnOwnSlide(GLONG_START)); // début de LONG SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 10</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                print(new Coord(10, 0), false); space(3); // case ordinaire</para>
  <para>                print(BBASE3, false); space(1); // START bleu</para>
  <para>                print(BBASE1, false); space(5); // START bleu</para>
  <para>                deck(7, 4); space(7); // DECK</para>
  <para>                RedBG(); print(RSAFETY5, isCoordOnOwnSlide(RSAFETY5)); space(3); // SAFETY rouge</para>
  <para>                GreenBG(); print(new Coord(10, 15), isCoordOnOwnSlide(new Coord(10, 15))); // LONG SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 11</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(BSTART, isCoordOnOwnSlide(BSTART)); space(3); // fin de SHORT SLIDE bleue</para>
  <para>                print(BBASE4, false); space(1); // START bleu</para>
  <para>                print(BBASE2, false); space(19); // START bleu</para>
  <para>                RedBG(); print(RSAFETY4, isCoordOnOwnSlide(RSAFETY4));space(3); // SAFETY rouge</para>
  <para>                GreenBG(); print(new Coord(11, 15), isCoordOnOwnSlide(new Coord(11, 15))); // LONG SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 12</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(new Coord(12, 0), isCoordOnOwnSlide(new Coord(12, 0))); space(19); // SHORT SLIDE bleue</para>
  <para>                print(RBASE1, false); space(1); // START rouge</para>
  <para>                print(RBASE2, false); space(3); // START rouge</para>
  <para>                RedBG(); print(RSAFETY3, isCoordOnOwnSlide(RSAFETY3)); space(3); // SAFETY rouge</para>
  <para>                GreenBG(); print(new Coord(12, 15), isCoordOnOwnSlide(new Coord(12, 15))); // LONG SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 13</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(new Coord(13, 0), isCoordOnOwnSlide(new Coord(13, 0))); BlueBG(); space(1); // SHORT SLIDE                         bleue</para>
  <para>                BlueBG(); print(BSAFETY1, isCoordOnOwnSlide(BSAFETY1)); BlueBG(); space(1); // SAFETY bleu</para>
  <para>                BlueBG(); print(BSAFETY2, isCoordOnOwnSlide(BSAFETY2)); BlueBG(); space(1); // SAFETY bleu</para>
  <para>                BlueBG(); print(BSAFETY3, isCoordOnOwnSlide(BSAFETY3)); BlueBG(); space(1); // SAFETY bleu</para>
  <para>                BlueBG(); print(BSAFETY4, isCoordOnOwnSlide(BSAFETY4)); BlueBG(); space(1); // SAFETY bleu</para>
  <para>                BlueBG(); print(BSAFETY5, isCoordOnOwnSlide(BSAFETY5)); space(3); // SAFETY bleu </para>
  <para>                printH(BLUE, p); space(5); // HOME bleu</para>
  <para>                print(RBASE3, false); space(1); // START rouge</para>
  <para>                print(RBASE4, false); space(3); // START rouge</para>
  <para>                RedBG(); print(RSAFETY2, true); space(3); // SAFETY rouge</para>
  <para>                GreenBG(); print(GLONG_END, isCoordOnOwnSlide(GLONG_END)); // fin de LONG SLIDE verte</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 14</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                BlueBG(); print(BSHORT_START, isCoordOnOwnSlide(BSHORT_START)); space(25); // début de SHORT SLIDE bleue</para>
  <para>                RedBG(); print(RSAFETY1, isCoordOnOwnSlide(RSAFETY1)); space(3); // SAFETY rouge</para>
  <para>                print(new Coord(14, 15), false); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="comment">                // ligne 15</para>
  <para>                {</para>
  <para>                space(34);</para>
  <para>                print(new Coord(15, 0), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(15, 1), false); space(1); // case ordinaire</para>
  <para>                RedBG(); print(RLONG_END, isCoordOnOwnSlide(RLONG_END)); RedBG(); space(1); // début de LONG SLIDE rouge</para>
  <para>                RedBG(); print(new Coord(15, 3), isCoordOnOwnSlide(new Coord(15, 3))); RedBG(); space(1); // LONG SLIDE rouge</para>
  <para>                RedBG(); print(new Coord(15, 4), isCoordOnOwnSlide(new Coord(15, 4))); RedBG(); space(1); // LONG SLIDE rouge</para>
  <para>                RedBG(); print(new Coord(15, 5), isCoordOnOwnSlide(new Coord(15, 5))); RedBG(); space(1); // LONG SLIDE rouge</para>
  <para>                RedBG(); print(RLONG_START, isCoordOnOwnSlide(RLONG_START)); space(1); // fin de LONG SLIDE rouge</para>
  <para>                print(new Coord(15, 7), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(15, 8), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(15, 9), false); space(1); // case ordinaire</para>
  <para>                print(new Coord(15, 10), false); space(1); // case ordinaire</para>
  <para>                RedBG(); print(RSTART, isCoordOnOwnSlide(RSTART)); RedBG(); space(1); // fin de SHORT SLIDE rouge</para>
  <para>                RedBG(); print(new Coord(15, 12), isCoordOnOwnSlide(new Coord(15, 12))); RedBG(); space(1); // SHORT SLIDE                         rouge</para>
  <para>                RedBG(); print(new Coord(15, 13), isCoordOnOwnSlide(new Coord(15, 13))); RedBG(); space(1); // SHORT SLIDE                         rouge</para>
  <para>                RedBG(); print(RSHORT_START, isCoordOnOwnSlide(RSHORT_START)); space(1); // début de SHORT SLIDE rouge</para>
  <para>                print(new Coord(15, 15), false); space(1); // case ordinaire</para>
  <para>                System.out.println();</para>
  <para>                System.out.println();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void displaySituation () {</para>
  <para>                for(int i = 0 ; i &lt; 16 ; i++) {</para>
  <para>                        for(int j = 0 ; j &lt; 16 ; 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 n espaces</para>
  <para type="function">        public void space (int n) {</para>
  <para>                for(int i = 0 ; i &lt; n ; i++) System.out.print(" ");</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le contour des decks</para>
  <para type="function">        public void deck (int n, int color) {</para>
  <para>                for(int i = 0 ; i &lt; n ; i++) {</para>
  <para>                        if(color == GREEN) System.out.print(GG + " " + N);</para>
  <para>                        else if(color == RED) System.out.print(RR + " " + N);</para>
  <para>                        else System.out.print(N + "*" + N);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le numéro du pion et sa couleur (ou * pour non-occupé) -point d'entrée pour stratégie BoardStrategy</para>
  <para type="function">        public void print (Coord coord, boolean ownSlide) {</para>
  <para>                colorContext.setCoord(coord);</para>
  <para>                colorContext.setStrategy(setContextStrategy1(coord));</para>
  <para>                System.out.print(colorContext.print(readNumber(coord), ownSlide)); // coord est 0,0</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le premier digit de dropDeck</para>
  <para type="function">        private void printD1 (int color) {</para>
  <para>                if(picked == null) System.out.print(N + " ");</para>
  <para>                else {</para>
  <para>                        int n = picked.getNumber();</para>
  <para>                        String number = Integer.toString(n);</para>
  <para>                        if(n &gt;= 10) {</para>
  <para>                                switch(color) { </para>
  <para>                                        case 1:   System.out.print(N + R + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 2:   System.out.print(N + B + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 3:   System.out.print(N + Y + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 4:   System.out.print(N + B + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        default:  System.out.print(N + " ");</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else System.out.print(N + " ");</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // afficher le deuxième digit de dropDeck</para>
  <para type="function">        private void printD2 (int color) {</para>
  <para>                if(picked == null) System.out.print(N + " ");</para>
  <para>                else {</para>
  <para>                        int n = picked.getNumber();</para>
  <para>                        String number = Integer.toString(n);</para>
  <para>                        if(n &lt; 10) {</para>
  <para>                                switch(color) {</para>
  <para>                                        case 1:   System.out.print(N + R + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 2:   System.out.print(N + B + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 3:   System.out.print(N + Y + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 4:   System.out.print(N + G + number.charAt(0) + N);</para>
  <para>                                                      break;</para>
  <para>                                        default:  System.out.print(N + " ");</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                switch(color) {</para>
  <para>                                        case 1:   System.out.print(N + R + number.charAt(1) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 2:   System.out.print(N + B + number.charAt(1) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 3:   System.out.print(N + Y + number.charAt(1) + N);</para>
  <para>                                                      break;</para>
  <para>                                        case 4:   System.out.print(N + G + number.charAt(1) + N);</para>
  <para>                                                      break;</para>
  <para>                                        default:  System.out.print(N + " ");</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche les backgrounds</para>
  <para type="function">        private void RedBG () {System.out.print(RR);}</para>
  <para type="function">        private void BlueBG () {System.out.print(BB);}</para>
  <para type="function">        private void YellowBG () {System.out.print(YY);}</para>
  <para type="function">        private void GreenBG () {System.out.print(GG);}</para>
  <para/>
  <para type="comment">        // affiche le nombre de pions dans HOME</para>
  <para type="function">        private void printH (int color, Player[] p) {</para>
  <para>                if(color == RED) {</para>
  <para>                        System.out.print(R + pullHomeCount(RED, p) + N);</para>
  <para>                }</para>
  <para>                else if(color == BLUE) {</para>
  <para>                        System.out.print(B + pullHomeCount(BLUE, p) + N);</para>
  <para>                }</para>
  <para>                else if(color == YELLOW) {</para>
  <para>                        System.out.print(Y + pullHomeCount(YELLOW, p) + N);</para>
  <para>                }</para>
  <para>                else if(color == GREEN) {</para>
  <para>                        System.out.print(G + pullHomeCount(GREEN, p) + N);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne nombre de pions dans HOME</para>
  <para type="function">        private int pullHomeCount (int color, Player[] p) {</para>
  <para>                int n = 0;</para>
  <para>                if(color == RED) n = p[0].countHome();</para>
  <para>                else if(color == BLUE) n = p[1].countHome();</para>
  <para>                else if(color == YELLOW) n = p[2].countHome();</para>
  <para>                else if(color == GREEN) n = p[3].countHome();</para>
  <para>                return n; </para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“BoardParams.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="import">import piece.Pawn;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public interface BoardParams {</para>
  <para type="function">        abstract int readParams (Coord o);</para>
  <para type="function">        abstract int readColor (Coord o);</para>
  <para type="function">        abstract int readNumber (Coord o);</para>
  <para type="function">        abstract int readActive (Coord o);</para>
  <para type="function">        abstract int readHome (Coord o);</para>
  <para type="function">        abstract void update (Pawn pawn);</para>
  <para type="function">        abstract Pawn convertIntToPawn (Player[] p, int params);</para>
  <para type="function">        abstract int convertPawnToInt (Pawn pawn);</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Coord.java”</para>
  <para/>
  <para type="package">package board;</para>
  <para/>
  <para type="class">public class Coord {</para>
  <para>        private int x, y;</para>
  <para/>
  <para type="function">        public Coord () {</para>
  <para>                this.x = -1;</para>
  <para>                this.y = -1;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Coord (Coord coord) {</para>
  <para>                this.x = coord.getX();</para>
  <para>                this.y = coord.getY();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Coord (int X, int Y) {</para>
  <para>                this.x = X;</para>
  <para>                this.y = Y;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int getX () {return this.x;}</para>
  <para type="function">        public void setX (int n) {this.x = n;}</para>
  <para type="function">        public int getY () {return this.y;}</para>
  <para type="function">        public void setY (int n) {this.y = n;}</para>
  <para type="function">        public Coord getCoord () {return this;}</para>
  <para type="function">        public void setCoord (int X, int Y) {this.x = X; this.y = Y;}</para>
  <para type="function">        public void setCoord (Coord o) {this.x = o.x; this.y = o.y;}</para>
  <para/>
  <para type="function">        public boolean equals (Coord o) {</para>
  <para>                if(o == null) return false;</para>
  <para>                return this.x == o.x &amp;&amp; this.y == o.y;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Card.java”</para>
  <para/>
  <para type="package">package deck;</para>
  <para/>
  <para type="class">public class Card {</para>
  <para>        private int number;</para>
  <para/>
  <para type="function">        public Card (int num) {this.number = num;}</para>
  <para type="function">        public Card getCard () {return this;}</para>
  <para type="function">        public int getNumber () {return number;}</para>
  <para type="class">}</para>
  <para/>
  <para type="filename">“CardFactory.java”</para>
  <para/>
  <para type="package">package deck;</para>
  <para/>
  <para type="class">public interface CardFactory {</para>
  <para type="function">        DownDeck createDeck ();</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“CardFactoryDown.java”</para>
  <para/>
  <para type="package">package deck;</para>
  <para/>
  <para type="class">public class CardFactoryDown implements CardFactory {</para>
  <para type="function">        public DownDeck createDeck () {</para>
  <para>                DownDeck dd = DownDeck.getInstance();</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) BuildDeckSet(dd);</para>
  <para>                return dd;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void BuildDeckSet (DownDeck dd) {</para>
  <para type="comment">                // ajout des cartes requises (un set sur quatre)</para>
  <para>                dd.add(new Card(1));</para>
  <para>                dd.add(new Card(2));</para>
  <para>                dd.add(new Card(3));</para>
  <para>                dd.add(new Card(4));</para>
  <para>                dd.add(new Card(5));</para>
  <para>                dd.add(new Card(7));</para>
  <para>                dd.add(new Card(8));</para>
  <para>                dd.add(new Card(10));</para>
  <para>                dd.add(new Card(11));</para>
  <para>                dd.add(new Card(12));</para>
  <para>                dd.add(new Card(13)); // carte "Sorry!"</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“DownDeck.java”</para>
  <para/>
  <para type="package">package deck;</para>
  <para/>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="comment">// implémenté en tant que singleton</para>
  <para type="class">public class DownDeck {</para>
  <para>        private static final DownDeck INSTANCE = new DownDeck();</para>
  <para>        private static LinkedList&lt;Card&gt; dDeck;</para>
  <para/>
  <para type="function">        private DownDeck () {dDeck = new LinkedList&lt;Card&gt;();}</para>
  <para type="function">        public static DownDeck getInstance () {return INSTANCE;}</para>
  <para type="function">        public boolean add (Card n) {return dDeck.add(n);}</para>
  <para type="function">        public boolean isEmpty () {return dDeck.isEmpty();}</para>
  <para type="function">        public Card remove () {return dDeck.removeFirst();}</para>
  <para type="function">        public Iterator&lt;Card&gt; getIterator () {return dDeck.iterator();}</para>
  <para type="function">        public int peekCard () {return dDeck.peekFirst().getNumber();} // inutilisée</para>
  <para type="function">        public LinkedList&lt;Card&gt; getList () {return dDeck;}</para>
  <para type="function">        public boolean transfer (LinkedList&lt;Card&gt; c) {dDeck.clear(); return dDeck.addAll(c);}</para>
  <para/>
  <para type="function">        public Card getCard () throws NoSuchElementException {</para>
  <para>                return dDeck.getFirst();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void mixDeck () {</para>
  <para>                Object[] arr = dDeck.toArray();</para>
  <para>                Random rand = new Random();</para>
  <para>                for (int i = 0; i &lt; arr.length - 1; i++) {</para>
  <para type="comment">                        // sélectionne l'index au hasard</para>
  <para>                        int index = rand.nextInt(i + 1);</para>
  <para type="comment">                        // permutation</para>
  <para>                        Object g = arr[index];</para>
  <para>                        arr[index] = arr[i];</para>
  <para>                        arr[i] = g;</para>
  <para>                }</para>
  <para type="comment">                // recopie Cards dans la liste</para>
  <para>                ListIterator&lt;Card&gt; it = dDeck.listIterator();</para>
  <para>                for(int i = 0 ; i &lt; arr.length ; i++) {</para>
  <para>                        it.next();</para>
  <para>                        it.set((Card)arr[i]);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“UpDeck.java”</para>
  <para/>
  <para type="package">package deck;</para>
  <para/>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="comment">// implémenté en tant que singleton</para>
  <para type="class">public class UpDeck {</para>
  <para>        private static final UpDeck INSTANCE = new UpDeck();</para>
  <para>        private static LinkedList&lt;Card&gt; uDeck;</para>
  <para type="function">        public static UpDeck getInstance () {return INSTANCE;}</para>
  <para/>
  <para type="function">        private UpDeck () {uDeck = new LinkedList&lt;Card&gt;();}</para>
  <para type="function">        public boolean add (Card n) {return uDeck.add(n);}</para>
  <para type="function">        public Card remove () {return uDeck.removeFirst();}</para>
  <para type="function">        public Iterator&lt;Card&gt; getIterator () {return uDeck.iterator();}</para>
  <para type="function">        public void clearDeck () {uDeck.clear();}</para>
  <para type="function">        public LinkedList&lt;Card&gt; getList () {return uDeck;}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickContext.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class PickContext {</para>
  <para>        private PickStrategy strategy;</para>
  <para>        private Board b;</para>
  <para>        private Player[] p;</para>
  <para>        private int n;</para>
  <para>        private int turn;</para>
  <para>        private boolean forward;</para>
  <para/>
  <para type="function">        public PickContext (PickStrategy strategy_, Board b_, Player[] p_, int n_, int turn_, boolean fw) {</para>
  <para>                strategy = strategy_;</para>
  <para>                b = b_;</para>
  <para>                p = p_;</para>
  <para>                n = n_;</para>
  <para>                turn = turn_;</para>
  <para>                forward = fw;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void setStrategy (PickStrategy strategy_) {</para>
  <para>                strategy = strategy_;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void operation () {</para>
  <para>                strategy.algorithm(b, p, n, turn, forward);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="import">import java.util.InputMismatchException;</para>
  <para type="import">import java.util.Scanner;</para>
  <para/>
  <para type="import">import game.Game;</para>
  <para type="import">import game.GameConstants;</para>
  <para/>
  <para type="class">public interface PickStrategy extends GameConstants {</para>
  <para>        Scanner scan = new Scanner(System.in);</para>
  <para/>
  <para type="function">        void algorithm (Board b, Player[] p, int n, int turn, boolean forw);</para>
  <para/>
  <para type="comment">        // permute position de deux pions</para>
  <para type="function">        default void permutePawns (Board b, Pawn A, Pawn B) {</para>
  <para>                Coord temp = new Coord(DEFAULT);</para>
  <para type="comment">                // calcule les case depuis case départ</para>
  <para>                int countA = Utils.countToStartFrom(B.getPos(), A.getColor());</para>
  <para>                int countB = Utils.countToStartFrom(A.getPos(), B.getColor());</para>
  <para type="comment">                // permute les positions</para>
  <para>                temp.setCoord(A.getPos());</para>
  <para>                A.setPos(B.getPos());</para>
  <para>                B.setPos(temp);</para>
  <para type="comment">                // ajuste les coompteurs count respectifs</para>
  <para>                A.setCount(countA);</para>
  <para>                B.setCount(countB);</para>
  <para type="comment">                // update le board</para>
  <para>                b.update(A);</para>
  <para>                b.update(B);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // split mouvement entre deux pions si le 7 est pigé</para>
  <para type="function">        default void splitCount (Player[] p, Board b, Pawn A, Pawn B, int n, int turn) {</para>
  <para>                moveProcess(p, b, A, 4, turn, true);</para>
  <para>                moveProcess(p, b, B, 3, turn, true);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // menu demander pour A et B, split ou permute</para>
  <para type="function">        default void menuAskForAB (Board b, Player[] p, int turn, boolean willSplit) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn A = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn B = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] psetF, psetO;</para>
  <para>                int loopCount;</para>
  <para/>
  <para>                psetF = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si exactement 2 pions actifs, demander seulement celui qui avance de 4 cases</para>
  <para>                if(psetF.length == 2 &amp;&amp; willSplit) {</para>
  <para>                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                System.out.println("\n\t\t\t\t" + M +"Sélection pion " + R + "A" + M + " (qui avance 4 cases) : " + N);</para>
  <para>                                loopCount = 0;</para>
  <para>                                do {</para>
  <para>                                        A = askNumberSameColor(p, turn);</para>
  <para>                                        loopCount++;</para>
  <para>                                }</para>
  <para>                                while(!isPawnInList(psetF, A) &amp;&amp; loopCount &lt; 4); </para>
  <para type="comment">                                // détermine pion B</para>
  <para>                                for(int i = 0 ; i &lt; psetF.length ; i++) {</para>
  <para>                                        if(A != psetF[i] &amp;&amp; !psetF[i].getPos().equals(DEFAULT)) {</para>
  <para>                                                B = psetF[i];</para>
  <para>                                                break;</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                        A = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                        for(int i = 0 ; i &lt; psetF.length ; i++) {</para>
  <para>                                                if(A != psetF[i] &amp;&amp; !psetF[i].getPos().equals(DEFAULT)) {</para>
  <para>                                                        B = psetF[i];</para>
  <para>                                                        break;</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        } </para>
  <para>                }</para>
  <para>                else if(psetF.length &gt; 2 &amp;&amp; !willSplit) {</para>
  <para>                        psetO = pawnsActiveOpponent(p, B.getColor());</para>
  <para>                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                System.out.println("\n\t\t\t\t" + M +"Sélection pion " + R + "A" + M + " (votre pion) : " + N);</para>
  <para>                                loopCount = 0;</para>
  <para/>
  <para/>
  <para/>
  <para>                                do {</para>
  <para>                                        A = askColorNumber(p);</para>
  <para>                                        loopCount++;</para>
  <para>                                }</para>
  <para>                                while(!isPawnInList(psetF, A) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                System.out.println("\n\t\t\t\t" + M +"Sélectionner pion " + R + "B" + M + " (adversaire) : " + N);</para>
  <para type="comment">                                // si désire permuter</para>
  <para>                                loopCount = 0;</para>
  <para>                                do {</para>
  <para>                                        B = askColorNumber(p);</para>
  <para>                                        loopCount++;</para>
  <para>                                }</para>
  <para>                                while(!isPawnInList(psetO, B) &amp;&amp; !b.isSafety(B.getPos(), B.getColor()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                        A = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                        B = psetO[Utils.randomChoice(psetO.length-1)];</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(psetF.length &gt; 2 &amp;&amp; willSplit) {</para>
  <para>                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                System.out.println("\n\t\t\t\t" + M +"Sélection pion " + R + "A" + M + " (4 cases) : " + N);</para>
  <para>                                loopCount = 0;</para>
  <para>                                do {</para>
  <para>                                        A = askNumberSameColor(p, turn);</para>
  <para>                                        loopCount++;</para>
  <para>                                }</para>
  <para>                                while(!isPawnInList(psetF, A) &amp;&amp; loopCount &lt; 4);</para>
  <para/>
  <para>                                System.out.println("\n\t\t\t\t" + M +"Sélectionner pion " + R + "B" + M + " (3 cases) : " + N);</para>
  <para type="comment">                                // si désire spliter</para>
  <para>                                loopCount = 0;</para>
  <para>                                do {</para>
  <para>                                        B = askNumberSameColor(p, turn);</para>
  <para>                                        loopCount++;</para>
  <para>                                }</para>
  <para>                                while(!isPawnInList(psetF, B) &amp;&amp; loopCount &lt; 4);</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                        A = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                        do {</para>
  <para>                                                B = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                        }</para>
  <para>                                        while(A.equals(B));</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para/>
  <para>                if(willSplit) { // peut avoir petit bug ici (pas noobproof)</para>
  <para>                        if(A.getColor() == B.getColor()) splitCount(p, b, A, B, 7, turn);</para>
  <para>                        else menuAskForAB(b, p, turn, willSplit);</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        permutePawns(b, A, B);</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne un pion *** USER INPUT pour couleur ET numéro</para>
  <para type="function">        default Pawn askColorNumber (Player[] p) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn A = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                String choice = "";</para>
  <para>                int loopCount;</para>
  <para/>
  <para>                System.out.print("\n\t\t\t\t" + M +"Sélectionner un pion " + E + " (Ex. : 2 rouge = R2 ou r2)" + M + " : " + Y);</para>
  <para>                loopCount = 0;</para>
  <para>                do {</para>
  <para>                        choice = scan.nextLine().toLowerCase();</para>
  <para>                        loopCount++;</para>
  <para>                }</para>
  <para>                while(!Utils.isStringValid(choice) &amp;&amp; loopCount &lt; 4);</para>
  <para/>
  <para>                if(choice.charAt(0) == 'r') {</para>
  <para>                        switch(Integer.parseInt(Character.toString(choice.charAt(1)))) {</para>
  <para>                                case 1:   return p[0].getSet()[0];</para>
  <para>                                case 2:   return p[0].getSet()[1];</para>
  <para>                                case 3:   return p[0].getSet()[2];</para>
  <para>                                case 4:   return p[0].getSet()[3];</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(choice.charAt(0) == 'b') {</para>
  <para>                        switch(Integer.parseInt(Character.toString(choice.charAt(1)))) {</para>
  <para>                                case 1:   return p[1].getSet()[0];</para>
  <para>                                case 2:   return p[1].getSet()[1];</para>
  <para>                                case 3:   return p[1].getSet()[2];</para>
  <para>                                case 4:   return p[1].getSet()[3];</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(choice.charAt(0) == 'y') {</para>
  <para>                        switch(Integer.parseInt(Character.toString(choice.charAt(1)))) {</para>
  <para>                                case 1:   return p[2].getSet()[0];</para>
  <para>                                case 2:   return p[2].getSet()[1];</para>
  <para>                                case 3:   return p[2].getSet()[2];</para>
  <para>                                case 4:   return p[2].getSet()[3];</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                else if(choice.charAt(0) == 'g') {</para>
  <para>                        switch(Integer.parseInt(Character.toString(choice.charAt(1)))) {</para>
  <para>                                case 1:   return p[3].getSet()[0];</para>
  <para>                                case 2:   return p[3].getSet()[1];</para>
  <para>                                case 3:   return p[3].getSet()[2];</para>
  <para>                                case 4:   return p[3].getSet()[3];</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return A;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne un pion de même couleur *** USER INPUT pour #</para>
  <para type="function">        default Pawn askNumberSameColor (Player[] p, int color) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn A = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                int choice = 0;</para>
  <para>                int loopCount;</para>
  <para/>
  <para>                System.out.print("\n\t\t\t\t" + M +"Sélectionner un pion (votre pion) : " + Y);</para>
  <para>                loopCount = 0;</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                                loopCount++;</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(choice &gt; 4 || choice &lt; 1 &amp;&amp; loopCount &lt; 4);</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   switch(choice) {</para>
  <para>                                              case 1:   return p[0].getSet()[0];</para>
  <para>                                              case 2:   return p[0].getSet()[1];</para>
  <para>                                              case 3:   return p[0].getSet()[2];</para>
  <para>                                              case 4:   return p[0].getSet()[3];</para>
  <para>                                              default:  return A;</para>
  <para>                                      }</para>
  <para>                        case 2:   switch(choice) {</para>
  <para>                                              case 1:   return p[1].getSet()[0];</para>
  <para>                                              case 2:   return p[1].getSet()[1];</para>
  <para>                                              case 3:   return p[1].getSet()[2];</para>
  <para>                                              case 4:   return p[1].getSet()[3];</para>
  <para>                                              default:  return A;</para>
  <para>                                      }</para>
  <para>                        case 3:   switch(choice) {</para>
  <para>                                              case 1:   return p[2].getSet()[0];</para>
  <para>                                              case 2:   return p[2].getSet()[1];</para>
  <para>                                              case 3:   return p[2].getSet()[2];</para>
  <para>                                              case 4:   return p[2].getSet()[3];</para>
  <para>                                              default:  return A;</para>
  <para>                                      }</para>
  <para>                        case 4:   switch(choice) {</para>
  <para>                                              case 1:   return p[3].getSet()[0];</para>
  <para>                                              case 2:   return p[3].getSet()[1];</para>
  <para>                                              case 3:   return p[3].getSet()[2];</para>
  <para>                                              case 4:   return p[3].getSet()[3];</para>
  <para>                                              default:  return A;</para>
  <para>                                      }</para>
  <para>                }</para>
  <para>                return A;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne boolean = true pour avancer et false pour reculer</para>
  <para type="function">        default boolean askFWorBW () {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.print("\n\t\t\t\t" + M +"Avancer de 10 cases (" + C + "1" + M + ") ou reculer de 1 case (" + C + "0" +                         M + ") : " + Y);</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid1(choice));</para>
  <para>                if(choice == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne boolean = true pour avancer et false pour sortir un pion de START (si disponible)</para>
  <para type="function">        default boolean askOutOrMove (Board b, Player[] p, int color) {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.print("\n\t\t\t\t" + M +"Avancer pion (" + C + "1" + M + ") ou sortir pion (" + C + "0" + M + ") : " + Y);</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid1(choice));</para>
  <para>                if(choice == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne boolean = true pour avancer et false pour spliter</para>
  <para type="function">        default boolean askGoOrSplit () {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.print("\n\t\t\t\t" + M +"Avancer pion (" + C + "1" + M + ") ou séparer entre deux pions (" + C + "0" +                         M + ") : " + Y);</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid1(choice));</para>
  <para>                if(choice == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne boolean = true pour avancer et false pour permuter</para>
  <para type="function">        default boolean askGoOrTrade () {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.print("\n\t\t\t\t" + M + "Avancer pion (" + C + "1" + M + ") ou échanger avec pion adversaire (" + C +                         "0" + M + ") : " + Y);</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid1(choice));</para>
  <para>                if(choice == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        default Pawn askForPartnerPawn (Player[] p, int color, Pawn[] setP) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn A = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                int choice = 0;</para>
  <para>                int loopCount;</para>
  <para/>
  <para>                System.out.print("\n\t\t\t\t" + M +"Sélectionner un pion (partenaire) : " + Y);</para>
  <para>                loopCount = 0;</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                                loopCount++;</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(choice &gt; 4 || choice &lt; 1 &amp;&amp; loopCount &lt; 4);</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   return p[p[0].getPartner()].getSet()[choice-1];</para>
  <para>                        case 2:   return p[p[1].getPartner()].getSet()[choice-1];</para>
  <para>                        case 3:   return p[p[2].getPartner()].getSet()[choice-1];</para>
  <para>                        case 4:   return p[p[3].getPartner()].getSet()[choice-1];</para>
  <para>                }</para>
  <para>                return A;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne boolean = true pour conserver joker ou false sinon</para>
  <para type="function">        default boolean askKeepOrElse () {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.print("\n\t\t\t" + M + "Conserver JOKER (" + C + "1"+ M + ") ou utiliser immédiatement (" + C + "0" +                 M + ") : " + Y);</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid1(choice));</para>
  <para>                if(choice == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne 1 pour sortir friendly de START ou 0 pour renvoyer pion adversaire</para>
  <para type="function">        default int askOutOrKick (Board b, Player[] p, int color) {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.print("\n\t\t\t\t" + M + "Sortir pion (" + C + "1" + M + ") ou renvoyer un adversaire (" + C + "0" + M +                 ") : " + Y);</para>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid1(choice));</para>
  <para>                return choice;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne pions actifs "friendly"</para>
  <para type="function">        default Pawn[] pawnsActiveFriendly (Player[] p, int color) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] pawns;</para>
  <para>                int n = 0;</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[0].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[1].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[2].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[3].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  pawns = new Pawn[1];</para>
  <para>                                      pawns[0] = temp;</para>
  <para>                }</para>
  <para>                return pawns;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le nombre de pions actifs de même couleur</para>
  <para type="function">        default int countActiveFriendly (Player[] p, int color) {return pawnsActiveFriendly(p, color).length;}</para>
  <para/>
  <para type="comment">        // retourne pions actifs des adversaires</para>
  <para type="function">        default Pawn[] pawnsActiveOpponent (Player[] p, int color) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] pawns;</para>
  <para>                int n = 0;</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[1].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[2].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[3].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[0].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[2].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[3].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[0].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[1].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[3].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[3].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[0].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[0].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[1].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[1].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(p[2].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[2].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  pawns = new Pawn[1];</para>
  <para>                                      pawns[0] = temp;</para>
  <para>                }</para>
  <para>                return pawns;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le nombre de pions actifs des adversaires</para>
  <para type="function">        default int countActiveOpponent (Player[] p, int color) {return pawnsActiveOpponent(p, color).length;}</para>
  <para>                </para>
  <para type="comment">        // retourne pions actifs du partner</para>
  <para type="function">        default Pawn[] pawnsActivePartner (Player[] p, int color) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] pawns;</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   switch(p[0].getPartner()) {</para>
  <para>                                              case 2:   pawns = pawnsActiveFriendly(p, 2);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:   pawns = pawnsActiveFriendly(p, 3);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:   pawns = pawnsActiveFriendly(p, 4);</para>
  <para>                                                            break;</para>
  <para>                                              default:  pawns = pawnsActiveFriendly(p, 0);</para>
  <para>                                                            break;</para>
  <para>                                      }</para>
  <para>                        case 2:   switch(p[1].getPartner()) {</para>
  <para>                                              case 1:   pawns = pawnsActiveFriendly(p, 1);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:   pawns = pawnsActiveFriendly(p, 3);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:   pawns = pawnsActiveFriendly(p, 4);</para>
  <para>                                                            break;</para>
  <para>                                              default:  pawns = pawnsActiveFriendly(p, 0);</para>
  <para>                                                            break;</para>
  <para>                                      }</para>
  <para>                        case 3:   switch(p[2].getPartner()) {</para>
  <para>                                              case 1:   pawns = pawnsActiveFriendly(p, 1);</para>
  <para>                                                            break;</para>
  <para>                                              case 2:   pawns = pawnsActiveFriendly(p, 2);</para>
  <para>                                                            break;</para>
  <para>                                              case 4:   pawns = pawnsActiveFriendly(p, 4);</para>
  <para>                                                            break;</para>
  <para>                                              default:  pawns = pawnsActiveFriendly(p, 0);</para>
  <para>                                                            break;</para>
  <para>                                      }</para>
  <para>                        case 4:   switch(p[3].getPartner()) {</para>
  <para>                                              case 1:   pawns = pawnsActiveFriendly(p, 1);</para>
  <para>                                                            break;</para>
  <para>                                              case 2:   pawns = pawnsActiveFriendly(p, 2);</para>
  <para>                                                            break;</para>
  <para>                                              case 3:   pawns = pawnsActiveFriendly(p, 3);</para>
  <para>                                                            break;</para>
  <para>                                              default:  pawns = pawnsActiveFriendly(p, 0);</para>
  <para>                                                            break;</para>
  <para>                                      }</para>
  <para>                        default:  pawns = new Pawn[1];</para>
  <para>                                      pawns[0] = temp;</para>
  <para>                }</para>
  <para>                return pawns;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne le nombre de pions actifs du partner</para>
  <para type="function">        default int countActivePartner (Player[] p, int color) {return pawnsActivePartner(p, color).length;}</para>
  <para/>
  <para type="comment">        // retourne pions dans START</para>
  <para type="function">        default Pawn[] pawnsOnStart (Player[] p, int color) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] pawns;</para>
  <para>                int n = 0;</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[0].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[0].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[0].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[1].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[1].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[1].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[2].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[2].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[2].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:   for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[3].getSet()[i].getIsActive()) n++;</para>
  <para>                                      }</para>
  <para>                                      if(n == 0) {</para>
  <para>                                              pawns = new Pawn[1];</para>
  <para>                                              pawns[0] = temp;</para>
  <para>                                              break;</para>
  <para>                                      }</para>
  <para>                                      pawns = new Pawn[n];</para>
  <para>                                      n = 0;</para>
  <para>                                      for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                                              if(!p[3].getSet()[i].getIsActive()) {</para>
  <para>                                                      pawns[n] = p[3].getSet()[i];</para>
  <para>                                                      n++;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  pawns = new Pawn[1];</para>
  <para>                                      pawns[0] = temp;</para>
  <para>                }</para>
  <para>                return pawns;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // déplace le pion (coeur)</para>
  <para type="function">        default boolean moveProcess (Player[] p, Board b, Pawn o, int n, int turn, boolean forw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn temp1 = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn temp2 = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] psetF = pawnsActiveFriendly(p, turn);</para>
  <para>                Pawn[] psetP = pawnsActivePartner(p, turn);</para>
  <para>                Pawn[] psetO = pawnsActiveOpponent(p, turn);</para>
  <para>                Coord compute = new Coord(DEFAULT);</para>
  <para>                Coord old = new Coord(DEFAULT);</para>
  <para>                boolean ok = false;</para>
  <para/>
  <para type="comment">                // calcul de la destination</para>
  <para>                if(forw) {</para>
  <para>                        compute.setCoord(Utils.computeCoordFW(o.getPos(), n, o.getColor()));</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        compute.setCoord(Utils.computeCoordBW(o.getPos(), n, turn));</para>
  <para>                }</para>
  <para/>
  <para type="comment">                // si destination est possible et pas occupée par friendly et n'est pas case fantôme</para>
  <para>                if(!compute.equals(o.getPos()) &amp;&amp; !b.isFriendly(o, compute) &amp;&amp; !isNoGo(compute, turn)) {</para>
  <para type="comment">                        // vérifie si case est occupée</para>
  <para>                        if(!b.isFree(compute)) {</para>
  <para type="comment">                                // retourne pion dans START</para>
  <para>                                b.goSTART(b.getPawnFromCoord(p, compute));</para>
  <para>                        }</para>
  <para type="comment">                        // vérifie si destination est un début de slide</para>
  <para>                        if(b.isOnSlide(compute) &amp;&amp; !b.isFriendlySlide(o, compute)) {</para>
  <para type="comment">                                // fait le "ménage" de la slide</para>
  <para>                                b.goSTART(p, compute);</para>
  <para type="comment">                                // ajoute le déplacement sur la slide</para>
  <para>                                compute.setCoord(Utils.computePawnSliding(o, compute));</para>
  <para>                        }</para>
  <para type="comment">                        // update position du pion si compute = HOME</para>
  <para>                        if(o.getColor() == 1 &amp;&amp; compute.equals(RHOME)) ok = b.sendHOME(p[0], o);</para>
  <para>                        else if(o.getColor() == 2 &amp;&amp; compute.equals(BHOME)) ok = b.sendHOME(p[1], o);</para>
  <para>                        else if(o.getColor() == 3 &amp;&amp; compute.equals(YHOME)) ok = b.sendHOME(p[2], o);</para>
  <para>                        else if(o.getColor() == 4 &amp;&amp; compute.equals(GHOME)) ok = b.sendHOME(p[3], o);</para>
  <para type="comment">                        // valide si HOME contient 4 pions, GAME OVER</para>
  <para>                        else {</para>
  <para type="comment">                                // déplace le pion</para>
  <para>                                old.setCoord(o.getPos());</para>
  <para>                                o.setPos(compute);</para>
  <para>                                if(forw) o.setCount(o.getCount() + n);</para>
  <para>                                else o.setCount(o.getCount() - 1); // carte 10</para>
  <para>                                b.update(o);</para>
  <para>                                b.update(old, 0);</para>
  <para>                        }</para>
  <para>                        if(ok) {</para>
  <para type="comment">                                // GAME OVER</para>
  <para>                                GameOver(p);</para>
  <para>                        }</para>
  <para>                        return true;</para>
  <para>                }</para>
  <para type="comment">                // pour mode coop</para>
  <para>                else if(n == 11 &amp;&amp; p[turn-1].getPartner() != 0 &amp;&amp; psetO[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // si il y a des pions partner actifs</para>
  <para>                        if(psetP.length &gt; 0 &amp;&amp; !psetP[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // si un seul partner</para>
  <para>                                if(psetP.length == 1 &amp;&amp; !psetP[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                        // un seul friendly actif</para>
  <para>                                        if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                permutePawns(b, psetF[0], psetP[0]);</para>
  <para>                                        }</para>
  <para type="comment">                                        // si plusieurs friendly actifs</para>
  <para>                                        if(psetF.length &gt; 1) {</para>
  <para>                                                do {</para>
  <para type="comment">                                                        // demander lequel échanger (friendly)</para>
  <para>                                                        temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                }</para>
  <para>                                                while(!isPawnInList(psetF, temp1));</para>
  <para>                                                if(isPawnInList(psetF, temp1)) {</para>
  <para>                                                        permutePawns(b, temp1, psetP[0]);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else {</para>
  <para type="comment">                                        // si plusieurs partners</para>
  <para>                                        if(psetP.length &gt; 1) {</para>
  <para type="comment">                                                // si un seul friendly</para>
  <para>                                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                        do {</para>
  <para type="comment">                                                                // demander lequel échanger (partner)</para>
  <para>                                                                temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                        }</para>
  <para>                                                        while(!isPawnInList(psetP, temp1));</para>
  <para>                                                        if(isPawnInList(psetP, temp1)) {</para>
  <para>                                                                permutePawns(b, temp1, psetF[0]);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para type="comment">                                                // si plusieurs friendly</para>
  <para>                                                if(psetF.length &gt; 1) {</para>
  <para>                                                        do {</para>
  <para type="comment">                                                                // demander lequel échanger (friendly)</para>
  <para>                                                                temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                        }</para>
  <para>                                                        while(!isPawnInList(psetF, temp1));</para>
  <para>                                                        do {</para>
  <para type="comment">                                                                // demander lequel échanger (partner)</para>
  <para>                                                                temp2 = askNumberSameColor(p, turn);</para>
  <para>                                                        }</para>
  <para>                                                        while(!isPawnInList(psetP, temp2));</para>
  <para type="comment">                                                        // valider pions</para>
  <para>                                                        if(isPawnInList(psetF, temp1) &amp;&amp; isPawnInList(psetP, temp2)) {</para>
  <para>                                                                permutePawns(b, temp1, temp2);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                return true;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // gestion de GAME OVER</para>
  <para type="function">        default void GameOver (Player[] p) {</para>
  <para>                for(int i = 0 ; i &lt; p.length ; i++) {</para>
  <para>                        if(p[i].countHome() == 4 &amp;&amp; p[i].getPartner() == 0) {</para>
  <para>                                WinnerIs(p[i], false);</para>
  <para>                                break;</para>
  <para>                        }</para>
  <para>                        else if(p[i].countHome() == 4 &amp;&amp; p[i].getPartner() != 0) {</para>
  <para>                                WinnerIs(p[i], true);</para>
  <para>                                break;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                System.out.println();</para>
  <para type="comment">                // si nouvelle partie</para>
  <para>                if(menuEndGame()) {</para>
  <para>                        Game newgame = new Game(false);</para>
  <para>                        newgame.playTurn();</para>
  <para>                }</para>
  <para type="comment">                // quitte le programme</para>
  <para>                else System.exit(0);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le gagnant</para>
  <para type="function">        default void WinnerIs (Player winner, boolean hasPartner) { </para>
  <para>                switch(winner.getColor()) {</para>
  <para>                        case 1:   System.out.println("\n\n\t\t\t\t\033[1;37m Le grand gagnant est \033[1;36m... \033[1;31mROUGE \033[1;37m!\033[0m\n");</para>
  <para>                                      if(hasPartner) {</para>
  <para>                                              switch(winner.getPartner()) {</para>
  <para>                                                      case 2:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;34mBLEU \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 3:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;33mJAUNE \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 4:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;32mVERT \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      scan.nextLine();</para>
  <para>                                      break;</para>
  <para>                        case 2:   System.out.println("\n\n\t\t\t\t\033[1;37m Le grand gagnant est \033[1;36m... \033[1;34mBLEU \033[1;37m!\033[0m\n");</para>
  <para>                                      if(hasPartner) {</para>
  <para>                                              switch(winner.getPartner()) {</para>
  <para>                                                      case 1:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;31mROUGE \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 3:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;33mJAUNE \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 4:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;32mVERT \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      scan.nextLine();</para>
  <para>                                      break;</para>
  <para>                        case 3:   System.out.println("\n\n\t\t\t\t\033[1;37m Le grand gagnant est \033[1;36m... \033[1;33mJAUNE \033[1;37m!\033[0m\n");</para>
  <para>                                      if(hasPartner) {</para>
  <para>                                              switch(winner.getPartner()) {</para>
  <para>                                                      case 1:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;31mROUGE \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 2:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;34mBLEU \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 4:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;32mVERT \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      scan.nextLine();</para>
  <para>                                      break;</para>
  <para>                        case 4:   System.out.println("\n\n\t\t\t\t\033[1;37m Le grand gagnant est \033[1;36m... \033[1;32mVERT \033[1;37m!\033[0m\n");</para>
  <para>                                      if(hasPartner) {</para>
  <para>                                              switch(winner.getPartner()) {</para>
  <para>                                                      case 1:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;31mROUGE \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 2:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;34mBLEU \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                                      case 3:   System.out.println("\n\n\t\t\t\t\033[1;37m Le meilleur partenaire est \033[1;36m... \033[1;33mJAUNE \033[1;37m!\033[0m\n");</para>
  <para>                                                                    break;</para>
  <para>                                              }</para>
  <para>                                      }</para>
  <para>                                      scan.nextLine();</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // menu fin de partie</para>
  <para type="function">        default boolean menuEndGame () {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.println(R+ "\n\n\t\t\t\t\t**" + M + " Fin de la partie " + R + "**");</para>
  <para>                System.out.println(G + "\t\t\t\t\t1." + R + "Nouvelle partie" + N);</para>
  <para>                System.out.println(G + "\t\t\t\t\t2." + R + "Quitter" + N);</para>
  <para>                System.out.print(M + "\t\t\t\t\t\tChoix : " + Y);</para>
  <para/>
  <para>                do {</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid2(choice));</para>
  <para>                if(choice == 2) return false;</para>
  <para>                return true;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide présence d'un pion dans une liste de pions</para>
  <para type="function">        default boolean isPawnInList (Pawn[] list, Pawn o) {</para>
  <para>                for(int i = 0 ; i &lt; list.length ; i++) {</para>
  <para>                        if(o.equals(list[i])) return true;</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // détermine si coordonnée est la case impossible pour une couleur</para>
  <para type="function">        default boolean isNoGo (Coord coord, int color) {</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   return coord.equals(RNOGO);</para>
  <para>                        case 2:   return coord.equals(BNOGO);</para>
  <para>                        case 3:   return coord.equals(YNOGO);</para>
  <para>                        case 4:   return coord.equals(GNOGO);</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy1.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.Pawn;</para>
  <para/>
  <para type="class">public class PickStrategy1 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {</para>
  <para>                Pawn[] psetF, psetS;</para>
  <para>                Pawn temp;</para>
  <para>                boolean choice = false;</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // recupère sets de pions</para>
  <para>                psetF = pawnsActiveFriendly(p, turn);</para>
  <para>                psetS = pawnsOnStart(p, turn);</para>
  <para type="comment">                // si aucun pion actif et pions dans START</para>
  <para>                if(p[turn-1].countStart() &gt; 0 &amp;&amp; psetF[0].getPos().equals(DEFAULT) &amp;&amp; !psetS[0].getPos().equals(DEFAULT)) {</para>
  <para>                        if(!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para type="comment">                                // renvoie adversaire</para>
  <para>                                b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                        }</para>
  <para type="comment">                        // sortir pion</para>
  <para>                        b.getOnStart(p, turn);</para>
  <para>                }</para>
  <para>                else {</para>
  <para type="comment">                        // si pions actifs et pions dans START</para>
  <para>                        if(!psetF[0].getPos().equals(DEFAULT) &amp;&amp; !psetS[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // si case départ libre (ou occupée par adversaire)</para>
  <para>                                if(b.isFree(b.getStartingPos(turn)) || (!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn)))) {</para>
  <para type="comment">                                        // si friendly sur case départ, avancer (choix imposé)</para>
  <para>                                        if(b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para>                                                choice = true;</para>
  <para>                                        }</para>
  <para type="comment">                                        // demander si avancer/sortir</para>
  <para>                                        else {</para>
  <para>                                                if(p[turn-1].getIsHuman()) choice = askOutOrMove(b, p, turn);</para>
  <para>                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para>                                        }</para>
  <para type="comment">                                        // sortir pion</para>
  <para>                                        if(!choice) {</para>
  <para>                                                if(!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para type="comment">                                                        // renvoie adversaire</para>
  <para>                                                        b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                                                }</para>
  <para>                                                b.getOnStart(p, turn);</para>
  <para>                                        }</para>
  <para type="comment">                                        // avancer pion</para>
  <para>                                        else {</para>
  <para type="comment">                                                // si un seul</para>
  <para>                                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                        moveProcess(p, b, psetF[0], n, turn, forw);</para>
  <para>                                                }</para>
  <para type="comment">                                                // si plusieurs</para>
  <para>                                                else if(psetF.length &gt; 1) {</para>
  <para>                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                loopCount = 0;</para>
  <para>                                                                do {</para>
  <para>                                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                                        loopCount++;</para>
  <para type="comment">                                                                        // valide que pion est dans la liste</para>
  <para>                                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                                process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                        }</para>
  <para>                                                        else {</para>
  <para>                                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else{</para>
  <para type="comment">                                        // si un seul actif, avancer</para>
  <para>                                        if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                moveProcess(p, b, psetF[0], n, turn, forw);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para type="comment">                                                // si plusieurs, demander lequel, avancer</para>
  <para>                                                if(psetF.length &gt; 1) {</para>
  <para>                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                loopCount = 0;</para>
  <para>                                                                do {</para>
  <para>                                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                                        loopCount++;</para>
  <para>                                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                                process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                        }</para>
  <para>                                                        else {</para>
  <para>                                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para type="comment">                        // si pions actifs mais aucun dans START</para>
  <para>                        else if(!psetF[0].getPos().equals(DEFAULT) &amp;&amp; psetS[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // si un seul, avancer</para>
  <para>                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, psetF[0], n, turn, forw);</para>
  <para>                                }</para>
  <para type="comment">                                // si plusieurs, demander lequel, avancer</para>
  <para>                                else if(psetF.length &gt; 1) {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do {</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para>                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                if(isPawnInList(psetF, temp)) </para>
  <para>                                                        process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy2.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy2 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {</para>
  <para>                Pawn[] psetF, psetS;</para>
  <para>                Pawn temp;</para>
  <para>                boolean choice = false;</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // recupère sets de pions</para>
  <para>                psetF = pawnsActiveFriendly(p, turn);</para>
  <para>                psetS = pawnsOnStart(p, turn);</para>
  <para type="comment">                // si aucun pion actif et pions dans START</para>
  <para>                if(p[turn-1].countStart() &gt; 0 &amp;&amp; psetF[0].getPos().equals(DEFAULT) &amp;&amp; !psetS[0].getPos().equals(DEFAULT)) {</para>
  <para>                        if(!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para type="comment">                                // renvoie adversaire</para>
  <para>                                b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                        }</para>
  <para type="comment">                        // sortir pion</para>
  <para>                        b.getOnStart(p, turn);</para>
  <para>                }</para>
  <para>                else {</para>
  <para type="comment">                        // si pions actifs et pions dans START</para>
  <para>                        if(!psetF[0].getPos().equals(DEFAULT) &amp;&amp; !psetS[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // si case départ libre</para>
  <para>                                if(b.isFree(b.getStartingPos(turn)) || (!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn)))) {</para>
  <para type="comment">                                        // si friendly sur case départ avancer (choix imposé)</para>
  <para>                                        if(b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para>                                                choice = true;</para>
  <para>                                        }</para>
  <para type="comment">                                        // demander si avancer/sortir</para>
  <para>                                        else {</para>
  <para>                                                if(p[turn-1].getIsHuman()) choice = askOutOrMove(b, p, turn);</para>
  <para>                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para>                                        }</para>
  <para type="comment">                                        // sortir pion</para>
  <para>                                        if(!choice) {</para>
  <para>                                                if(!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para type="comment">                                                        // renvoie adversaire</para>
  <para>                                                        b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                                                }</para>
  <para>                                                b.getOnStart(p, turn);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para type="comment">                                                // avancer pion (un seul actif)</para>
  <para>                                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                        moveProcess(p, b, psetF[0], n, turn, forw);</para>
  <para>                                                }</para>
  <para type="comment">                                                // si plusieurs</para>
  <para>                                                else if(psetF.length &gt; 1) {</para>
  <para>                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                loopCount = 0;</para>
  <para>                                                                do{</para>
  <para>                                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                                        loopCount++;</para>
  <para type="comment">                                                                        // valide que pion est dans la liste</para>
  <para>                                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                                process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                        }</para>
  <para>                                                        else {</para>
  <para>                                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else{</para>
  <para type="comment">                                        // si un seul actif, avancer</para>
  <para>                                        if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                moveProcess(p, b, psetF[0], n, turn, forw);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para type="comment">                                                // si plusieurs, demander lequel, avancer</para>
  <para>                                                if(psetF.length &gt; 1) {</para>
  <para>                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                loopCount = 0;</para>
  <para>                                                                do{ </para>
  <para>                                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                                        loopCount++;</para>
  <para>                                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                                process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                        }</para>
  <para>                                                        else {</para>
  <para>                                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para type="comment">                        // si pions actifs mais aucun dans START</para>
  <para>                        else if(!psetF[0].getPos().equals(DEFAULT) &amp;&amp; psetS[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // si un seul, avancer</para>
  <para>                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, psetF[0], n, turn, forw);</para>
  <para>                                }</para>
  <para type="comment">                                // si plusieurs, demander lequel, avancer</para>
  <para>                                else if(psetF.length &gt; 1) {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do{</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para>                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                if(isPawnInList(psetF, temp)) </para>
  <para>                                                        process = moveProcess(p, b, temp, n, turn, forw);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy3.java”</para>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy3 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] pset;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para>        </para>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                pset = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // vérifie si un seul ou plusieurs</para>
  <para>                        if(pset.length &gt; 0 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // un seul</para>
  <para>                                if(pset.length == 1 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, pset[0], n, turn, true);</para>
  <para>                                }</para>
  <para type="comment">                                // plusieurs, demander quel pion avancer</para>
  <para>                                else {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do {</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para>                                                        // si pion figure dans la liste de pions, avancer</para>
  <para>                                                        if(isPawnInList(pset, temp)) {</para>
  <para>                                                                if(isPawnInList(pset, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = pset[Utils.randomChoice(pset.length-1)];</para>
  <para>                                                if(isPawnInList(pset, temp)) {</para>
  <para>                                                        if(isPawnInList(pset, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy4.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy4 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] pset;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                pset = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // vérifie si un seul ou plusieurs</para>
  <para>                        if(pset.length &gt; 0 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // un seul</para>
  <para>                                if(pset.length == 1 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, pset[0], n, turn, true);</para>
  <para>                                }</para>
  <para type="comment">                                // plusieurs, demander quel pion avancer</para>
  <para>                                else {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do {</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para type="comment">                                                        // si pion figure dans la liste de pions, avancer</para>
  <para>                                                        if(isPawnInList(pset, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = pset[Utils.randomChoice(pset.length-1)];</para>
  <para>                                                if(isPawnInList(pset, temp)) {</para>
  <para>                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy5.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy5 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean fw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] pset;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                pset = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // vérifie si un seul ou plusieurs</para>
  <para>                        if(pset.length &gt; 0 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // un seul</para>
  <para>                                if(pset.length == 1 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, pset[0], n, turn, true);</para>
  <para>                                }</para>
  <para type="comment">                                // plusieurs, demander quel pion avancer</para>
  <para>                                else {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do {</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para type="comment">                                                        // si pion figure dans la liste de pions, avancer</para>
  <para>                                                        if(isPawnInList(pset, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = pset[Utils.randomChoice(pset.length-1)];</para>
  <para>                                                if(isPawnInList(pset, temp)) {</para>
  <para>                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy7.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy7 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean fw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] psetF;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean choice = false;</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                psetF = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // vérifie si un seul ou plusieurs</para>
  <para>                        if(psetF.length &gt; 0 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // un seul</para>
  <para>                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                }</para>
  <para type="comment">                                // plusieurs, demander avancer/spliter</para>
  <para>                                else {</para>
  <para>                                        if(p[turn-1].getIsHuman()) choice = askGoOrSplit();</para>
  <para>                                        else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para type="comment">                                        // si avancer</para>
  <para>                                        if(choice) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                        loopCount = 0;</para>
  <para>                                                        do {</para>
  <para type="comment">                                                                // demander quel pion avancer</para>
  <para>                                                                temp = askNumberSameColor(p, turn);</para>
  <para>                                                                loopCount++;</para>
  <para type="comment">                                                                // si pion figure dans la liste de pions, avancer</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                        while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                } </para>
  <para>                                        }</para>
  <para type="comment">                                        // si spliter</para>
  <para>                                        else {</para>
  <para>                                                menuAskForAB(b, p, turn, true);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy8.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy8 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean fw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] pset;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                pset = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // vérifie si un seul ou plusieurs</para>
  <para>                        if(pset.length &gt; 0) {</para>
  <para type="comment">                                // un seul</para>
  <para>                                if(pset.length == 1 &amp;&amp; !pset[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        moveProcess(p, b, pset[0], n, turn, true);</para>
  <para>                                }</para>
  <para type="comment">                                // plusieurs, demander quel pion avancer</para>
  <para>                                else {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do {</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para type="comment">                                                        // si pion figure dans la liste de pions, avancer</para>
  <para>                                                        if(isPawnInList(pset, temp)) { </para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = pset[Utils.randomChoice(pset.length-1)];</para>
  <para>                                                if(isPawnInList(pset, temp)) { </para>
  <para>                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy10.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy10 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n,int turn, boolean fw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] psetF;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean choice = false;</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                psetF = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // demande pour avancer/reculer</para>
  <para>                        if(psetF.length &gt; 0) {</para>
  <para type="comment">                                // si un seul</para>
  <para>                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                        // demande avancer ou reculer</para>
  <para>                                        if(!b.isOnOwnStart(psetF, turn)) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) choice = askFWorBW();</para>
  <para>                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para>                                        }</para>
  <para>                                        else choice = true;</para>
  <para type="comment">                                        // si avancer</para>
  <para>                                        if(choice) {</para>
  <para>                                                moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                        }</para>
  <para type="comment">                                        // si reculer (vérifie si pion sur SA case départ)</para>
  <para>                                        else {</para>
  <para>                                                if(!b.isOnOwnStart2(psetF[0], psetF[0].getColor())) {</para>
  <para>                                                        moveProcess(p, b, psetF[0], 1, turn, false);</para>
  <para>                                                }</para>
  <para type="comment">                                                // sinon on avance (choix imposé)</para>
  <para>                                                else moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // si plusieurs</para>
  <para>                                else {</para>
  <para type="comment">                                        // demande avancer ou reculer</para>
  <para>                                        if(!b.isOnOwnStart2(temp, temp.getColor())) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) choice = askFWorBW();</para>
  <para>                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para>                                        }</para>
  <para>                                        else choice = true;</para>
  <para type="comment">                                        // si avancer</para>
  <para>                                        if(choice) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                        loopCount = 0;</para>
  <para>                                                        do {</para>
  <para type="comment">                                                                // demander quel pion déplacer</para>
  <para>                                                                temp = askNumberSameColor(p, turn);</para>
  <para>                                                                loopCount++;</para>
  <para type="comment">                                                                // valide le pion choisi</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                        while(!process || (!isPawnInList(psetF, temp) &amp;&amp; temp.getIsHome()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para type="comment">                                        // si reculer</para>
  <para>                                        else {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                        loopCount = 0;</para>
  <para>                                                        do {</para>
  <para type="comment">                                                                // demander quel pion déplacer</para>
  <para>                                                                temp = askNumberSameColor(p, turn);</para>
  <para>                                                                loopCount++;</para>
  <para type="comment">                                                                // valide le pion choisi</para>
  <para>                                                                if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, 1, turn, false); </para>
  <para>                                                                }</para>
  <para>                                                        } </para>
  <para>                                                        while(!process || (!isPawnInList(psetF, temp) &amp;&amp; temp.getIsHome()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        temp = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                        if(isPawnInList(psetF, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, 1, turn, false);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                } </para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy11.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy11 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean fw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] psetF, psetO, psetP;</para>
  <para>                Pawn temp1 = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn temp2 = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean choice = false;</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                psetF = pawnsActiveFriendly(p, turn);</para>
  <para>                psetO = pawnsActiveOpponent(p, turn);</para>
  <para>                psetP = pawnsActivePartner(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!psetF[0].getPos().equals(DEFAULT) || !psetO[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // au moins un pion friendly actif</para>
  <para>                        if(!psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // au moins un pion adversaire actif</para>
  <para>                                if(!psetO[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                        // si sur case NO GO, avancer (choix imposé)</para>
  <para>                                        if(psetO.length == 1 &amp;&amp; !psetO[0].getPos().equals(DEFAULT) &amp;&amp; !isNoGo(psetO[0].getPos(), turn)) {</para>
  <para>                                                choice = true;</para>
  <para>                                        }</para>
  <para>                                        else{</para>
  <para type="comment">                                                // demande pour avancer/permuter avec adversaire</para>
  <para>                                                if(p[turn-1].getIsHuman()) choice = askGoOrTrade();</para>
  <para>                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para>                                        }</para>
  <para type="comment">                                        // si on permute</para>
  <para>                                        if(!choice) {</para>
  <para type="comment">                                                // un seul adversaire actif</para>
  <para>                                                if(psetO.length == 1 &amp;&amp; !psetO[0].getPos().equals(DEFAULT) &amp;&amp; !b.isSafety(psetO[0].getPos(),                                                         psetO[0].getColor())) {</para>
  <para type="comment">                                                        // un seul friendly actif</para>
  <para>                                                        if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT) &amp;&amp; !b.isSafety(psetF[0].getPos(), psetF[0].getColor())) {</para>
  <para>                                                                permutePawns(b, psetF[0], psetO[0]);</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // si plusieurs friendly actifs</para>
  <para>                                                        else if(psetF.length &gt; 1) {</para>
  <para>                                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para type="comment">                                                                                // demander lequel échanger (friendly)</para>
  <para>                                                                                temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                                                loopCount++;</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!isPawnInList(psetF, temp1) || b.isSafety(temp1.getPos(), temp1.getColor()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                }</para>
  <para>                                                                else temp1 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetF, temp1) &amp;&amp; !b.isSafety(temp1.getPos(), temp1.getColor())) {</para>
  <para>                                                                        permutePawns(b, temp1, psetO[0]);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para type="comment">                                                // si plusieurs adversaires actifs</para>
  <para>                                                else if(psetO.length &gt; 1) {</para>
  <para type="comment">                                                        // si un seul friendly actif et pas dans SAFETY</para>
  <para>                                                        if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT) &amp;&amp; !b.isSafety(psetF[0].getPos(), turn)) {</para>
  <para>                                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para type="comment">                                                                                // demander lequel échanger (adversaire)</para>
  <para>                                                                                temp2 = askColorNumber(p);</para>
  <para>                                                                                loopCount++;</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!isPawnInList(psetO, temp2) || b.isSafety(temp2.getPos(), temp2.getColor()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                }</para>
  <para>                                                                else temp2 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                if(isPawnInList(psetO, temp2) &amp;&amp; !b.isSafety(temp2.getPos(), temp2.getColor()) &amp;&amp; !b.isSafety(psetF[0].getPos(), psetF[0].getColor())) {</para>
  <para>                                                                        permutePawns(b, psetF[0], temp2);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // si plusieurs friendly actifs</para>
  <para>                                                        else if(psetF.length &gt; 1) {</para>
  <para>                                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para type="comment">                                                                                // demander lequel échanger (friendly)</para>
  <para>                                                                                temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                                                loopCount++;</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!isPawnInList(psetF, temp1) || b.isSafety(temp1.getPos(), temp1.getColor()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para type="comment">                                                                                // demander lequel échanger (adversaire)</para>
  <para>                                                                                temp2 = askColorNumber(p);</para>
  <para>                                                                                loopCount++;</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!isPawnInList(psetO, temp2) || b.isSafety(temp2.getPos(), temp2.getColor()) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                }</para>
  <para>                                                                else {</para>
  <para>                                                                        temp1 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                        temp2 = psetO[Utils.randomChoice(psetO.length-1)];</para>
  <para>                                                                }</para>
  <para>                                                                if(isPawnInList(psetF, temp1) &amp;&amp; !b.isSafety(temp1.getPos(), temp1.getColor()) &amp;&amp;</para>
  <para>                                                                isPawnInList(psetO, temp2) &amp;&amp; !b.isSafety(temp2.getPos(), temp2.getColor())) {</para>
  <para>                                                                        permutePawns(b, temp1, temp2);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para type="comment">                                        // si on avance</para>
  <para>                                        else {</para>
  <para type="comment">                                                // vérifie si un seul ou plusieurs</para>
  <para>                                                if(!psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                                        // un seul</para>
  <para>                                                        if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                                moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // plusieurs, demander quel pion avancer</para>
  <para>                                                        else { </para>
  <para>                                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para>                                                                                temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                                                loopCount++;</para>
  <para type="comment">                                                                                // si pion figure dans la liste de pions, avancer</para>
  <para>                                                                                if(isPawnInList(psetF, temp1)) {</para>
  <para>                                                                                        process = moveProcess(p, b, temp1, n, turn, true);</para>
  <para>                                                                                }</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!process &amp;&amp; !temp1.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                }</para>
  <para>                                                                else {</para>
  <para>                                                                        temp1 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                        if(isPawnInList(psetF, temp1)) {</para>
  <para>                                                                                process = moveProcess(p, b, temp1, n, turn, true);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                } </para>
  <para type="comment">                                // si aucun adversaire actif (aussi seul point d'entrée pour action "coop")</para>
  <para>                                else {</para>
  <para type="comment">                                        // si pion actifs, avancer (choix imposé)</para>
  <para type="comment">                                        // au moins un pion friendly actif</para>
  <para>                                        if(!psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                                // un seul friendly</para>
  <para>                                                if(psetF.length == 1 &amp;&amp; !psetF[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                                        // si mode coop</para>
  <para>                                                        if(p[turn-1].getPartner() != 0) {</para>
  <para type="comment">                                                                // si partners</para>
  <para>                                                                if(!psetP[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                                                        // si un seul pion partner</para>
  <para>                                                                        if(psetP.length == 1 &amp;&amp; !psetP[0].getPos().equals(DEFAULT)){</para>
  <para type="comment">                                                                                // propose de permuter</para>
  <para>                                                                                if(p[turn-1].getIsHuman()) choice = askGoOrTrade();</para>
  <para>                                                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para type="comment">                                                                                // avance</para>
  <para>                                                                                if(choice) {</para>
  <para>                                                                                        moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                                                                }</para>
  <para type="comment">                                                                                // permute</para>
  <para>                                                                                else {</para>
  <para>                                                                                        permutePawns(b, psetF[0], psetP[0]);</para>
  <para>                                                                                }</para>
  <para>                                                                        }</para>
  <para type="comment">                                                                        // si plusieurs pions partner</para>
  <para>                                                                        else {</para>
  <para>                                                                                if(p[turn-1].getIsHuman()) choice = askGoOrTrade();</para>
  <para>                                                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para type="comment">                                                                                // avance</para>
  <para>                                                                                if(choice) {</para>
  <para>                                                                                        moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                                                                }</para>
  <para type="comment">                                                                                // permute</para>
  <para>                                                                                else {</para>
  <para>                                                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                                                loopCount = 0;</para>
  <para>                                                                                                do{</para>
  <para>                                                                                                        temp1 = askForPartnerPawn(p, turn, psetP);</para>
  <para>                                                                                                        loopCount++;</para>
  <para>                                                                                                }</para>
  <para>                                                                                                while(!isPawnInList(psetP, temp1) &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                                        }</para>
  <para>                                                                                        else {</para>
  <para>                                                                                                temp1 = psetP[Utils.randomChoice(psetP.length-1)];</para>
  <para>                                                                                        }</para>
  <para>                                                                                        if(isPawnInList(psetP, temp1)) {</para>
  <para>                                                                                                permutePawns(b, psetF[0], temp1);</para>
  <para>                                                                                        }</para>
  <para>                                                                                }</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // si mode normal on doit avancer</para>
  <para>                                                        else {</para>
  <para>                                                                moveProcess(p, b, psetF[0], n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para type="comment">                                                // plusieurs friendly</para>
  <para>                                                else if(psetF.length &gt; 1) {</para>
  <para type="comment">                                                        // propose avancer ou permuter</para>
  <para>                                                        if(!psetP[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                                if(p[turn-1].getIsHuman()) choice = askGoOrTrade();</para>
  <para>                                                                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // si aucun pion partner on avance (choix imposé)</para>
  <para>                                                        else choice = true;</para>
  <para type="comment">                                                        // si avance</para>
  <para>                                                        if(choice) { </para>
  <para>                                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para>                                                                                temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                                                loopCount++;</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!temp1.getIsHome() &amp;&amp; !isPawnInList(psetF, temp1) &amp;&amp; loopCount &lt; 4);</para>
  <para type="comment">                                                                        // si pion figure dans la liste de pions, avancer</para>
  <para>                                                                        loopCount = 0;</para>
  <para>                                                                        do {</para>
  <para>                                                                                if(isPawnInList(psetF, temp1)) {</para>
  <para>                                                                                        process = moveProcess(p, b, temp1, n, turn, true);</para>
  <para>                                                                                }</para>
  <para>                                                                        loopCount++;</para>
  <para>                                                                        }</para>
  <para>                                                                        while(!process &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                                }</para>
  <para>                                                                else {</para>
  <para>                                                                        temp1 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                        if(isPawnInList(psetF, temp1)) {</para>
  <para>                                                                                process = moveProcess(p, b, temp1, n, turn, true);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // si permute</para>
  <para>                                                        else {</para>
  <para type="comment">                                                                // si un seul pion partner</para>
  <para>                                                                if(psetP.length == 1 &amp;&amp; !psetP[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                                loopCount = 0;</para>
  <para>                                                                                do {</para>
  <para type="comment">                                                                                        // demande quel pion friendly</para>
  <para>                                                                                        temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                                                        loopCount++;</para>
  <para>                                                                                }</para>
  <para>                                                                                while(!temp1.getIsHome() &amp;&amp; !isPawnInList(psetF, temp1) &amp;&amp; loopCount &lt;                                                                                         4);</para>
  <para>                                                                        }</para>
  <para>                                                                        else {</para>
  <para>                                                                                temp1 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                        }</para>
  <para>                                                                        if(isPawnInList(psetF, temp1)) {</para>
  <para>                                                                                permutePawns(b, temp1, psetP[0]);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para type="comment">                                                                // si plusieurs pions partner</para>
  <para>                                                                else if(psetP.length &gt; 1) {</para>
  <para>                                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                                loopCount = 0;</para>
  <para>                                                                                do {</para>
  <para type="comment">                                                                                        // demander quel pion friendly</para>
  <para>                                                                                        temp1 = askNumberSameColor(p, turn);</para>
  <para>                                                                                        loopCount++;</para>
  <para>                                                                                }</para>
  <para>                                                                                while(!temp1.getIsHome() &amp;&amp; !isPawnInList(psetF, temp1) &amp;&amp; loopCount &lt;                                                                                         4);</para>
  <para>                                                                                loopCount = 0;</para>
  <para>                                                                                do {</para>
  <para type="comment">                                                                                        // demander quel pion partner</para>
  <para>                                                                                        temp2 = askForPartnerPawn(p, turn, psetP);</para>
  <para>                                                                                        loopCount++;</para>
  <para>                                                                                }</para>
  <para>                                                                                while(!temp2.getIsHome() &amp;&amp; !isPawnInList(psetP, temp2) &amp;&amp; loopCount &lt;                                                                                         4);</para>
  <para>                                                                        }</para>
  <para>                                                                        else {</para>
  <para>                                                                                temp1 = psetF[Utils.randomChoice(psetF.length-1)];</para>
  <para>                                                                                temp2 = psetP[Utils.randomChoice(psetP.length-1)];</para>
  <para>                                                                        }</para>
  <para>                                                                        if(isPawnInList(psetF, temp1) &amp;&amp; isPawnInList(psetP, temp2)) {</para>
  <para>                                                                                permutePawns(b, temp1, temp2);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy12.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy12 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean fw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn[] pset;</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                boolean process = false;</para>
  <para>                int loopCount;</para>
  <para/>
  <para type="comment">                // récupère set de pions actifs</para>
  <para>                pset = pawnsActiveFriendly(p, turn);</para>
  <para type="comment">                // si pions actifs sur le board</para>
  <para>                if(!pset[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                        // vérifie si un seul ou plusieurs</para>
  <para>                        if(pset.length &gt; 0) {</para>
  <para type="comment">                                // un seul</para>
  <para>                                if(pset.length == 1) {</para>
  <para>                                        moveProcess(p, b, pset[0], n, turn, true);</para>
  <para>                                }</para>
  <para type="comment">                                // plusieurs, demander quel pion avancer</para>
  <para>                                else {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                loopCount = 0;</para>
  <para>                                                do{</para>
  <para>                                                        temp = askNumberSameColor(p, turn);</para>
  <para>                                                        loopCount++;</para>
  <para type="comment">                                                        // si pion figure dans la liste de pions, avancer</para>
  <para>                                                        if(isPawnInList(pset, temp)) {</para>
  <para>                                                                if(isPawnInList(pset, temp)) {</para>
  <para>                                                                        process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                while(!process &amp;&amp; !temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                temp = pset[Utils.randomChoice(pset.length-1)];</para>
  <para>                                                if(isPawnInList(pset, temp)) {</para>
  <para>                                                        if(isPawnInList(pset, temp)) {</para>
  <para>                                                                process = moveProcess(p, b, temp, n, turn, true);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategy13.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import piece.*;</para>
  <para/>
  <para type="class">public class PickStrategy13 implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn temp = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                Pawn[] psetO;</para>
  <para>                Pawn[] psetS;</para>
  <para>                boolean choice = false;</para>
  <para>                int choiceInt = 2;</para>
  <para>                Coord dest = new Coord(DEFAULT);</para>
  <para>                int loopCount;</para>
  <para/>
  <para>                switch(turn) {</para>
  <para>                        case 1:   dest.setCoord(RSTART);</para>
  <para>                                      break;</para>
  <para>                        case 2:   dest.setCoord(BSTART);</para>
  <para>                                      break;</para>
  <para>                        case 3:   dest.setCoord(YSTART);</para>
  <para>                                      break;</para>
  <para>                        case 4:   dest.setCoord(GSTART);</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para/>
  <para type="comment">                // récupère les pions actifs</para>
  <para>                psetO = pawnsActiveOpponent(p, turn);</para>
  <para>                psetS = pawnsOnStart(p, turn);</para>
  <para/>
  <para type="comment">                // en mode auto, si aucun adversaire et case départ non libre, garder</para>
  <para type="comment">                // si départ libre, sortir</para>
  <para type="comment">                // si les deux, random</para>
  <para/>
  <para type="comment">                // demande garder/utiliser</para>
  <para>                if(p[turn-1].getIsHuman()) choice = askKeepOrElse();</para>
  <para>                else choice = Utils.intToBoolean(Utils.randomChoice(1));</para>
  <para type="comment">                // si garder joker</para>
  <para>                if(choice) {</para>
  <para>                        p[turn-1].setJoker(b.getPickedCard());</para>
  <para>                }</para>
  <para type="comment">                // si utiliser</para>
  <para>                else {</para>
  <para type="comment">                        // si aucun adversaire actif</para>
  <para>                        if(psetO[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                // si des pions dans START</para>
  <para>                                if(!psetS[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                        // si case départ libre</para>
  <para>                                        if(b.isFree(b.getStartingPos(turn))) {</para>
  <para type="comment">                                                // sortir</para>
  <para>                                                if(p[turn-1].getIsHuman()) b.getOnStart(p, turn);</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                b.getOnStart(p, turn);</para>
  <para>                                                        }</para>
  <para type="comment">                                                        // sinon rien, pour maximiser l'expérience "random"</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para type="comment">                                        // si occupée mais par adversaire</para>
  <para>                                        else if(b.isStartFree(turn)) {</para>
  <para>                                                if(p[turn-1].getIsHuman())</para>
  <para type="comment">                                                        // renvoyer adversaire</para>
  <para>                                                        if(isPawnInList(psetO, b.getPawnFromCoord(p, b.getStartingPos(turn)))) {</para>
  <para>                                                                b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                                                                b.getOnStart(p, turn);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                if(isPawnInList(psetO, b.getPawnFromCoord(p, b.getStartingPos(turn)))) {</para>
  <para>                                                                        b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                                                                        b.getOnStart(p, turn);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // si adversaires actifs</para>
  <para>                                else if(!psetO[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                        // si aucun pion dans START</para>
  <para>                                        if(psetS[0].getPos().equals(DEFAULT)) {</para>
  <para type="comment">                                                // si un seul adversaire</para>
  <para>                                                if(psetO.length == 1 &amp;&amp; !psetO[0].getPos().equals(DEFAULT)) {</para>
  <para>                                                        if(p[turn-1].getIsHuman()) {</para>
  <para type="comment">                                                                // renvoyer ce pion</para>
  <para>                                                                b.goSTART(psetO[0]);</para>
  <para>                                                        }</para>
  <para>                                                        else {</para>
  <para>                                                                if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                        b.goSTART(psetO[0]);</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para type="comment">                                                // si plusieurs adversaires</para>
  <para>                                                else if(psetO.length &gt; 1) {</para>
  <para>                                                        if(p[turn-1].getIsHuman()) {</para>
  <para>                                                                loopCount = 0;</para>
  <para>                                                                do {</para>
  <para>                                                                        temp = askColorNumber(p);</para>
  <para>                                                                        loopCount++;        </para>
  <para>                                                                        if(isPawnInList(psetO, temp) &amp;&amp; !b.isSafety(psetO[0].getPos(), temp.getColor())) {</para>
  <para>                                                                                b.goSTART(temp);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                                while(!isPawnInList(psetO, temp) &amp;&amp; temp.getIsHome() &amp;&amp; loopCount &lt; 4);</para>
  <para>                                                        }</para>
  <para>                                                        else {</para>
  <para>                                                                if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                        temp = psetO[Utils.randomChoice(psetO.length-1)];</para>
  <para>                                                                        if(isPawnInList(psetO, temp) &amp;&amp; !b.isSafety(psetO[0].getPos(), temp.getColor())) {</para>
  <para>                                                                                b.goSTART(temp);</para>
  <para>                                                                        }</para>
  <para>                                                                }</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // si adversaires actifs et pions dans START</para>
  <para>                                if(!psetO[0].getPos().equals(DEFAULT) &amp;&amp; !psetS[0].getPos().equals(DEFAULT)) {</para>
  <para>                                        if(p[turn-1].getIsHuman()) {</para>
  <para type="comment">                                                // demander si sortir ou renvoyer</para>
  <para>                                                choiceInt = askOutOrKick(b, p, turn);</para>
  <para>                                        }</para>
  <para>                                        else {</para>
  <para>                                                choiceInt = Utils.randomChoice(1);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // si sortir</para>
  <para>                                if(choiceInt == 1) {</para>
  <para type="comment">                                        // si case départ libre</para>
  <para>                                        if(b.isFree(b.getStartingPos(turn))) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para type="comment">                                                        // sortir</para>
  <para>                                                        b.getOnStart(p, turn);</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                b.getOnStart(p, turn);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para type="comment">                                        // si occupée mais par adversaire</para>
  <para>                                        else if(!b.isFree(b.getStartingPos(turn)) &amp;&amp; !b.isFriendly(psetS[0], b.getStartingPos(turn))) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para type="comment">                                                        // renvoyer adversaire</para>
  <para>                                                        if(isPawnInList(psetO, b.getPawnFromCoord(p, b.getStartingPos(turn)))) {</para>
  <para>                                                                b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                                                                b.getOnStart(p, turn);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                if(isPawnInList(psetO, b.getPawnFromCoord(p, b.getStartingPos(turn)))) {</para>
  <para>                                                                        b.goSTART(b.getPawnFromCoord(p, b.getStartingPos(turn)));</para>
  <para>                                                                        b.getOnStart(p, turn);</para>
  <para>                                                                }</para>
  <para>                                                        } </para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // si renvoyer</para>
  <para>                                else if(choiceInt == 0) {</para>
  <para type="comment">                                        // si un seul adversaire</para>
  <para>                                        if(psetO.length == 1 &amp;&amp; !psetO[0].getPos().equals(DEFAULT) &amp;&amp; !b.isSafety(psetO[0].getPos(), psetO[0].getColor())) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para type="comment">                                                        // renvoyer ce pion</para>
  <para>                                                        b.goSTART(psetO[0]);</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                b.goSTART(psetO[0]);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para type="comment">                                        // si plusieurs adversaires</para>
  <para>                                        else if(psetO.length &gt; 1) {</para>
  <para>                                                if(p[turn-1].getIsHuman()) {</para>
  <para>                                                        loopCount = 0;</para>
  <para>                                                        do {</para>
  <para>                                                                temp = askColorNumber(p);</para>
  <para>                                                                loopCount++;</para>
  <para>                                                        }</para>
  <para>                                                        while(!isPawnInList(psetO, temp) &amp;&amp; loopCount &lt; 4); </para>
  <para>                                                        if(isPawnInList(psetO, temp)) {</para>
  <para>                                                                b.goSTART(temp);</para>
  <para>                                                        }</para>
  <para>                                                }</para>
  <para>                                                else {</para>
  <para>                                                        if(Utils.intToBoolean(Utils.randomChoice(1))) {</para>
  <para>                                                                temp = psetO[Utils.randomChoice(psetO.length-1)]; </para>
  <para>                                                                if(isPawnInList(psetO, temp)) {</para>
  <para>                                                                        b.goSTART(temp);</para>
  <para>                                                                }</para>
  <para>                                                        } </para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        } </para>
  <para type="function">                }</para>
  <para type="class">        }</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PickStrategyDEFAULT.java”</para>
  <para/>
  <para type="package">package game.cardalgo;</para>
  <para/>
  <para type="import">import board.Board;</para>
  <para type="import">import player.Player;</para>
  <para/>
  <para type="class">public class PickStrategyDEFAULT implements PickStrategy {</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Game.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.Board;</para>
  <para type="import">import game.cardalgo.*;</para>
  <para type="import">import player.Player;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import java.util.Scanner;</para>
  <para/>
  <para type="class">public class Game implements PickStrategy {</para>
  <para>        private GameSetup setup;</para>
  <para>        private Player[] p;</para>
  <para>        private Board b;</para>
  <para>        private Scanner scan;</para>
  <para>        private PickContext context;</para>
  <para>        private PickStrategy strategy;</para>
  <para/>
  <para type="function">        public Game (boolean splash) {</para>
  <para>                Utils.Clear();</para>
  <para>                setup = new GameSetup();</para>
  <para>                setup.setup(splash);</para>
  <para>                Utils.Clear();</para>
  <para>                p = setup.getPlayers();</para>
  <para>                b = setup.getBoard();</para>
  <para>                b.setTurn(setup.getTurn());</para>
  <para>                scan = new Scanner(System.in);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // fonction principale (tour à jouer)</para>
  <para type="function">        public void playTurn () {</para>
  <para>                while(true) {</para>
  <para>                        Utils.Clear();</para>
  <para>                        displayBoard();</para>
  <para type="comment">                        // vérifier si joker et actions</para>
  <para>                        jokerManager(p,b);</para>
  <para type="comment">                        // </para>
  <para>                        pleasePick();</para>
  <para>                        pickCard();</para>
  <para>                        invokeOp();</para>
  <para>                        Utils.Clear();</para>
  <para>                        displayBoard();</para>
  <para>                        if(b.getPickedCard().getNumber() != 2) {</para>
  <para>                                b.setTurn();</para>
  <para>                        }</para>
  <para>                        pleaseContinue();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para type="comment">        // gestion du joker si présent</para>
  <para type="function">        private void jokerManager (Player[] p, Board b) {</para>
  <para type="comment">                // vérifier si joker et actions</para>
  <para>                if(!Utils.getPlayer(p, b.getTurn()).isJokerNULL()) {</para>
  <para>                        if(Utils.getPlayer(p, b.getTurn()).countJoker() &gt; 0) {</para>
  <para type="comment">                                // si "human"</para>
  <para>                                if(p[b.getTurn()-1].getIsHuman()) {</para>
  <para type="comment">                                        // demander si utiliser avant de piger</para>
  <para>                                        if(askUseJoker() == 1) {</para>
  <para>                                                context = new PickContext(new PickStrategy13(), b, p, 13, b.getTurn(), true);</para>
  <para>                                                b.setPickContext(context);</para>
  <para>                                                b.movePawn();</para>
  <para>                                                drop(); </para>
  <para>                                        }</para>
  <para>                                }</para>
  <para type="comment">                                // si "auto"</para>
  <para>                                else {</para>
  <para>                                        context = new PickContext(new PickStrategy13(), b, p, 13, b.getTurn(), true);</para>
  <para>                                        b.setPickContext(context);</para>
  <para>                                        b.movePawn();</para>
  <para>                                        drop(); </para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // remet le joker dans dropDeck</para>
  <para type="function">        private void drop () {b.dropJoker(p[b.getTurn()-1].getJoker());}</para>
  <para/>
  <para type="comment">        // attente de saisie clavier pour piger</para>
  <para type="function">        private void pleasePick () {</para>
  <para>                if(p[b.getTurn()-1].getIsHuman()) {</para>
  <para>                        switch(b.getTurn()) {</para>
  <para>                                case 1:   System.out.print("\n\t\t\t\t\t" + R + " Piger une carte ..." + N);</para>
  <para>                                              break;</para>
  <para>                                case 2:   System.out.print("\n\t\t\t\t\t" + B + " Piger une carte ..." + N);</para>
  <para>                                              break;</para>
  <para>                                case 3:   System.out.print("\n\t\t\t\t\t" + Y + " Piger une carte ..." + N);</para>
  <para>                                              break;</para>
  <para>                                case 4:   System.out.print("\n\t\t\t\t\t" + G + " Piger une carte ..." + N);</para>
  <para>                                              break;</para>
  <para>                                default:  break;</para>
  <para>                        }</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // attente de saisie clavier pour continuer</para>
  <para type="function">        private void pleaseContinue () {</para>
  <para>                if(p[b.getTurn()-1].getIsHuman()) {</para>
  <para>                        System.out.print("\n\t\t\t\t" + M + " Appuyer sur ENTRÉE pour jouer" + C + " ..." + N);</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // attente de saisie clavier pour joker (utiliser ou non)</para>
  <para type="function">        private int askUseJoker () {</para>
  <para>                int choice = 0;</para>
  <para>        </para>
  <para>                if(p[b.getTurn()-1].getIsHuman()) {</para>
  <para>                        System.out.println("\n\t\t\t\t\t" + M + "Utiliser JOKER ?");</para>
  <para>                        System.out.println("\n\t\t\t\t\t" + G + "1." + R + "Oui" + N);</para>
  <para>                        System.out.println("\n\t\t\t\t\t" + G + "2." + R + "Non" + N);</para>
  <para>                        do {</para>
  <para>                                System.out.print("\n\t\t\t\t\t\t" + B + "Choix : " + Y);</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                                scan.nextLine();</para>
  <para>                        }</para>
  <para>                        while(!Utils.isNumberValid2(choice));</para>
  <para>                        return choice;</para>
  <para>                }</para>
  <para>                else {</para>
  <para>                        do {</para>
  <para>                                choice = Utils.randomChoice(2);</para>
  <para>                        }</para>
  <para>                        while(choice &lt; 1 || choice &gt; 2); </para>
  <para>                        return choice;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // pige une carte et affiche sur le board</para>
  <para type="function">        private void pickCard () {</para>
  <para>                b.pickCard();</para>
  <para>                b.dropCard();</para>
  <para>                Utils.Clear();</para>
  <para>                displayBoard();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // déplacement du pion (invoque PickContext.operation)</para>
  <para type="function">        private void invokeOp () {</para>
  <para>                context = new PickContext(setStrategy(), b, p, b.getPickedCard().getNumber(), b.getTurn(), true);</para>
  <para>                b.setPickContext(context);</para>
  <para>                b.movePawn();</para>
  <para type="function">        }</para>
  <para type="comment">        // configuration de la stratégie</para>
  <para type="function">        private PickStrategy setStrategy () {</para>
  <para>                switch(b.getPickedCard().getNumber()) {</para>
  <para>                        case 1:   strategy = new PickStrategy1();</para>
  <para>                                      break;</para>
  <para>                        case 2:   strategy = new PickStrategy2();</para>
  <para>                                      break;</para>
  <para>                        case 3:   strategy = new PickStrategy3();</para>
  <para>                                      break;</para>
  <para>                        case 4:   strategy = new PickStrategy4();</para>
  <para>                                      break;</para>
  <para>                        case 5:   strategy = new PickStrategy5();</para>
  <para>                                      break;</para>
  <para>                        case 7:   strategy = new PickStrategy7();</para>
  <para>                                      break;</para>
  <para>                        case 8:   strategy = new PickStrategy8();</para>
  <para>                                      break;</para>
  <para>                        case 10:  strategy = new PickStrategy10();</para>
  <para>                                      break;</para>
  <para>                        case 11:  strategy = new PickStrategy11();</para>
  <para>                                      break;</para>
  <para>                        case 12:  strategy = new PickStrategy12();</para>
  <para>                                      break;</para>
  <para>                        case 13:  strategy = new PickStrategy13();</para>
  <para>                                      break;</para>
  <para>                        default:  strategy = new PickStrategyDEFAULT();</para>
  <para>                }</para>
  <para>                return strategy;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // affiche le(s) board(s)</para>
  <para type="function">        private void displayBoard () {</para>
  <para>                b.displayBoard(p, b.getTurn());</para>
  <para>                // pour les tests</para>
  <para>                //b.displaySituation();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // implementation vide (pour interface PickStrategy)</para>
  <para type="function">        public void algorithm (Board b, Player[] p, int n, int turn, boolean forw) {}</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GameConstants.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.Coord;</para>
  <para/>
  <para type="class">public interface GameConstants {</para>
  <para>        public static final Coord RBASE1 = new Coord(12, 10);</para>
  <para>        public static final Coord RBASE2 = new Coord(12, 11);</para>
  <para>        public static final Coord RBASE3 = new Coord(13, 10);</para>
  <para>        public static final Coord RBASE4 = new Coord(13, 11);</para>
  <para/>
  <para>        public static final Coord BBASE1 = new Coord(10, 3);</para>
  <para>        public static final Coord BBASE2 = new Coord(11, 3); </para>
  <para>        public static final Coord BBASE3 = new Coord(10, 2);</para>
  <para>        public static final Coord BBASE4 = new Coord(11, 2);</para>
  <para/>
  <para>        public static final Coord YBASE1 = new Coord(3, 5);</para>
  <para>        public static final Coord YBASE2 = new Coord(3, 4); </para>
  <para>        public static final Coord YBASE3 = new Coord(2, 5);</para>
  <para>        public static final Coord YBASE4 = new Coord(2, 4);</para>
  <para/>
  <para>        public static final Coord GBASE1 = new Coord(5, 12);</para>
  <para>        public static final Coord GBASE2 = new Coord(4, 12); </para>
  <para>        public static final Coord GBASE3 = new Coord(5, 13);</para>
  <para>        public static final Coord GBASE4 = new Coord(4, 13);</para>
  <para/>
  <para>        public static final Coord RSHORT_START = new Coord(15, 14);</para>
  <para>        public static final Coord RSHORT_END = new Coord(15, 11); </para>
  <para>        public static final Coord RLONG_START = new Coord(15, 6);</para>
  <para>        public static final Coord RLONG_END = new Coord(15, 2);</para>
  <para/>
  <para>        public static final Coord BSHORT_START = new Coord(14, 0);</para>
  <para>        public static final Coord BSHORT_END = new Coord(11, 0); </para>
  <para>        public static final Coord BLONG_START = new Coord(6, 0);</para>
  <para>        public static final Coord BLONG_END = new Coord(2, 0);</para>
  <para/>
  <para>        public static final Coord YSHORT_START = new Coord(0, 1);</para>
  <para>        public static final Coord YSHORT_END = new Coord(0, 4); </para>
  <para>        public static final Coord YLONG_START = new Coord(0, 9);</para>
  <para>        public static final Coord YLONG_END = new Coord(0, 13);</para>
  <para/>
  <para>        public static final Coord GSHORT_START = new Coord(1, 15);</para>
  <para>        public static final Coord GSHORT_END = new Coord(4, 15); </para>
  <para>        public static final Coord GLONG_START = new Coord(9, 15);</para>
  <para>        public static final Coord GLONG_END = new Coord(13, 15);</para>
  <para/>
  <para/>
  <para>        public static final Coord RSTART = RSHORT_END;</para>
  <para>        public static final Coord BSTART = BSHORT_END;</para>
  <para>        public static final Coord YSTART = YSHORT_END;</para>
  <para>        public static final Coord GSTART = GSHORT_END;</para>
  <para/>
  <para>        public static final Coord RSAFETY1 = new Coord(14, 13);</para>
  <para>        public static final Coord RSAFETY2 = new Coord(13, 13); </para>
  <para>        public static final Coord RSAFETY3 = new Coord(12, 13);</para>
  <para>        public static final Coord RSAFETY4 = new Coord(11, 13);</para>
  <para>        public static final Coord RSAFETY5 = new Coord(10, 13);</para>
  <para/>
  <para>        public static final Coord BSAFETY1 = new Coord(13, 1);</para>
  <para>        public static final Coord BSAFETY2 = new Coord(13, 2); </para>
  <para>        public static final Coord BSAFETY3 = new Coord(13, 3);</para>
  <para>        public static final Coord BSAFETY4 = new Coord(13, 4);</para>
  <para>        public static final Coord BSAFETY5 = new Coord(13, 5);</para>
  <para/>
  <para>        public static final Coord YSAFETY1 = new Coord(1, 2);</para>
  <para>        public static final Coord YSAFETY2 = new Coord(2, 2); </para>
  <para>        public static final Coord YSAFETY3 = new Coord(3, 2);</para>
  <para>        public static final Coord YSAFETY4 = new Coord(4, 2);</para>
  <para>        public static final Coord YSAFETY5 = new Coord(5, 2);</para>
  <para/>
  <para>        public static final Coord GSAFETY1 = new Coord(2, 14);</para>
  <para>        public static final Coord GSAFETY2 = new Coord(2, 13); </para>
  <para>        public static final Coord GSAFETY3 = new Coord(2, 12);</para>
  <para>        public static final Coord GSAFETY4 = new Coord(2, 11);</para>
  <para>        public static final Coord GSAFETY5 = new Coord(2, 10);</para>
  <para/>
  <para type="comment">        // case précédente aux safeties</para>
  <para>        public static final Coord R_TURNLIMIT = new Coord(15, 13);</para>
  <para>        public static final Coord B_TURNLIMIT = new Coord(13, 0);</para>
  <para>        public static final Coord Y_TURNLIMIT = new Coord(0, 2);</para>
  <para>        public static final Coord G_TURNLIMIT = new Coord(2, 15);</para>
  <para/>
  <para>        public static final Coord RHOME = new Coord(9, 13);</para>
  <para>        public static final Coord BHOME = new Coord(13, 6);</para>
  <para>        public static final Coord YHOME = new Coord(6, 2);</para>
  <para>        public static final Coord GHOME = new Coord(2, 9);</para>
  <para/>
  <para>        public static final Coord RNOGO = new Coord(15, 12);</para>
  <para>        public static final Coord BNOGO = new Coord(12, 0);</para>
  <para>        public static final Coord YNOGO = new Coord(0, 3);</para>
  <para>        public static final Coord GNOGO = new Coord(3, 15);</para>
  <para/>
  <para>        public static final Coord DEFAULT = new Coord(9, 9); </para>
  <para>        public static final Coord INFINITE = new Coord(7, 7);</para>
  <para/>
  <para>        public static final int RED = 1;</para>
  <para>        public static final int BLUE = 2;</para>
  <para>        public static final int YELLOW = 3;</para>
  <para>        public static final int GREEN = 4;</para>
  <para>        public static final int EMPTY = 0;</para>
  <para/>
  <para>        public static final String R = "\033[1;31m"; // fg rouge</para>
  <para>        public static final String B = "\033[1;34m"; // fg bleu</para>
  <para>        public static final String Y = "\033[1;33m"; // fg jaune</para>
  <para>        public static final String G = "\033[1;32m"; // fg vert</para>
  <para>        public static final String E = "\033[1;95m"; // fg bright magenta</para>
  <para>        public static final String M = "\033[1;35m"; // fg magenta</para>
  <para>        public static final String C = "\033[1;36m"; // fg cyan</para>
  <para>        public static final String N = "\033[0m"; // normal (reset)</para>
  <para>        public static final String W = "\033[1;97m"; // fg blanc</para>
  <para>        public static final String BK = "\033[1;30m"; // fg noir</para>
  <para/>
  <para>        public static final String RR = "\033[1;101m"; // bg rouge</para>
  <para>        public static final String BB = "\033[1;104m"; // bg bleu</para>
  <para>        public static final String YY = "\033[1;103m"; // bg jaune</para>
  <para>        public static final String GG = "\033[1;102m"; // bg vert</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“GameSetup.java”</para>
  <para/>
  <para type="package">package game;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import player.*;</para>
  <para type="import">import player.creator.*;</para>
  <para type="import">import util.Utils;</para>
  <para type="import">import java.util.InputMismatchException;</para>
  <para/>
  <para type="import">import java.util.Scanner;</para>
  <para/>
  <para type="class">public class GameSetup implements GameConstants {</para>
  <para>        private Board b;</para>
  <para>        private Player[] p;</para>
  <para>        private Player p1, p2, p3, p4;</para>
  <para>        private int turn;</para>
  <para>        private Scanner scan;</para>
  <para>        private int mode;</para>
  <para/>
  <para type="function">        public GameSetup () {</para>
  <para>                Init();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        private void Init () {</para>
  <para>                mode = -1;</para>
  <para>                scan = new Scanner(System.in);</para>
  <para type="comment">                // création du board</para>
  <para>                b = new Board();</para>
  <para type="comment">                // création des joueurs (et des pions)</para>
  <para>                AbstractCreator creator = new CreatorRED();</para>
  <para>                p1 = creator.createPlayer();</para>
  <para>                creator = new CreatorBLUE();</para>
  <para>                p2 = creator.createPlayer();</para>
  <para>                creator = new CreatorYELLOW();</para>
  <para>                p3 = creator.createPlayer();</para>
  <para>                creator = new CreatorGREEN();</para>
  <para>                p4 = creator.createPlayer();</para>
  <para>                Player[] p_ = {p1, p2, p3, p4};</para>
  <para>                p = p_;</para>
  <para type="comment">                // update de situation pour initialiser les positions des pions</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) p[i].updateSituation(b);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // fonction principale (menus)</para>
  <para type="function">        public void setup (boolean splash) {</para>
  <para>                if(splash) showSplash();</para>
  <para>                mode = menuMode(); // 1: normal et 2: coop</para>
  <para>                menuPlayers();</para>
  <para>                if(mode == 2) menuCoopPairing();</para>
  <para>                menuFirstToPlay();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // getters - setters</para>
  <para type="function">        public int getTurn () {return turn;}</para>
  <para type="function">        public int getMode () {return mode;}</para>
  <para type="function">        public Player[] getPlayers () {return p;}</para>
  <para type="function">        public Board getBoard () {return b;}</para>
  <para/>
  <para type="comment">        // menu MODE</para>
  <para type="function">        private int menuMode () {</para>
  <para>                int choice = 0;</para>
  <para/>
  <para>                System.out.println(R + "** " + E + "Sélectionner le mode" + R + " **" + N);</para>
  <para>                System.out.println(G + "1. " + E + "Mode " + C + "NORMAL" + N);</para>
  <para>                System.out.println(G + "2. " + E + "Mode " + C + "COOP" + N);</para>
  <para>                do {</para>
  <para>                        System.out.print(B + "\tChoix : " + Y);</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        } </para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid2(choice));</para>
  <para>                return choice; </para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // menu joueurs</para>
  <para type="function">        private void menuPlayers () {</para>
  <para>                String choice;</para>
  <para/>
  <para>                System.out.println(R + "\n** " + E + "Sélectionner les joueurs ([" + C + "H" + E + "]umain ou [" + C + "A" + E + "]uto)" + R + " **" + N);</para>
  <para>                System.out.print(R + "ROUGE " + E + "[" + C + "H" + E + "] / [" + C + "A" + E + "] : " + Y);</para>
  <para>                do {choice = scan.nextLine().toLowerCase();}</para>
  <para>                while(!typeCheck(choice));</para>
  <para>                setType(p[0], choice);</para>
  <para/>
  <para>                System.out.print(B + "BLEU " + E + "[" + C + "H" + E + "] / [" + C + "A" + E + "] : " + Y);</para>
  <para>                do {choice = scan.nextLine().toLowerCase();}</para>
  <para>                while(!typeCheck(choice));</para>
  <para>                setType(p[1], choice);</para>
  <para/>
  <para>                System.out.print(Y + "JAUNE " + E + "[" + C + "H" + E + "] / [" + C + "A" + E + "] : " + Y);</para>
  <para>                do {choice = scan.nextLine().toLowerCase();}</para>
  <para>                while(!typeCheck(choice));</para>
  <para>                setType(p[2], choice);</para>
  <para/>
  <para>                System.out.print(G + "VERT " + E + "[" + C + "H" + E + "] / [" + C + "A" + E + "] : " + Y);</para>
  <para>                do {choice = scan.nextLine().toLowerCase();}</para>
  <para>                while(!typeCheck(choice));</para>
  <para>                setType(p[3], choice);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide la saisie du type (H/A)</para>
  <para type="function">        private boolean typeCheck (String s) {return s.equals("h") || s.equals("a");}</para>
  <para/>
  <para type="comment">        // update les joueurs (H/A)</para>
  <para type="function">        private void setType (Player player, String s) {</para>
  <para>                if(s.equals("h")) player.setIsHuman(true);</para>
  <para>                else player.setIsHuman(false);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // menu de jumelage Coop (retourne la couleur avec laquelle ROUGE est jumelée)</para>
  <para type="function">        private void menuCoopPairing () {</para>
  <para>                int choice = 0;</para>
  <para>                System.out.println(R + "\n** " + E + "Sélectionner partenaire de " + E + RR + "ROUGE" + N + R + " **" + N);</para>
  <para>                System.out.println(G + "1. " + B + "BLEU" + N);</para>
  <para>                System.out.println(G + "2. " + Y + "JAUNE" + N);</para>
  <para>                System.out.println(G + "3. " + G + "VERT" + N);</para>
  <para>                do {</para>
  <para>                        System.out.print(B + "\tChoix : " + Y);</para>
  <para>                        try {</para>
  <para>                                choice = scan.nextInt();</para>
  <para>                        }</para>
  <para>                        catch(InputMismatchException e) {}</para>
  <para>                        scan.nextLine();</para>
  <para>                }</para>
  <para>                while(!Utils.isNumberValid3(choice));</para>
  <para>                computeTeams(choice);</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // calcul des équipes pour mode Coop</para>
  <para type="function">        private void computeTeams (int redPartner) {</para>
  <para>                p[0].setPartner(redPartner);</para>
  <para>                p[redPartner].setPartner(1);</para>
  <para>                switch(redPartner) {</para>
  <para>                        case 2:   p[2].setPartner(4);</para>
  <para>                                      p[3].setPartner(3);</para>
  <para>                                      break;</para>
  <para>                        case 3:   p[1].setPartner(4);</para>
  <para>                                      p[3].setPartner(2);</para>
  <para>                                      break;</para>
  <para>                        case 4:   p[1].setPartner(3);</para>
  <para>                                      p[2].setPartner(2);</para>
  <para>                                      break;</para>
  <para>                }</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // menu sélection du premier joueur (retourne couleur)</para>
  <para type="function">        private void menuFirstToPlay () {</para>
  <para>                int[] num = new int[4];</para>
  <para>                </para>
  <para>                System.out.println(R + "\n** " + E + "Sélectionner le premier joueur" + R + " **" + N);</para>
  <para>                System.out.print(R + "ROUGE" + N);</para>
  <para>                num[0] = Utils.getRandomInt();</para>
  <para>                System.out.print(C + "\t" + num[0] + "\t");</para>
  <para>                System.out.print(M + "Appuyer sur ENTRÉE ... ");</para>
  <para>                scan.nextLine();</para>
  <para>                System.out.print(B + "BLEU" + N);</para>
  <para>                num[1] = Utils.getRandomInt();</para>
  <para>                System.out.print(C + "\t" + num[1] + "\t");</para>
  <para>                System.out.print(M + "Appuyer sur ENTRÉE ... ");</para>
  <para>                scan.nextLine();</para>
  <para>                System.out.print(Y + "JAUNE" + N);</para>
  <para>                num[2] = Utils.getRandomInt();</para>
  <para>                System.out.print(C + "\t" + num[2] + "\t");</para>
  <para>                System.out.print(M + "Appuyer sur ENTRÉE ... ");</para>
  <para>                scan.nextLine();</para>
  <para>                System.out.print(G + "VERT" + N);</para>
  <para>                num[3] = Utils.getRandomInt();</para>
  <para>                System.out.print(C + "\t" + num[3] + "\t");</para>
  <para>                System.out.print(M + "Appuyer sur ENTRÉE ... ");</para>
  <para>                scan.nextLine();</para>
  <para type="comment">                // retient l'index du max</para>
  <para>                int j = 0;</para>
  <para>                for(int i = 0 ; i &lt; num.length-1 ; i++) {</para>
  <para>                        if(num[j] &lt; num[i+1]) j = i+1;</para>
  <para>                }</para>
  <para>                turn = j+1;</para>
  <para>                System.out.println();</para>
  <para>                switch(turn) {</para>
  <para>                        case 1:   System.out.println(E + "\tLe joueur " + R + "ROUGE" + E + " débute !" + N);</para>
  <para>                                      System.out.print(M + "\tAppuyer sur ENTRÉE" + R + "..." + N);</para>
  <para>                                      break;</para>
  <para>                        case 2:   System.out.println(E + "\tLe joueur " + B + "BLEU" + E + " débute !" + N);</para>
  <para>                                      System.out.print(M + "\tAppuyer sur ENTRÉE" + B + "..." + N); </para>
  <para>                                      break;</para>
  <para>                        case 3:   System.out.println(E + "\tLe joueur " + Y + "JAUNE" + E + " débute !" + N);</para>
  <para>                                      System.out.print(M + "\tAppuyer sur ENTRÉE" + Y + "..." + N);</para>
  <para>                                      break;</para>
  <para>                        case 4:   System.out.println(E + "\tLe joueur " + G + "VERT" + E + " débute !" + N);</para>
  <para>                                      System.out.print(M + "\tAppuyer sur ENTRÉE" + G + "..." + N); </para>
  <para>                                      break;</para>
  <para>                        default:  break;</para>
  <para>                }</para>
  <para>                scan.nextLine();</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // splashscreen</para>
  <para type="function">        private void showSplash () {</para>
  <para>                System.out.println(R + " ###### " + B + " ####### " + Y + " ####### " + G + " ####### " + C + " #### #### " + G + " ##### ");</para>
  <para>                System.out.println(R + " ############# " + B + " ############## " + Y + " ############# " + G + " ############# " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + " ################# " + B + " ################### " + Y + " ################ " + G + " ################ " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + " ####### ###### " + B + " ####### ####### " + Y + " ####### ###### " + G + " ####### ###### " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + "###### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + "##### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + "##### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + "###### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### ###### " + G + " #######");</para>
  <para>                System.out.println(R + "####### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### ##### " + G + " #######");</para>
  <para>                System.out.println(R + " ######### " + B + " ###### ###### " + Y + " ####### ####### " + G + " ####### ####### " + C + " ###### ##### " + G + " #######");</para>
  <para>                System.out.println(R + " ############## " + B + " ###### ###### " + Y + " ################## " + G + " ################## " + C + " ############ " + G + " #######");</para>
  <para>                System.out.println(R + " ############## " + B + " ###### ###### " + Y + " ################ " + G + " ################ " + C + " ######## " + G + " #######");</para>
  <para>                System.out.println(R + " ######## " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### " + G + " #######");</para>
  <para>                System.out.println(R + " ####### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### " + G + " #######");</para>
  <para>                System.out.println(R + " ###### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### " + G + " ##### ");</para>
  <para>                System.out.println(R + " ###### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### " + G + " ### ");</para>
  <para>                System.out.println(R + " ###### " + B + " ###### ###### " + Y + " ###### ###### " + G + " ###### ###### " + C + " ###### ");</para>
  <para>                System.out.println(R + "###### ####### " + B + " ####### ####### " + Y + " ###### ##### " + G + " ###### ##### " + C + " ###### "); </para>
  <para>                System.out.println(R + " ################## " + B + " ################### " + Y + " ###### #####" + G + " ###### #####" + C + " ###### " + R + " #### ");</para>
  <para>                System.out.println(R + " ############## " + B + " ############## " + Y + " ###### #####" + G + " ###### #####" + C + " ###### " + R + " ###### ");</para>
  <para>                System.out.println(R + " ####### " + B + " ####### " + Y + " ###### #####" + G + " ###### #####" + C + " ###### " + R + " #### ");</para>
  <para>                System.out.println();</para>
  <para>                System.out.print(M + "\t\t\t\t\t\t\tAppuyer sur ENTRÉE ..." + N);</para>
  <para>                scan.nextLine();</para>
  <para>                Utils.Clear();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Pawn.java”</para>
  <para/>
  <para type="package">package piece;</para>
  <para/>
  <para type="import">import board.Coord;</para>
  <para type="import">import game.GameConstants;</para>
  <para/>
  <para type="class">public class Pawn implements GameConstants {</para>
  <para>        private int number;</para>
  <para>        private int count;</para>
  <para>        private int color;</para>
  <para>        private boolean isActive;</para>
  <para>        private boolean isHome;</para>
  <para>        private Coord pos;</para>
  <para/>
  <para type="comment">        // getters et setters</para>
  <para type="function">        public int getNumber () {return number;}</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 int getColor () {return color;}</para>
  <para type="function">        public void setColor (int n) {color = n;}</para>
  <para type="function">        public boolean getIsActive () {return isActive;}</para>
  <para type="function">        public void setIsActive (boolean n) {isActive = n;}</para>
  <para type="function">        public boolean getIsHome () {return isHome;}</para>
  <para type="function">        public void setIsHome (boolean n) {isHome = n;}</para>
  <para type="function">        public Coord getPos () {return pos;}</para>
  <para type="function">        public void setPos (Coord coord) {pos.setCoord(coord);}</para>
  <para type="function">        public void setPos (int X, int Y) {pos.setX(X); pos.setY(Y);}</para>
  <para/>
  <para type="comment">        // constructeur</para>
  <para type="function">        public Pawn (int num, int color_, Coord coord) {</para>
  <para>                number = num;</para>
  <para>                count = 0;</para>
  <para>                color = color_;</para>
  <para>                isActive = false;</para>
  <para>                isHome = false;</para>
  <para>                pos = coord;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // utilisé comme valeur par défaut pour les tableaux de Pawn[]</para>
  <para type="function">        public Pawn () {pos = DEFAULT;}</para>
  <para/>
  <para type="function">        public boolean equals (Pawn o) {</para>
  <para>                if(o == null) return false;</para>
  <para>                return o.isActive == isActive &amp;&amp; o.isHome == isHome &amp;&amp; o.pos == pos &amp;&amp;</para>
  <para>                o.color == color &amp;&amp; o.count == count &amp;&amp; o.number == number;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PawnFactory.java”</para>
  <para/>
  <para type="package">package piece;</para>
  <para/>
  <para type="import">import board.Coord;</para>
  <para/>
  <para type="class">public class PawnFactory {</para>
  <para type="function">        public Pawn createPawn (int number, int color, Coord coord) {</para>
  <para>                return new Pawn(number, color, coord);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“AbstractCreator.java”</para>
  <para/>
  <para type="package">package player.creator;</para>
  <para/>
  <para type="import">import player.*;</para>
  <para/>
  <para type="class">public abstract class AbstractCreator {</para>
  <para>        public abstract Player factoryMethod ();</para>
  <para/>
  <para type="function">        public Player createPlayer () {</para>
  <para>                return factoryMethod();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“CreatorBLUE.java”</para>
  <para/>
  <para type="package">package player.creator;</para>
  <para/>
  <para type="import">import player.*;</para>
  <para/>
  <para type="class">public class CreatorBLUE extends AbstractCreator {</para>
  <para type="function">        public Player factoryMethod () {</para>
  <para>                return new PlayerBLUE();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“CreatorGREEN.java”</para>
  <para/>
  <para type="package">package player.creator;</para>
  <para/>
  <para type="import">import player.*;</para>
  <para/>
  <para type="class">public class CreatorGREEN extends AbstractCreator {</para>
  <para type="function">        public Player factoryMethod () {</para>
  <para>                return new PlayerGREEN();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“CreatorRED.java”</para>
  <para/>
  <para type="package">package player.creator;</para>
  <para/>
  <para type="import">import player.*;</para>
  <para/>
  <para type="class">public class CreatorRED extends AbstractCreator {</para>
  <para type="function">        public Player factoryMethod () {</para>
  <para>                return new PlayerRED();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“CreatorYELLOW.java”</para>
  <para/>
  <para type="package">package player.creator;</para>
  <para/>
  <para type="import">import player.*;</para>
  <para/>
  <para type="class">public class CreatorYELLOW extends AbstractCreator {</para>
  <para type="function">        public Player factoryMethod () {</para>
  <para>                return new PlayerYELLOW();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Player.java”</para>
  <para/>
  <para type="package">package player;</para>
  <para/>
  <para type="import">import piece.Pawn;</para>
  <para type="import">import board.Board;</para>
  <para type="import">import game.GameConstants;</para>
  <para type="import">import deck.Card;</para>
  <para/>
  <para type="class">public interface Player extends GameConstants {</para>
  <para type="function">        abstract int getColor ();</para>
  <para type="function">        abstract void setIsHuman (boolean b);</para>
  <para type="function">        abstract boolean getIsHuman ();</para>
  <para type="function">        abstract void setIsActive (boolean b);</para>
  <para type="function">        abstract boolean getIsActive ();</para>
  <para type="function">        abstract Pawn[] getSet (); </para>
  <para type="function">        abstract boolean equals (Player o);</para>
  <para type="function">        abstract int countHome ();</para>
  <para type="function">        abstract int countStart ();</para>
  <para type="function">        abstract void updateSituation (Board b);</para>
  <para type="function">        abstract void initPawnsOnStart ();</para>
  <para type="function">        abstract int getPartner ();</para>
  <para type="function">        abstract void setPartner (int partner_); </para>
  <para type="function">        abstract Card getJoker ();</para>
  <para type="function">        abstract void setJoker (Card joker);</para>
  <para type="function">        abstract int countJoker ();</para>
  <para type="function">        abstract boolean isJokerNULL ();</para>
  <para/>
  <para type="comment">        // renvoie un set de pions actifs sur le board</para>
  <para type="function">        default Pawn[] getActiveSet () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(getSet()[i].getIsActive()) n++;</para>
  <para>                }</para>
  <para>                Pawn[] as = new Pawn[n];</para>
  <para>                n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(getSet()[i].getIsActive()) {</para>
  <para>                                as[n] = getSet()[i];</para>
  <para>                                n++;</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return as;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PlayerDEFAULT.java”</para>
  <para/>
  <para type="package">package player;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import piece.*;</para>
  <para type="import">import deck.Card;</para>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="class">public class PlayerDEFAULT implements Player{</para>
  <para>        private int color = 2;</para>
  <para>        private int partner = 0;</para>
  <para>        private int sorry = 0;</para>
  <para>        private boolean isActive = false;</para>
  <para>        private boolean isHuman = false;</para>
  <para>        private Pawn[] pawnSet = new Pawn[4];</para>
  <para>        private LinkedList&lt;Card&gt; jokers;</para>
  <para/>
  <para type="function">        public PlayerDEFAULT () {}</para>
  <para/>
  <para type="function">        public void initPawnsOnStart () {}</para>
  <para type="function">        public boolean equals (Player o) {return false;}</para>
  <para type="function">        public int countHome () {return 0;}</para>
  <para type="function">        public void updateSituation (Board b) {}</para>
  <para/>
  <para type="function">        public Pawn getNextPawnToGetOut () {</para>
  <para>                PawnFactory factory = new PawnFactory();</para>
  <para>                Pawn next = factory.createPawn(0, 0, DEFAULT);</para>
  <para>                return next;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int getSorry () {return sorry;}</para>
  <para type="function">        public void incrSorry () {}</para>
  <para type="function">        public void decrSorry () {}</para>
  <para type="function">        public int getColor () {return color;}</para>
  <para type="function">        public void setIsHuman (boolean b) {}</para>
  <para type="function">        public boolean getIsHuman () {return isHuman;}</para>
  <para type="function">        public void setIsActive (boolean b) {}</para>
  <para type="function">        public int countStart () {return 0;}</para>
  <para type="function">        public boolean getIsActive () {return isActive;}</para>
  <para type="function">        public Pawn[] getSet () {return pawnSet;}</para>
  <para type="function">        public int getPartner () {return partner;}</para>
  <para type="function">        public void setPartner (int partner_) {}</para>
  <para type="function">        public void setJoker (Card joker) {}</para>
  <para type="function">        public Card getJoker () {return jokers.getFirst();}</para>
  <para type="function">        public int countJoker () {return jokers.size();}</para>
  <para/>
  <para type="function">        public boolean isJokerNULL () {</para>
  <para>                if(jokers == null) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PlayerBLUE.java”</para>
  <para/>
  <para type="package">package player;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import piece.*;</para>
  <para type="import">import deck.Card;</para>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="class">public class PlayerBLUE implements Player {</para>
  <para>        private int color = 2;</para>
  <para>        private int partner = 0;</para>
  <para>        private boolean isActive = false;</para>
  <para>        private boolean isHuman = false;</para>
  <para>        private Pawn[] pawnSet = new Pawn[4];</para>
  <para>        private PawnFactory factory = new PawnFactory();</para>
  <para>        private LinkedList&lt;Card&gt; jokers;</para>
  <para/>
  <para type="function">        public PlayerBLUE () {</para>
  <para>                for(int i = 0 ; i &lt; pawnSet.length ; i++) {</para>
  <para>                        pawnSet[i] = factory.createPawn(i+1, color, new Coord(DEFAULT));</para>
  <para>                }</para>
  <para>                initPawnsOnStart();</para>
  <para>                jokers = new LinkedList&lt;Card&gt;();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void initPawnsOnStart () {</para>
  <para>                pawnSet[0].setPos(BBASE1);</para>
  <para>                pawnSet[1].setPos(BBASE2);</para>
  <para>                pawnSet[2].setPos(BBASE3);</para>
  <para>                pawnSet[3].setPos(BBASE4);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public boolean equals (Player o) {</para>
  <para>                return color == o.getColor() &amp;&amp; isActive == o.getIsActive() &amp;&amp; isHuman == o.getIsHuman() &amp;&amp; partner == o.getPartner();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countHome () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countStart () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(!pawnSet[i].getIsActive() &amp;&amp; !pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void updateSituation (Board b) {</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) b.update(pawnSet[i]);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int getColor () {return color;}</para>
  <para type="function">        public void setIsHuman (boolean b) {isHuman = b;}</para>
  <para type="function">        public boolean getIsHuman () {return isHuman;}</para>
  <para type="function">        public void setIsActive (boolean b) {isActive = b;}</para>
  <para type="function">        public boolean getIsActive () {return isActive;}</para>
  <para type="function">        public Pawn[] getSet () {return pawnSet;}</para>
  <para type="function">        public int getPartner () {return partner;}</para>
  <para type="function">        public void setPartner (int partner_) {partner = partner_;}</para>
  <para type="function">        public void setJoker (Card joker) {jokers.add(joker);}</para>
  <para type="function">        public int countJoker () {return jokers.size();}</para>
  <para/>
  <para type="function">        public boolean isJokerNULL () {</para>
  <para>                if(jokers == null || jokers.isEmpty()) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Card getJoker () {</para>
  <para>                if(!jokers.isEmpty()) {</para>
  <para>                        Card temp = jokers.getFirst();</para>
  <para>                        jokers.remove(0); </para>
  <para>                        return temp;</para>
  <para>                }</para>
  <para>                return new Card(0);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PlayerGREEN.java”</para>
  <para/>
  <para type="package">package player;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import piece.*;</para>
  <para type="import">import deck.Card;</para>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="class">public class PlayerGREEN implements Player {</para>
  <para>        private int color = 4;</para>
  <para>        private int partner = 0;</para>
  <para>        private boolean isActive = false;</para>
  <para>        private boolean isHuman = false;</para>
  <para>        private Pawn[] pawnSet = new Pawn[4];</para>
  <para>        private PawnFactory factory = new PawnFactory();</para>
  <para>        private LinkedList&lt;Card&gt; jokers;</para>
  <para/>
  <para type="function">        public PlayerGREEN () {</para>
  <para>                for(int i = 0 ; i &lt; pawnSet.length ; i++) {</para>
  <para>                        pawnSet[i] = factory.createPawn(i+1, color, new Coord(DEFAULT));</para>
  <para>                }</para>
  <para>                initPawnsOnStart();</para>
  <para>                jokers = new LinkedList&lt;Card&gt;();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void initPawnsOnStart () {</para>
  <para>                pawnSet[0].setPos(GBASE1);</para>
  <para>                pawnSet[1].setPos(GBASE2);</para>
  <para>                pawnSet[2].setPos(GBASE3);</para>
  <para>                pawnSet[3].setPos(GBASE4);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public boolean equals (Player o) {</para>
  <para>                return color == o.getColor() &amp;&amp; isActive == o.getIsActive() &amp;&amp; isHuman == o.getIsHuman() &amp;&amp; partner == o.getPartner();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countHome () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countStart () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(!pawnSet[i].getIsActive() &amp;&amp; !pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void updateSituation (Board b) {</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) b.update(pawnSet[i]);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int getColor () {return color;}</para>
  <para type="function">        public void setIsHuman (boolean b) {isHuman = b;}</para>
  <para type="function">        public boolean getIsHuman () {return isHuman;}</para>
  <para type="function">        public void setIsActive (boolean b) {isActive = b;}</para>
  <para type="function">        public boolean getIsActive () {return isActive;}</para>
  <para type="function">        public Pawn[] getSet () {return pawnSet;}</para>
  <para type="function">        public int getPartner () {return partner;}</para>
  <para type="function">        public void setPartner (int partner_) {partner = partner_;}</para>
  <para type="function">        public void setJoker (Card joker) {jokers.add(joker);}</para>
  <para type="function">        public int countJoker () {return jokers.size();}</para>
  <para/>
  <para type="function">        public boolean isJokerNULL () {</para>
  <para>                if(jokers == null || jokers.isEmpty()) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Card getJoker () {</para>
  <para>                if(!jokers.isEmpty()) {</para>
  <para>                        Card temp = jokers.getFirst();</para>
  <para>                        jokers.remove(0); </para>
  <para>                        return temp;</para>
  <para>                }</para>
  <para>                return new Card(0);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PlayerRED.java”</para>
  <para/>
  <para type="package">package player;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import piece.*;</para>
  <para type="import">import deck.Card;</para>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="class">public class PlayerRED implements Player {</para>
  <para>        private int color = 1;</para>
  <para>        private int partner = 0;</para>
  <para>        private boolean isActive = false;</para>
  <para>        private boolean isHuman = false;</para>
  <para>        private Pawn[] pawnSet = new Pawn[4];</para>
  <para>        private PawnFactory factory = new PawnFactory();</para>
  <para>        private LinkedList&lt;Card&gt; jokers;</para>
  <para/>
  <para type="function">        public PlayerRED () {</para>
  <para>                for(int i = 0 ; i &lt; pawnSet.length ; i++) {</para>
  <para>                        pawnSet[i] = factory.createPawn(i+1, color, new Coord(DEFAULT));</para>
  <para>                }</para>
  <para>                initPawnsOnStart();</para>
  <para>                jokers = new LinkedList&lt;Card&gt;();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void initPawnsOnStart () {</para>
  <para>                pawnSet[0].setPos(RBASE1);</para>
  <para>                pawnSet[1].setPos(RBASE2);</para>
  <para>                pawnSet[2].setPos(RBASE3);</para>
  <para>                pawnSet[3].setPos(RBASE4);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public boolean equals (Player o) {</para>
  <para>                if(o == null) return false;</para>
  <para>                return color == o.getColor() &amp;&amp; isActive == o.getIsActive() &amp;&amp; isHuman == o.getIsHuman() &amp;&amp; partner == o.getPartner();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countHome () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countStart () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(!pawnSet[i].getIsActive() &amp;&amp; !pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void updateSituation (Board b) {</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) b.update(pawnSet[i]);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int getColor () {return color;}</para>
  <para type="function">        public void setIsHuman (boolean b) {isHuman = b;}</para>
  <para type="function">        public boolean getIsHuman () {return isHuman;}</para>
  <para type="function">        public void setIsActive (boolean b) {isActive = b;}</para>
  <para type="function">        public boolean getIsActive () {return isActive;}</para>
  <para type="function">        public Pawn[] getSet () {return pawnSet;}</para>
  <para type="function">        public int getPartner () {return partner;}</para>
  <para type="function">        public void setPartner (int partner_) {partner = partner_;}</para>
  <para type="function">        public void setJoker (Card joker) {jokers.add(joker);}</para>
  <para type="function">        public int countJoker () {return jokers.size();}</para>
  <para/>
  <para type="function">        public boolean isJokerNULL () {</para>
  <para>                if(jokers == null || jokers.isEmpty()) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Card getJoker () {</para>
  <para>                if(!jokers.isEmpty()) {</para>
  <para>                        Card temp = jokers.getFirst();</para>
  <para>                        jokers.remove(0); </para>
  <para>                        return temp;</para>
  <para>                }</para>
  <para>                return new Card(0);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“PlayerYELLOW.java”</para>
  <para/>
  <para type="package">package player;</para>
  <para/>
  <para type="import">import board.*;</para>
  <para type="import">import piece.*;</para>
  <para type="import">import deck.Card;</para>
  <para type="import">import java.util.*;</para>
  <para/>
  <para type="class">public class PlayerYELLOW implements Player {</para>
  <para>        private int color = 3;</para>
  <para>        private int partner = 0;</para>
  <para>        private boolean isActive = false;</para>
  <para>        private boolean isHuman = false;</para>
  <para>        private Pawn[] pawnSet = new Pawn[4];</para>
  <para>        private PawnFactory factory = new PawnFactory();</para>
  <para>        private LinkedList&lt;Card&gt; jokers;</para>
  <para/>
  <para type="function">        public PlayerYELLOW () {</para>
  <para>                for(int i = 0 ; i &lt; pawnSet.length ; i++) {</para>
  <para>                        pawnSet[i] = factory.createPawn(i+1, color, new Coord(DEFAULT));</para>
  <para>                }</para>
  <para>                initPawnsOnStart();</para>
  <para>                jokers = new LinkedList&lt;Card&gt;();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void initPawnsOnStart () {</para>
  <para>                pawnSet[0].setPos(YBASE1);</para>
  <para>                pawnSet[1].setPos(YBASE2);</para>
  <para>                pawnSet[2].setPos(YBASE3);</para>
  <para>                pawnSet[3].setPos(YBASE4);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public boolean equals (Player o) {</para>
  <para>                return color == o.getColor() &amp;&amp; isActive == o.getIsActive() &amp;&amp; isHuman == o.getIsHuman() &amp;&amp; partner == o.getPartner();</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countHome () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int countStart () {</para>
  <para>                int n = 0;</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) {</para>
  <para>                        if(!pawnSet[i].getIsActive() &amp;&amp; !pawnSet[i].getIsHome()) n++;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public void updateSituation (Board b) {</para>
  <para>                for(int i = 0 ; i &lt; 4 ; i++) b.update(pawnSet[i]);</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public int getColor () {return color;}</para>
  <para type="function">        public void setIsHuman (boolean b) {isHuman = b;}</para>
  <para type="function">        public boolean getIsHuman () {return isHuman;}</para>
  <para type="function">        public void setIsActive (boolean b) {isActive = b;}</para>
  <para type="function">        public boolean getIsActive () {return isActive;}</para>
  <para type="function">        public Pawn[] getSet () {return pawnSet;}</para>
  <para type="function">        public int getPartner () {return partner;}</para>
  <para type="function">        public void setPartner (int partner_) {partner = partner_;}</para>
  <para type="function">        public void setJoker (Card joker) {jokers.add(joker);}</para>
  <para type="function">        public int countJoker () {return jokers.size();}</para>
  <para/>
  <para type="function">        public boolean isJokerNULL () {</para>
  <para>                if(jokers == null || jokers.isEmpty()) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="function">        public Card getJoker () {</para>
  <para>                if(!jokers.isEmpty()) {</para>
  <para>                        Card temp = jokers.getFirst();</para>
  <para>                        jokers.remove(0); </para>
  <para>                        return temp;</para>
  <para>                }</para>
  <para>                return new Card(0);</para>
  <para type="function">        }</para>
  <para type="class">}</para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Utils.java”</para>
  <para/>
  <para type="package">package util;</para>
  <para/>
  <para type="import">import java.io.IOException;</para>
  <para type="import">import board.Coord;</para>
  <para type="import">import piece.Pawn;</para>
  <para type="import">import game.GameConstants;</para>
  <para type="import">import player.*;</para>
  <para/>
  <para type="class">public class Utils implements GameConstants {</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>                        }</para>
  <para>                        else {</para>
  <para>                                System.out.print("\033\143");</para>
  <para>                        }</para>
  <para>                } </para>
  <para>                catch (IOException | InterruptedException ex) {}</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne #safety d'une coordonnée (sinon 0)</para>
  <para type="function">        public static int coordSafetyNumber (Coord coord) {</para>
  <para>                if(coord.equals(RSAFETY1) || coord.equals(BSAFETY1) || coord.equals(YSAFETY1) || coord.equals(GSAFETY1)) return 1;</para>
  <para>                else if(coord.equals(RSAFETY2) || coord.equals(BSAFETY2) || coord.equals(YSAFETY2) || coord.equals(GSAFETY2)) return 2;</para>
  <para>                else if(coord.equals(RSAFETY3) || coord.equals(BSAFETY3) || coord.equals(YSAFETY3) || coord.equals(GSAFETY3)) return 3;</para>
  <para>                else if(coord.equals(RSAFETY4) || coord.equals(BSAFETY4) || coord.equals(YSAFETY4) || coord.equals(GSAFETY4)) return 4;</para>
  <para>                else if(coord.equals(RSAFETY5) || coord.equals(BSAFETY5) || coord.equals(YSAFETY5) || coord.equals(GSAFETY5)) return 5;</para>
  <para>                else return 0;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // calcule les coordonnées vers l'avant</para>
  <para type="function">        public static Coord computeCoordFW (Coord start, int deckNum, int color) {</para>
  <para>                Coord end = new Coord(DEFAULT);</para>
  <para>                int x = start.getX();</para>
  <para>                int y = start.getY();</para>
  <para>                int n = 0;</para>
  <para/>
  <para type="comment">                // si coordonnée est dans un safety</para>
  <para>                if(start.equals(RSAFETY1) || start.equals(RSAFETY2) || start.equals(RSAFETY3) ||</para>
  <para>                start.equals(RSAFETY4) || start.equals(RSAFETY5) || start.equals(BSAFETY1) || </para>
  <para>                start.equals(BSAFETY2) || start.equals(BSAFETY3) || start.equals(BSAFETY4) || </para>
  <para>                start.equals(BSAFETY5) || start.equals(YSAFETY1) || start.equals(YSAFETY2) || </para>
  <para>                start.equals(YSAFETY3) || start.equals(YSAFETY4) || start.equals(YSAFETY5) ||</para>
  <para>                start.equals(GSAFETY1) || start.equals(GSAFETY2) || start.equals(GSAFETY3) ||</para>
  <para>                start.equals(GSAFETY4) || start.equals(GSAFETY5)) {</para>
  <para>                        switch(color) {</para>
  <para>                                case 1:   if(start.equals(RSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(RSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(RSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(RSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 5:   end.setCoord(RHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(RSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(RSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(RHOME);</para>
  <para>                                                                            break;                </para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(RSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(RHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(RHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                case 2:   if(start.equals(BSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(BSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(BSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(BSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 5:   end.setCoord(BHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(BSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(BSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(BHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(BSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(BHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(BHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                case 3:   if(start.equals(YSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(YSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(YSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(YSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 5:   end.setCoord(YHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(YSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(YSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(YHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(YSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(YHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(YHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                case 4:   if(start.equals(GSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(GSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(GSAFETY4);</para>
  <para>                                                                            break;        </para>
  <para>                                                              case 4:   end.setCoord(GSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 5:   end.setCoord(GHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(GSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(GSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 4:   end.setCoord(GHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(GSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 3:   end.setCoord(GHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY5);</para>
  <para>                                                                            break;</para>
  <para>                                                              case 2:   end.setCoord(GHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GHOME);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment A-B (x = 0)</para>
  <para>                else if(x == 0) { </para>
  <para>                        if(y &lt; 3 &amp;&amp; color == YELLOW) {</para>
  <para>                                if(y == 2) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(YSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(YSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(YSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(YSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(YSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(YHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default:  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(y == 1) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(0, 2);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(YSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(YSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(YSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(YSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(YSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(YHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default:  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(y == 0) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(0, 1);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(0, 2);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(YSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(YSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(YSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(YSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(YSAFETY5);</para>
  <para>                                                              break;        </para>
  <para>                                                case 8:   end.setCoord(YHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default:  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        } </para>
  <para>                        else {</para>
  <para>                                if(y + deckNum &lt;= 15) end.setCoord(0, y + deckNum);</para>
  <para>                                else {</para>
  <para>                                        n = deckNum - (15 - y);</para>
  <para>                                        if(color == GREEN &amp;&amp; n &lt;= 2) {</para>
  <para>                                                end.setCoord(n, 15);</para>
  <para>                                        }</para>
  <para>                                        else if(color == GREEN &amp;&amp; n &gt; 2) {</para>
  <para>                                                switch(n-2) {</para>
  <para>                                                        case 1:   end.setCoord(GSAFETY1);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 2:   end.setCoord(GSAFETY2);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 3:   end.setCoord(GSAFETY3);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 4:   end.setCoord(GSAFETY4);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 5:   end.setCoord(GSAFETY5);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 6:   end.setCoord(GHOME);</para>
  <para>                                                                      break;</para>
  <para>                                                        default:  end.setCoord(start);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                        else end.setCoord(n, 15);</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                } </para>
  <para type="comment">                // segment B-C (y = 15)</para>
  <para>                else if(y == 15) {</para>
  <para>                        if(x &lt; 3 &amp;&amp; color == GREEN) {</para>
  <para>                                if(x == 2) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(GSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(GSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(GSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(GSAFETY4);</para>
  <para>                                                              break;                </para>
  <para>                                                case 5:   end.setCoord(GSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(GHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(x == 1) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(13, 0);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(GSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(GSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(GSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(GSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(GSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(GHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default   end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(x == 0) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(14, 0);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(13, 0);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(GSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(GSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(GSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(GSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(GSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 8:   end.setCoord(GHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                } </para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(x + deckNum &lt;= 15) end.setCoord(x+deckNum, 15);</para>
  <para>                                else {</para>
  <para>                                        n = deckNum - (15 - x);</para>
  <para>                                        if(color == RED &amp;&amp; n &lt;= 2) {</para>
  <para>                                                end.setCoord(15, 15-n);</para>
  <para>                                        }</para>
  <para>                                        else if(color == RED &amp;&amp; n &gt; 2) {</para>
  <para>                                                switch(n-2) {</para>
  <para>                                                        case 1:   end.setCoord(RSAFETY1);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 2:   end.setCoord(RSAFETY2);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 3:   end.setCoord(RSAFETY3);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 4:   end.setCoord(RSAFETY4);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 5:   end.setCoord(RSAFETY5);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 6:   end.setCoord(RHOME);</para>
  <para>                                                                      break;</para>
  <para>                                                        default:  end.setCoord(start);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                        else end.setCoord(15, 15-n);</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                } </para>
  <para type="comment">                // segment C-D (x = 15)</para>
  <para>                else if(x == 15) {</para>
  <para>                        if(y &gt; 12 &amp;&amp; color == RED) {</para>
  <para>                                if(15 - y == 2) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(RSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(RSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(RSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(RSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(RSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(RHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(15 - y == 1) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(15, 13);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(RSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(RSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(RSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(RSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(RSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(RHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(15 - y == 0) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(15, 14);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(15, 13);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(RSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(RSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(RSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(RSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(RSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 8:   end.setCoord(RHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                } </para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(y - deckNum &gt;= 0) end.setCoord(15, y-deckNum);</para>
  <para>                                else {</para>
  <para>                                        n = deckNum - y;</para>
  <para>                                        If(color == BLUE &amp;&amp; n &lt;= 2) {</para>
  <para>                                                end.setCoord(15-n, 0);</para>
  <para>                                        }</para>
  <para>                                        else if(color == BLUE &amp;&amp; n &gt; 2) {</para>
  <para>                                                switch(n-2) {</para>
  <para>                                                        case 1:   end.setCoord(BSAFETY1);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 2:   end.setCoord(BSAFETY2);</para>
  <para>                                                                      break;        </para>
  <para>                                                        case 3:   end.setCoord(BSAFETY3);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 4:   end.setCoord(BSAFETY4);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 5:   end.setCoord(BSAFETY5);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 6:   end.setCoord(BHOME);</para>
  <para>                                                                      break;</para>
  <para>                                                        default:  end.setCoord(start);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                        else end.setCoord(15-n, 0);</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment D-A (y = 0)</para>
  <para>                else if(y == 0) {</para>
  <para>                        if(x &gt; 12 &amp;&amp; color == BLUE) {</para>
  <para>                                if(15 - x == 2) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(BSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(BSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(BSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(BSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(BSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(BHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(15 - x == 1) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                case 1:   end.setCoord(13, 0);</para>
  <para>                                                              break;</para>
  <para>                                                case 2:   end.setCoord(BSAFETY1);</para>
  <para>                                                              break;</para>
  <para>                                                case 3:   end.setCoord(BSAFETY2);</para>
  <para>                                                              break;</para>
  <para>                                                case 4:   end.setCoord(BSAFETY3);</para>
  <para>                                                              break;</para>
  <para>                                                case 5:   end.setCoord(BSAFETY4);</para>
  <para>                                                              break;</para>
  <para>                                                case 6:   end.setCoord(BSAFETY5);</para>
  <para>                                                              break;</para>
  <para>                                                case 7:   end.setCoord(BHOME);</para>
  <para>                                                              break;</para>
  <para>                                                default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                                else if(15 - x == 0) {</para>
  <para>                                        switch(deckNum) {</para>
  <para>                                                        case 1:   end.setCoord(14, 0);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 2:   end.setCoord(13, 0);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 3:   end.setCoord(BSAFETY1);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 4:   end.setCoord(BSAFETY2);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 5:   end.setCoord(BSAFETY3);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 6:   end.setCoord(BSAFETY4);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 7:   end.setCoord(BSAFETY5);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 8:   end.setCoord(BHOME);</para>
  <para>                                                                      break;</para>
  <para>                                                        default :  end.setCoord(start);</para>
  <para>                                        }</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                        else {</para>
  <para>                                if(x - deckNum &gt;= 0) end.setCoord(x-deckNum, 0);</para>
  <para>                                else {</para>
  <para>                                        n = deckNum - x;</para>
  <para>                                        if(color == YELLOW &amp;&amp; n &lt;= 2) {</para>
  <para>                                                end.setCoord(0, n);</para>
  <para>                                        }</para>
  <para>                                        else if(color == YELLOW &amp;&amp; n &gt; 2) {</para>
  <para>                                                switch(n-2) {</para>
  <para>                                                        case 1:   end.setCoord(YSAFETY1);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 2:   end.setCoord(YSAFETY2);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 3:   end.setCoord(YSAFETY3);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 4:   end.setCoord(YSAFETY4);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 5:   end.setCoord(YSAFETY5);</para>
  <para>                                                                      break;</para>
  <para>                                                        case 6:   end.setCoord(YHOME);</para>
  <para>                                                                      break;</para>
  <para>                                                        default:  end.setCoord(start);</para>
  <para>                                                }</para>
  <para>                                        }</para>
  <para>                                        else end.setCoord(0, n);</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                if(end.equals(DEFAULT)) end.setCoord(start);</para>
  <para>                return end;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // calcule les coordonnées à reculons</para>
  <para type="function">        public static Coord computeCoordBW (Coord start, int deckNum, int color) {</para>
  <para>                Coord end = new Coord(DEFAULT);</para>
  <para>                int x = start.getX();</para>
  <para>                int y = start.getY();</para>
  <para>                int n = 0;</para>
  <para type="comment">                // si coordonnée est dans un safety</para>
  <para>                if(start.equals(RSAFETY1) || start.equals(RSAFETY2) || start.equals(RSAFETY3) ||</para>
  <para>                start.equals(RSAFETY4) || start.equals(RSAFETY5) || start.equals(BSAFETY1) || </para>
  <para>                start.equals(BSAFETY2) || start.equals(BSAFETY3) || start.equals(BSAFETY4) || </para>
  <para>                start.equals(BSAFETY5) || start.equals(YSAFETY1) || start.equals(YSAFETY2) || </para>
  <para>                start.equals(YSAFETY3) || start.equals(YSAFETY4) || start.equals(YSAFETY5) ||</para>
  <para>                start.equals(GSAFETY1) || start.equals(GSAFETY2) || start.equals(GSAFETY3) ||</para>
  <para>                start.equals(GSAFETY4) || start.equals(GSAFETY5)) {</para>
  <para>                        switch(color) {</para>
  <para>                                case 1:   if(start.equals(RSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(15, 13);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY1);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(RSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(RSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                case 2:   if(start.equals(BSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(13, 0);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY1);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(BSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(BSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                case 3:   if(start.equals(YSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(0, 2);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY1);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY3);</para>
  <para>                                                                            break;                </para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(YSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(YSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                case 4:   if(start.equals(GSAFETY1)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(2, 15);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY2)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY1);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY3)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY2);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY4)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY3);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                                              else if(start.equals(GSAFETY5)) {</para>
  <para>                                                      switch(deckNum) {</para>
  <para>                                                              case 1:   end.setCoord(GSAFETY4);</para>
  <para>                                                                            break;</para>
  <para>                                                              default:  end.setCoord(start);</para>
  <para>                                                      }</para>
  <para>                                              }</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment A-B (x = 0)</para>
  <para>                else if(x == 0) {</para>
  <para>                        if(y - deckNum &gt;= 0) end.setCoord(0, y-deckNum);</para>
  <para>                        else {</para>
  <para>                                n = deckNum - y;</para>
  <para>                                end.setCoord(n, 0);</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment B-C (y = 15)</para>
  <para>                else if(y == 15) {</para>
  <para>                        if(x - deckNum &gt;= 0) end.setCoord(x-deckNum, 15);</para>
  <para>                        else {</para>
  <para>                                n = deckNum - x;</para>
  <para>                                end.setCoord(0, 15-n);</para>
  <para>                        }</para>
  <para>                } </para>
  <para type="comment">                // segment C-D (x = 15)</para>
  <para>                else if(x == 15) {</para>
  <para>                        if(y + deckNum &lt;= 15) end.setCoord(15, y+deckNum);</para>
  <para>                        else {</para>
  <para>                                n = deckNum - (15 - y);</para>
  <para>                                end.setCoord(15-n, 15);</para>
  <para>                        }</para>
  <para>                }</para>
  <para type="comment">                // segment D-A (y = 0)</para>
  <para>                else if(y == 0) {</para>
  <para>                        if(x + deckNum &lt;= 15) end.setCoord(x+deckNum, 0);</para>
  <para>                        else {</para>
  <para>                                n = deckNum - (15 - x);</para>
  <para>                                end.setCoord(15, n);</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return end;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne la position d'un pion après glissade</para>
  <para type="function">        public static Coord computePawnSliding (Pawn o, Coord coord) {</para>
  <para>                Coord dest = new Coord(DEFAULT);</para>
  <para>                switch(o.getColor()) {</para>
  <para>                        case 1:   if(coord.equals(BSHORT_START)) dest.setCoord(BSHORT_END);</para>
  <para>                                      else if(coord.equals(BLONG_START)) dest.setCoord(BLONG_END);</para>
  <para>                                      else if(coord.equals(YSHORT_START)) dest.setCoord(YSHORT_END);</para>
  <para>                                      else if(coord.equals(YLONG_START)) dest.setCoord(YLONG_END);</para>
  <para>                                      else if(coord.equals(GSHORT_START)) dest.setCoord(GSHORT_END);</para>
  <para>                                      else if(coord.equals(GLONG_START)) dest.setCoord(GLONG_END);</para>
  <para>                                      else dest.setCoord(coord);</para>
  <para>                                      if(dest.equals(BSHORT_END) || dest.equals(YSHORT_END) || dest.equals(GSHORT_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 3);</para>
  <para>                                      }</para>
  <para>                                      else if(dest.equals(BLONG_END) || dest.equals(YLONG_END) || dest.equals(GLONG_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 4);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 2:   if(coord.equals(YSHORT_START)) dest.setCoord(YSHORT_END);</para>
  <para>                                      else if(coord.equals(YLONG_START)) dest.setCoord(YLONG_END);</para>
  <para>                                      else if(coord.equals(GSHORT_START)) dest.setCoord(GSHORT_END);</para>
  <para>                                      else if(coord.equals(GLONG_START)) dest.setCoord(GLONG_END);</para>
  <para>                                      else if(coord.equals(RSHORT_START)) dest.setCoord(RSHORT_END);</para>
  <para>                                      else if(coord.equals(RLONG_START)) dest.setCoord(RLONG_END);</para>
  <para>                                      else dest.setCoord(coord);</para>
  <para>                                      if(dest.equals(RSHORT_END) || dest.equals(YSHORT_END) || dest.equals(GSHORT_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 3);</para>
  <para>                                      }</para>
  <para>                                      else if(dest.equals(RLONG_END) || dest.equals(YLONG_END) || dest.equals(GLONG_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 4);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 3:   if(coord.equals(GSHORT_START)) dest.setCoord(GSHORT_END);</para>
  <para>                                      else if(coord.equals(GLONG_START)) dest.setCoord(GLONG_END);</para>
  <para>                                      else if(coord.equals(RSHORT_START)) dest.setCoord(RSHORT_END);</para>
  <para>                                      else if(coord.equals(RLONG_START)) dest.setCoord(RLONG_END);</para>
  <para>                                      else if(coord.equals(BSHORT_START)) dest.setCoord(BSHORT_END);</para>
  <para>                                      else if(coord.equals(BLONG_START)) dest.setCoord(BLONG_END);</para>
  <para>                                      else dest.setCoord(coord);</para>
  <para>                                      if(dest.equals(BSHORT_END) || dest.equals(RSHORT_END) || dest.equals(GSHORT_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 3);</para>
  <para>                                      }</para>
  <para>                                      else if(dest.equals(BLONG_END) || dest.equals(RLONG_END) || dest.equals(GLONG_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 4);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        case 4:   if(coord.equals(RSHORT_START)) dest.setCoord(RSHORT_END);</para>
  <para>                                      else if(coord.equals(RLONG_START)) dest.setCoord(RLONG_END);</para>
  <para>                                      else if(coord.equals(BSHORT_START)) dest.setCoord(BSHORT_END);</para>
  <para>                                      else if(coord.equals(BLONG_START)) dest.setCoord(BLONG_END);</para>
  <para>                                      else if(coord.equals(YSHORT_START)) dest.setCoord(YSHORT_END);</para>
  <para>                                      else if(coord.equals(YLONG_START)) dest.setCoord(YLONG_END);</para>
  <para>                                      else dest.setCoord(coord);</para>
  <para>                                      if(dest.equals(BSHORT_END) || dest.equals(YSHORT_END) || dest.equals(RSHORT_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 3);</para>
  <para>                                      }</para>
  <para>                                      else if(dest.equals(BLONG_END) || dest.equals(YLONG_END) || dest.equals(RLONG_END)) {</para>
  <para>                                              o.setCount(o.getCount() + 4);</para>
  <para>                                      }</para>
  <para>                                      break;</para>
  <para>                        default:  dest.setCoord(coord);</para>
  <para>                                      break;</para>
  <para>                } </para>
  <para>                return dest; </para>
  <para type="function">        }</para>
  <para type="comment">        // retourne un joueur par numéro</para>
  <para type="function">        public static Player getPlayer (Player[] p, int color) {</para>
  <para>                Player player;</para>
  <para>                switch(color) {</para>
  <para>                        case 1:   player = p[0];</para>
  <para>                                      break;</para>
  <para>                        case 2:   player = p[1];</para>
  <para>                                      break;</para>
  <para>                        case 3:   player = p[2];</para>
  <para>                                      break;</para>
  <para>                        case 4:   player = p[3];</para>
  <para>                                      break;</para>
  <para>                        default:  player = new PlayerDEFAULT();</para>
  <para>                }</para>
  <para>                return player;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // calcul count de case départ à coord</para>
  <para type="function">        public static int countToStartFrom (Coord coord, int color) {</para>
  <para>                int x = coord.getX();</para>
  <para>                int y = coord.getY();</para>
  <para>                int n = 0;</para>
  <para/>
  <para>                switch(color) {</para>
  <para>                        case 1:   if(x == 15) {</para>
  <para>                                              if(y &gt; 12) n = 56 + (15 - y);</para>
  <para>                                              else n = 11 - y;</para>
  <para>                                      }</para>
  <para>                                      else if (y == 0) n = 11 + (15 - x);</para>
  <para>                                      else if(x == 0) n = 26 + y;</para>
  <para>                                      else if(y == 15) n = 41 + x;</para>
  <para>                                      break;</para>
  <para>                        case 2:   if(y == 0) {</para>
  <para>                                              if(x &gt; 12) n = 56 + (15 - x);</para>
  <para>                                              else n = 11 - x;</para>
  <para>                                      }</para>
  <para>                                      else if (x == 0) n = 11 + y;</para>
  <para>                                      else if(y == 15) n = 26 + y;</para>
  <para>                                      else if(x == 15) n = 41 + (15 - y);</para>
  <para>                                      break;</para>
  <para>                        case 3:   if(x == 0) {</para>
  <para>                                              if(y &lt; 3) n = 56 + y;</para>
  <para>                                              else n = y - 4;</para>
  <para>                                      }</para>
  <para>                                      else if (y == 15) n = 11 + x;</para>
  <para>                                      else if(x == 15) n = 26 + (15 - y);</para>
  <para>                                      else if(y == 0) n = 41 + (15 - x);</para>
  <para>                                      break;</para>
  <para>                        case 4:   if(y == 15) {</para>
  <para>                                              if(x &lt; 3) n = 56 + x;</para>
  <para>                                              else n = x - 4;</para>
  <para>                                      }</para>
  <para>                                      else if (x == 15) n = 11 + (15 - y);</para>
  <para>                                      else if(y == 0) n = 26 + (15 - x);</para>
  <para>                                      else if(x == 0) n = 41 + y;</para>
  <para>                                      break;</para>
  <para>                        default:  break;</para>
  <para>                }</para>
  <para>                return n;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne un nombre random entre 1 et 16</para>
  <para type="function">        public static int getRandomInt () {</para>
  <para>                return ((int)(Math.random() * (double)16)) + 1;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // retourne un nombre random selon max voulu (à partir de 0)</para>
  <para type="function">        public static int randomChoice (int maxValue) {</para>
  <para>                return ((int)(Math.random() * (double)maxValue));</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // convertit int en boolean</para>
  <para type="function">        public static boolean intToBoolean (int n) {</para>
  <para>                if(n == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide si saisie clavier est un int ET valide (0 ou 1)</para>
  <para type="function">        public static boolean isNumberValid1 (int n) {</para>
  <para>                if(n == 0 || n == 1) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide si saisie clavier est un int ET valide (1 ou 2)</para>
  <para type="function">        public static boolean isNumberValid2 (int n) {</para>
  <para>                if(n == 1 || n == 2) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para/>
  <para type="comment">        // valide si saisie clavier est un int ET valide (1, 2 ou 3)</para>
  <para type="function">        public static boolean isNumberValid3 (int n) {</para>
  <para>                if(n == 1 || n == 2 || n == 3) return true;</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para type="comment">        // valide si saisie clavier est un String non-vide et contient [r,b,y,g] et [1,2,3,4]</para>
  <para type="function">        public static boolean isStringValid (String s) {</para>
  <para>                if(s.length() != 2 || s.length() &gt; 2 ) return false;</para>
  <para>                else {</para>
  <para>                        if(s.charAt(0) == 'r' || s.charAt(0) == 'b' || s.charAt(0) == 'y' || s.charAt(0) == 'g') {</para>
  <para>                                if(s.charAt(1) == '1' || s.charAt(1) == '2' || s.charAt(1) == '3' || s.charAt(1) == '4') {</para>
  <para>                                        return true;</para>
  <para>                                }</para>
  <para>                        }</para>
  <para>                }</para>
  <para>                return false;</para>
  <para type="function">        }</para>
  <para type="class">} </para>
  <para/>
  <para/>
  <para/>
  <para type="filename">“Sorry.java”</para>
  <para/>
  <para type="package">import game.Game;</para>
  <para/>
  <para type="class">public class Sorry {</para>
  <para>        private static Game sorry;</para>
  <para/>
  <para type="function">        public static void main (String[] args) {</para>
  <para>                sorry = new Game(true);</para>
  <para>                sorry.playTurn();</para>
  <para type="function">        }</para>
  <para type="class">}</para>
</article>
