Main.java (12773B)
1 /* 2 Copyright 2009 Sebastiano Tronto <sebastiano@luganega.org> 3 4 This file is part of JBriscola. 5 6 JBriscola is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 JBriscola is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with JBriscola; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 20 */ 21 22 import javax.swing.*; 23 24 public class Main { 25 public static int semeBriscola, punteggio, punteggioCPU, mano, cartaDaPescare, cartaDaGiocare; 26 public static boolean toccaAllaCPU = false; 27 public static boolean CPUHaGiocato = false; 28 public static boolean haGiocatoPrima = true; 29 public static Frame frame; 30 public static void main( String args[] ) { 31 frame = new Frame(); 32 frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE ); 33 frame.setVisible( true ); 34 frame.setResizable( false ); 35 frame.setSize( 600, 600 ); 36 } 37 public void mischia() { 38 mano = 0; 39 punteggio = 0; 40 punteggioCPU = 0; 41 cartaDaPescare = 6; 42 ImageIcon aux; 43 frame.mazzo = true; 44 toccaAllaCPU = false; 45 CPUHaGiocato = false; 46 haGiocatoPrima = true; 47 for ( int i = 0, k = 0; i < 10; i++ ) 48 for ( int j = 0; j < 4; j++, k++ ) 49 frame.arrayCarteMescolate[k] = frame.arrayCarte[i][j]; 50 for ( int i = 0; i < 391; i++ ) { 51 double a = Math.random() * 40; 52 int x = (int) a; 53 double b = Math.random() * 40; 54 int y = (int) b; 55 aux = frame.arrayCarteMescolate[x]; 56 frame.arrayCarteMescolate[x] = frame.arrayCarteMescolate[y]; 57 frame.arrayCarteMescolate[y] = aux; 58 } 59 char auxChar[] = frame.arrayCarteMescolate[39].toString().toCharArray(); 60 semeBriscola = auxChar[auxChar.length-5] - 49; 61 frame.carteInMano[0] = frame.arrayCarteMescolate[0]; 62 frame.carteInMano[1] = frame.arrayCarteMescolate[1]; 63 frame.carteInMano[2] = frame.arrayCarteMescolate[2]; 64 frame.carteCPU[0] = frame.arrayCarteMescolate[3]; 65 frame.carteCPU[1] = frame.arrayCarteMescolate[4]; 66 frame.carteCPU[2] = frame.arrayCarteMescolate[5]; 67 frame.ultimaCarta = frame.arrayCarteMescolate[39]; 68 frame.giocata[0] = null; 69 frame.giocata[1] = null; 70 } 71 public void giocaCPU() { 72 if ( frame.giocata[0] == null ) { 73 if ( vaiLiscio() ); 74 else if ( vaiPunti() ); 75 else if ( vaiBriscola() ); 76 else if ( vaiCarico() ); 77 else; 78 } 79 else { 80 if ( haLisciato() || haMessoPunti() ) { 81 if ( vaiSopra() ); 82 else if ( vaiLiscio() ); 83 else if ( vaiPunti() ); 84 else if ( vaiBriscola() ); 85 else if ( vaiCarico() ); 86 else System.out.println("Ha lisciato e non so cosa fare"); 87 } else if ( haMessoBriscola() ) { 88 if ( vaiLiscio() ); 89 else if ( vaiPunti() ); 90 else if ( vaiBriscola() ); 91 else if ( vaiCarico() ); 92 else System.out.println("Ha messo una briscola e non so cosa fare"); 93 } else if ( haCaricato() ) { 94 if ( vaiSopra() ); 95 else if ( vaiBriscola() ); 96 else if ( vaiLiscio() ); 97 else if ( vaiPunti() ); 98 else if ( vaiCarico() ); 99 else System.out.println("Ha caricato e non so cosa fare"); 100 } else System.out.println("Non so cosa ha fatto"); 101 } 102 frame.giocata[1] = frame.carteCPU[cartaDaGiocare]; 103 frame.carteCPU[cartaDaGiocare] = null; 104 frame.pannello.repaint(); 105 CPUHaGiocato = true; 106 if ( frame.giocata[0] == null ) 107 toccaAllaCPU = false; 108 } 109 public void chiPrende() { 110 char aux[], auxCPU[]; 111 aux = frame.giocata[0].toString().toCharArray(); 112 auxCPU = frame.giocata[1].toString().toCharArray(); 113 giocatorePrende( ( (aux[aux.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) ) 114 || ( (aux[aux.length-5] == auxCPU[auxCPU.length-5]) && laPrimaEPiuAlta( aux[aux.length-7] - 48, auxCPU[auxCPU.length-7] - 48 ) ) 115 || ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (aux[aux.length-5] != auxCPU[auxCPU.length-5]) && haGiocatoPrima ) ); 116 } 117 public boolean laPrimaEPiuAlta( int prima, int seconda ) { 118 int a, b; 119 switch ( prima ) { 120 case 0: 121 a = 10; 122 break; 123 case 1: 124 a = 12; 125 break; 126 case 3: 127 a = 11; 128 break; 129 default: 130 a = prima; 131 break; 132 } 133 switch ( seconda ) { 134 case 0: 135 b = 10; 136 break; 137 case 1: 138 b = 12; 139 break; 140 case 3: 141 b = 11; 142 break; 143 default: 144 b = seconda; 145 break; 146 } 147 return a > b; 148 } 149 public void giocatorePrende( boolean giocatore ) { 150 if ( giocatore ) { 151 toccaAllaCPU = CPUHaGiocato = false; 152 haGiocatoPrima = true; 153 } 154 else { 155 toccaAllaCPU = true; 156 CPUHaGiocato = haGiocatoPrima = false; 157 } 158 daiPunti( giocatore ); 159 if ( toccaAllaCPU ) 160 giocaCPU(); 161 } 162 public void daiPunti( boolean giocatore ) { 163 char aux[], auxCPU[]; 164 aux = frame.giocata[0].toString().toCharArray(); 165 auxCPU = frame.giocata[1].toString().toCharArray(); 166 int punti = 0; 167 switch( aux[aux.length-7] - 48 ) { 168 case 0: 169 punti += 4; 170 break; 171 case 1: 172 punti += 11; 173 break; 174 case 3: 175 punti += 10; 176 break; 177 case 8: 178 punti += 2; 179 break; 180 case 9: 181 punti += 3; 182 break; 183 default: 184 break; 185 } 186 switch( auxCPU[auxCPU.length-7] - 48 ) { 187 case 0: 188 punti += 4; 189 break; 190 case 1: 191 punti += 11; 192 break; 193 case 3: 194 punti += 10; 195 break; 196 case 8: 197 punti += 2; 198 break; 199 case 9: 200 punti += 3; 201 break; 202 default: 203 break; 204 } 205 frame.giocata[0] = frame.giocata[1] = null; 206 if ( giocatore ) { 207 punteggio += punti; 208 if ( mano < 18 ) { 209 if ( frame.carteInMano[0] == null ) 210 frame.carteInMano[0] = frame.arrayCarteMescolate[cartaDaPescare]; 211 if ( frame.carteInMano[1] == null ) 212 frame.carteInMano[1] = frame.arrayCarteMescolate[cartaDaPescare]; 213 if ( frame.carteInMano[2] == null ) 214 frame.carteInMano[2] = frame.arrayCarteMescolate[cartaDaPescare]; 215 cartaDaPescare++; 216 if ( frame.carteCPU[0] == null ) 217 frame.carteCPU[0] = frame.arrayCarteMescolate[cartaDaPescare]; 218 if ( frame.carteCPU[1] == null ) 219 frame.carteCPU[1] = frame.arrayCarteMescolate[cartaDaPescare]; 220 if ( frame.carteCPU[2] == null ) 221 frame.carteCPU[2] = frame.arrayCarteMescolate[cartaDaPescare]; 222 cartaDaPescare++; 223 } 224 } 225 else { 226 punteggioCPU += punti; 227 if ( mano < 18 ) { 228 if ( frame.carteCPU[0] == null ) 229 frame.carteCPU[0] = frame.arrayCarteMescolate[cartaDaPescare]; 230 if ( frame.carteCPU[1] == null ) 231 frame.carteCPU[1] = frame.arrayCarteMescolate[cartaDaPescare]; 232 if ( frame.carteCPU[2] == null ) 233 frame.carteCPU[2] = frame.arrayCarteMescolate[cartaDaPescare]; 234 cartaDaPescare++; 235 if ( frame.carteInMano[0] == null ) 236 frame.carteInMano[0] = frame.arrayCarteMescolate[cartaDaPescare]; 237 if ( frame.carteInMano[1] == null ) 238 frame.carteInMano[1] = frame.arrayCarteMescolate[cartaDaPescare]; 239 if ( frame.carteInMano[2] == null ) 240 frame.carteInMano[2] = frame.arrayCarteMescolate[cartaDaPescare]; 241 cartaDaPescare++; 242 } 243 } 244 frame.pannello.repaint(); 245 frame.repaint(); 246 } 247 public boolean haLisciato() { 248 char auxCPU[]; 249 auxCPU = frame.giocata[0].toString().toCharArray(); 250 return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && 251 (auxCPU[auxCPU.length-7] - 48 != 0 ) && (auxCPU[auxCPU.length-7] - 48 != 1 ) && 252 (auxCPU[auxCPU.length-7] - 48 != 3 ) && (auxCPU[auxCPU.length-7] - 48 < 8 ) ); 253 } 254 public boolean haMessoPunti() { 255 char auxCPU[]; 256 auxCPU = frame.giocata[0].toString().toCharArray(); 257 return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && 258 ( (auxCPU[auxCPU.length-7] - 48 == 0 ) || (auxCPU[auxCPU.length-7] - 48 == 8 ) || 259 (auxCPU[auxCPU.length-7] - 48 == 9 ) ) ); 260 } 261 public boolean haMessoBriscola() { 262 char auxCPU[]; 263 auxCPU = frame.giocata[0].toString().toCharArray(); 264 return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) ); 265 } 266 public boolean haCaricato() { 267 char auxCPU[]; 268 auxCPU = frame.giocata[0].toString().toCharArray(); 269 return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && 270 ( (auxCPU[auxCPU.length-7] - 48 == 1 ) || (auxCPU[auxCPU.length-7] - 48 == 3 ) ) ); 271 } 272 public boolean vaiLiscio() { 273 char auxCPU[]; 274 for ( int i = 0; i < 3; i++ ) { 275 if ( frame.carteCPU[i] != null ) { 276 auxCPU = frame.carteCPU[i].toString().toCharArray(); 277 if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && 278 (auxCPU[auxCPU.length-7] - 48 != 0 ) && (auxCPU[auxCPU.length-7] - 48 != 1 ) && 279 (auxCPU[auxCPU.length-7] - 48 != 3 ) && (auxCPU[auxCPU.length-7] - 48 < 8 ) ) { 280 cartaDaGiocare = i; 281 return true; 282 } 283 } 284 } 285 return false; 286 } 287 public boolean vaiPunti() { 288 char auxCPU[]; 289 for ( int i = 0; i < 3; i++ ) { 290 if ( frame.carteCPU[i] != null ) { 291 auxCPU = frame.carteCPU[i].toString().toCharArray(); 292 if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && 293 ( (auxCPU[auxCPU.length-7] - 48 == 0 ) || (auxCPU[auxCPU.length-7] - 48 == 8 ) || 294 (auxCPU[auxCPU.length-7] - 48 == 9 ) ) ) { 295 cartaDaGiocare = i; 296 return true; 297 } 298 } 299 } 300 return false; 301 } 302 public boolean vaiBriscola() { 303 char auxCPU[]; 304 for ( int i = 0; i < 3; i++ ) { 305 if ( frame.carteCPU[i] != null ) { 306 auxCPU = frame.carteCPU[i].toString().toCharArray(); 307 if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola ) { 308 cartaDaGiocare = i; 309 return true; 310 } 311 } 312 } 313 return false; 314 } 315 public boolean vaiCarico() { 316 char auxCPU[]; 317 for ( int i = 0; i < 3; i++ ) { 318 if ( frame.carteCPU[i] != null ) { 319 auxCPU = frame.carteCPU[i].toString().toCharArray(); 320 if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && 321 ( (auxCPU[auxCPU.length-7] - 48 == 1 ) || (auxCPU[auxCPU.length-7] - 48 == 3 ) ) ) { 322 cartaDaGiocare = i; 323 return true; 324 } 325 } 326 } 327 return false; 328 } 329 public boolean vaiSopra() { 330 if ( frame.giocata[0] == null ) 331 return false; 332 int a = -1; 333 int b = -1; 334 int c = -1; 335 boolean laPrimaPuoAndareSopra = false; 336 boolean laSecondaPuoAndareSopra = false; 337 boolean laTerzaPuoAndareSopra = false; 338 char[] auxCPU1 = new char[1024]; 339 char[] auxCPU2 = new char[1024]; 340 char[] auxCPU3 = new char[1024]; 341 char[] aux = frame.giocata[0].toString().toCharArray(); 342 if ( aux[aux.length-7] - 48 == 1 ) 343 return false; 344 if ( frame.carteCPU[0] != null ) { 345 auxCPU1 = frame.carteCPU[0].toString().toCharArray(); 346 a = auxCPU1[auxCPU1.length-7] - 48; 347 } 348 if ( frame.carteCPU[1] != null ) { 349 auxCPU2 = frame.carteCPU[1].toString().toCharArray(); 350 b = auxCPU2[auxCPU2.length-7] - 48; 351 } 352 if ( frame.carteCPU[2] != null ) { 353 auxCPU3 = frame.carteCPU[2].toString().toCharArray(); 354 c = auxCPU3[auxCPU3.length-7] - 48; 355 } 356 if ( (auxCPU1[auxCPU1.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( a, aux[aux.length-7] - 48 ) ) 357 laPrimaPuoAndareSopra = true; 358 if ( (auxCPU2[auxCPU2.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( b, aux[aux.length-7] - 48 ) ) 359 laSecondaPuoAndareSopra = true; 360 if ( (auxCPU3[auxCPU3.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( c, aux[aux.length-7] - 48 ) ) 361 laTerzaPuoAndareSopra = true; 362 if ( !laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra ) 363 return false; 364 else if ( laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra ) 365 cartaDaGiocare = 0; 366 else if ( !laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra ) 367 cartaDaGiocare = 1; 368 else if ( !laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && laTerzaPuoAndareSopra ) 369 cartaDaGiocare = 2; 370 else if ( laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra ) 371 if ( laPrimaEPiuAlta( a, b ) ) 372 cartaDaGiocare = 0; 373 else 374 cartaDaGiocare = 1; 375 else if ( !laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && laTerzaPuoAndareSopra ) 376 if ( laPrimaEPiuAlta( b, c ) ) 377 cartaDaGiocare = 1; 378 else 379 cartaDaGiocare = 2; 380 else if ( laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && laTerzaPuoAndareSopra ) 381 if ( laPrimaEPiuAlta( a, c ) ) 382 cartaDaGiocare = 0; 383 else 384 cartaDaGiocare = 2; 385 else if ( laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && laTerzaPuoAndareSopra ) 386 if ( laPrimaEPiuAlta( a, b ) ) 387 if ( laPrimaEPiuAlta( a, c ) ) 388 cartaDaGiocare = 0; 389 else 390 cartaDaGiocare = 2; 391 else 392 if ( laPrimaEPiuAlta( b, c ) ) 393 cartaDaGiocare = 1; 394 else 395 cartaDaGiocare = 2; 396 else cartaDaGiocare = 55; 397 return true; 398 } 399 }