1. /*
  2.  * awale.java 1.0 2011-01-31
  3.  *
  4.  * Emulador del joc africá awelé.
  5.  *
  6.  * Copyright 2011 Gerard Brull Blanes <gbblanes@gmail.com>
  7.  *
  8.  * This is free software, licensed under the GNU General Public License v3.
  9.  * See http://www.gnu.org/licenses/gpl.html for more information.
  10.  */
  11.  
  12. import library.inout.Terminal;
  13. import library.utilitats.Arr;
  14.  
  15.  
  16. public class awele {
  17.  
  18. public static void main (String args[]) {
  19.  
  20. int posIni,posFi;
  21.  
  22. int[] taulell = {3,1,0,2,20,4,2,1,4,0,3,3};
  23. int[] llavorsJugadors = {0,0};
  24.  
  25. int jugador = Terminal.readInt("Jugador ?");
  26.  
  27. mostraTaulell(taulell, llavorsJugadors);
  28.  
  29.  
  30.  
  31. if (partidaAcabada(taulell)==true) {
  32. Terminal.print("\nPartida acabada");
  33.  
  34. if (quiGuanya(llavorsJugadors)==0) {
  35. Terminal.print("\nHi ha hagut un empat\n");
  36. }else{
  37. Terminal.print("\nHa guanyat el jugador %d\n", quiGuanya(llavorsJugadors));
  38. }
  39.  
  40. }
  41.  
  42. //mostraTaulell(taulell, llavorsJugadors);
  43.  
  44. posIni=demanaPosicio(taulell,jugador);
  45.  
  46. posFi=mouLlavors(taulell,posIni);
  47.  
  48. agafaLlavors(taulell,llavorsJugadors,jugador,posFi);
  49.  
  50.  
  51. }
  52.  
  53. public static boolean filaBuida (int[] taulell, int indexInici, int indexFi) {
  54.  
  55. boolean filaJugadorBuida=true;
  56. int i = 0;
  57.  
  58. if ( indexInici >= 0 && indexFi <= 5 ) {
  59. for (i = 0; i <= 5; i++) {
  60. if ( taulell[i] != 0 ) {
  61. filaJugadorBuida=false;
  62. }
  63. }
  64. } else {
  65.  
  66. for (i = 6; i <= 11; i++) {
  67. if ( taulell[i] != 0 ) {
  68. filaJugadorBuida=false;
  69. }
  70. }
  71. }
  72.  
  73. return filaJugadorBuida;
  74. }
  75.  
  76. public static boolean partidaAcabada (int[] taulell) {
  77.  
  78. boolean partidaAcabada=false;
  79.  
  80. if ( filaBuida(taulell, 0, 5 )|| filaBuida(taulell,6,11) ) {
  81. return partidaAcabada=true;
  82. }else{
  83. return partidaAcabada=false;
  84. }
  85. }
  86.  
  87. public static int quiGuanya (int[] llavorsJugadors) {
  88.  
  89. int jugadorGuanyador;
  90.  
  91. if ( llavorsJugadors[0] > llavorsJugadors[1] ) {
  92. jugadorGuanyador=1;
  93. }else if ( llavorsJugadors[0] < llavorsJugadors[1] ) {
  94. jugadorGuanyador=2;
  95. }else{
  96. jugadorGuanyador=0;
  97. }
  98.  
  99. return jugadorGuanyador;
  100. }
  101.  
  102. public static void mostraTaulell (int[] taulell, int[] llavorsJugadors) {
  103.  
  104. int i;
  105.  
  106. Terminal.print("\n\n%19s%d llavors )\n", "Jugador 2 ( ",llavorsJugadors[1]);
  107.  
  108. for (i = 11; i > 5; i--) {
  109. Terminal.print(" %d", taulell[i]);
  110. }
  111. Terminal.print("\n");
  112. for (i = 0; i < 6 ; i++) {
  113. Terminal.print(" %d", taulell[i]);
  114. }
  115.  
  116. Terminal.print("\n%19s%d llavors )\n\n\n", "Jugador 1 ( ",llavorsJugadors[0]);
  117. }
  118.  
  119. public static int esbrinaPosicioTaulell (int posicio, int jugador) {
  120.  
  121. int posIni;
  122.  
  123. if (jugador==1) {
  124. return posIni=posicio-1;
  125. }else{
  126. return posIni=5+posicio;
  127. }
  128. }
  129.  
  130. public static int demanaPosicio (int[] taulell, int jugador) {
  131.  
  132. int posicio, posIni;
  133.  
  134. posicio = Terminal.readInt("Quina és la posició de les llavors que vols moure ? ");
  135.  
  136. while (taulell[esbrinaPosicioTaulell(posicio,jugador)]==0) {
  137. posicio = Terminal.readInt("Quina és la posició de les llavors que vols moure ? ");
  138. }
  139.  
  140. posIni=esbrinaPosicioTaulell(posicio,jugador);
  141.  
  142. return posIni;
  143.  
  144. }
  145.  
  146. public static int mouLlavors(int[] taulell, int posIni) {
  147.  
  148. int contador = taulell[posIni], posFi = posIni, nextPos;
  149.  
  150. for (nextPos = posIni; contador > 0; contador--) {
  151. if (nextPos == Arr.size(taulell)-1) {
  152. taulell[0]++;
  153. nextPos = 0;
  154. posFi = 0;
  155. } else {
  156. taulell[nextPos + 1]++;
  157. nextPos++;
  158. }
  159. if (nextPos==posIni) {
  160. contador++;
  161. }
  162. posFi++;
  163. }
  164.  
  165. taulell[posIni] = 0;
  166.  
  167. Terminal.print("PosFi=%d", posFi);
  168.  
  169. return posFi;
  170.  
  171. }
  172.  
  173. public static void agafaLlavors (int[] taulell, int[] llavorsJugadors, int jugador, int posFi) {
  174.  
  175. int i, nextPos;
  176.  
  177. if (jugador == 1) {
  178. if ( posFi > 6 ) {
  179. for (i=0; taulell[posFi-i]==1 || taulell[posFi+i] == 2 || taulell[posFi+i] == 3; i++) {
  180. llavorsJugadors[0]=llavorsJugadors[0]+taulell[posFi-i];
  181. taulell[posFi-i]=0;
  182. }
  183. }
  184. }else{
  185. for (i=0; (taulell[posFi-i]==1 || taulell[posFi-i] == 2 || taulell[posFi-i] == 3) && posFi-i < 6; i++) {
  186. //Terminal.print("posFi= %d - i = %d",posFi,i);
  187. llavorsJugadors[1]=llavorsJugadors[1]+taulell[posFi-i];
  188. taulell[posFi-i]=0;
  189. }
  190.  
  191. }
  192.  
  193. mostraTaulell(taulell,llavorsJugadors);
  194.  
  195. }
  196. }
  197.  
  198.