ancient-projects

My earliest programs (2006-2010)
git clone https://git.tronto.net/ancient-projects
Download | Log | Files | Refs | README

Main.java (48063B)


      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 java.io.*;
     23 import java.util.*;
     24 import javax.swing.*;
     25 import java.awt.*;
     26 
     27 public class Main {
     28 	
     29 	/* semeBriscola serve a determinare quale il seme di briscola (0 coppe,
     30 	 * 1 bastoni, 2 denari, 3 spade).
     31 	 * punteggio è il punteggio del giocatore, punteggioCPU quello della CPU
     32 	 * mano tiene il conto della mano a cui si è arrivati.
     33 	 * cartaDaPescare è la carta che la CPU deve raccogliere dal mazzo
     34 	 * cartaDaGiocare (può assumere valore compraso tra 0 e 2) è la carta
     35 	 * che la cpu deve giocare. */
     36 	public static int semeBriscola, punteggio, punteggioCPU, mano, cartaDaPescare, cartaDaGiocare;
     37 	
     38 	/* toccaAllaCPU determina se è il turno del computer o del giocatore,
     39 	 * CPUHaGiocato se il computer ha già giocato in questo turno e
     40 	 * haGiocatoPrima se la prima mossa del turno è stata del giocatore
     41 	 * (true) o della CPU (false).
     42 	 * sound e keys riguardano le opzioni (souno si o no, tasti rapidi si
     43 	 * o no) salvate nel file di configurazione. */
     44 	public static boolean toccaAllaCPU = false;
     45 	public static boolean CPUHaGiocato = false;
     46 	public static boolean haGiocatoPrima = true;
     47 	public static boolean sound = true;
     48 	public static boolean keys = true;
     49 	
     50 	/* frame è la finestra principale del gioco, color il colore dello sfondo.
     51 	 * lang, soundString e keysString servono a leggere le opzioni dal file
     52 	 * di configurazione. */
     53 	public static Frame frame;
     54 	public static Color color = new Color( 0, 150, 0 );
     55 	public static String lang, soundString, keysString;
     56 
     57 	/* Tutte le stringhe che vengono utilizzate durante il gioco sono
     58 	 * inizializzate qui, per poter essere tradotte in altre lingue. */
     59 	public static String version = "0.2.2";
     60 	public static String stringaBottonePrendi = "Prendi/Lascia carte";
     61 	public static String stringaPrimaGioca = "Prima Gioca!";
     62 	public static String stringaUltime4 = "Ultima carta - Occhio alla briscola!";
     63 	public static String stringaVinto = "Hai Vinto!";
     64 	public static String stringaPerso = "Hai Perso";
     65 	public static String stringaPareggio = "Pareggio";
     66 	public static String stringaGiocatore = "Giocatore: ";
     67 	public static String stringaComputer = "\nComputer: ";
     68 	public static String stringaNuovaPartita = "Nuova Partita";
     69 	public static String stringaVuoiDavveroIniziare = "Vuoi davvero iniziare una nuova partita?";
     70 	public static String stringaVuoiDavveroUscire = "Vuoi davvero uscire?";
     71 	public static String stringaSi = "Si";
     72 	public static String stringaNo = "No";
     73 	public static String stringaOpzioni = "Opzioni...";
     74 	public static String stringaEsci = "Esci";
     75 	public static String stringaImpossibileConfigurare = "Impossibile modificare il file di configurazione.\nSegnalare il bug a: sebastiano@luganega.org\n\nEccezione:\n";
     76 	public static String stringaLingua = "Lingua";
     77 	public static String stringaAnnulla = "Annulla";
     78 	public static String stringaIt = "Italiano";
     79 	public static String stringaLa = "Latino";
     80 	public static String stringaBL = "Dialetto Bellunese";
     81 	public static String stringaBV = "Dialetto Basso Veneto";
     82 	public static String stringaEN = "Inglese";
     83 	public static String stringaModificaOpzioni = "Modifica Opzioni";
     84 	public static String stringaInformazioni = "Informazioni";
     85 	public static String stringaInformazioni2 = "JBriscola e' un gioco di briscola per pc scritto in java ideato\ne realizzato da Sebastiano Tronto. Il gioco viene rilasciato sotto licenza GNU/Gpl versione 2 o successive; questo permette\npotenzialmente a chiunque di modificare il gioco partendo dal codice sorgente del programma. Se non avete ricevuto i sorgenti\nassieme al gioco, potete richiedermeli con un'e-mail a sebastiano@luganega.org.\n\nJBriscola version " + version + "\nCopyright 2009 Sebastiano Tronto, license GNU/Gpl 2.0 or later\nE-mail: sebastiano@luganega.org";
     86 	public static String stringaSuono = "Effetti Sonori";
     87 	public static String stringaPunteggio = "Punteggio";
     88 	public static String stringaSfondo = "Sfondo";
     89 	public static String stringaTasti = "Tasti rapidi";
     90 	public static String stringaAggiornamenti = "Cerca aggiornamenti";
     91 	public static String stringaAggiornamentiSi = "Aggiornamento disponibile: ";
     92 	public static String stringaAggiornamentiNo = "Nessun aggiornamento disponibile";
     93 	public static String stringaScarica = "E' possibile scaricare la versione più recente\ndal sito http://porkynator.altervista.org/programmi.html";
     94 	public static String stringaNoInternet = "Errore: nessuna connessione internet";
     95 	public static String stringaTasti2 = "1    Gioca la prima carta\n2    Gioca la seconda carta\n3    Gioca la terza carta\nF1   Visualizza questo messaggio\nF2   " + stringaNuovaPartita + "\nF3   " + stringaOpzioni + "\nF4   " + stringaPunteggio + "\nF5   " + stringaInformazioni + "\nF6   " + stringaAggiornamenti + "\nq    " + stringaEsci;
     96 
     97 	public static void main( String args[] ) {
     98 		
     99 		/* Chiama il metodo settaOpzioni per leggere le impostazioni
    100 		 * dell'utente da un eventuale file di configurazione */
    101 		settaOpzioni();
    102 		
    103 		/* Crea la finestra principale del gioco e la posiziona al centro
    104 		 * dello schermo. */
    105 		frame = new Frame();
    106 		frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );
    107 		frame.setResizable( false );
    108 		frame.setSize( 600, 600 );
    109 		frame.setLocation( (Toolkit.getDefaultToolkit().getScreenSize().width - 600) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - 600) / 2);
    110 		frame.setVisible( true );
    111 	}
    112 	
    113 	/* Algoritmo per mischiare il mazzo: prende due carte a caso e le
    114 	 * inverte di posto, utilizzando una variabile aux. Ripete il procedimento
    115 	 * per 391 volte. */
    116 	public void mischia() {
    117 		
    118 		mano = 0;
    119 		punteggio = 0;
    120 		punteggioCPU = 0;
    121 		cartaDaPescare = 6;
    122 		ImageIcon aux;
    123 		frame.mazzo = true;
    124 		toccaAllaCPU = false;
    125 		CPUHaGiocato = false;
    126 		haGiocatoPrima = true;
    127 		
    128 		/* Inizializza l'array di carte mescolate ordinato */
    129 		for ( int i = 0, k = 0; i < 10; i++ )
    130 			for ( int j = 0; j < 4; j++, k++ )
    131 				frame.arrayCarteMescolate[k] = frame.arrayCarte[i][j];
    132 		
    133 		/* Mescola le carte utilizzando il metodo sopra citato */
    134 		for ( int i = 0; i < 391; i++ ) {
    135 			double a = Math.random() * 40;
    136 			int x = (int) a;
    137 			double b = Math.random() * 40;
    138 			int y = (int) b;
    139 			aux = frame.arrayCarteMescolate[x];
    140 			frame.arrayCarteMescolate[x] = frame.arrayCarteMescolate[y];
    141 			frame.arrayCarteMescolate[y] = aux;
    142 		}
    143 		
    144 		/* Imposta il seme della briscola leggendo il nome dell'ultima carta
    145 		 * utilizzando un array ausiliare */
    146 		char auxChar[] = frame.arrayCarteMescolate[39].toString().toCharArray();
    147 		semeBriscola = auxChar[auxChar.length-5] - 49;
    148 		
    149 		/* Distribuisce le carte */
    150 		frame.carteInMano[0] = frame.arrayCarteMescolate[0];
    151 		frame.carteInMano[1] = frame.arrayCarteMescolate[1];
    152 		frame.carteInMano[2] = frame.arrayCarteMescolate[2];
    153 		frame.carteCPU[0] = frame.arrayCarteMescolate[3];
    154 		frame.carteCPU[1] = frame.arrayCarteMescolate[4];
    155 		frame.carteCPU[2] = frame.arrayCarteMescolate[5];
    156 		frame.ultimaCarta = frame.arrayCarteMescolate[39];
    157 		frame.giocata[0] = null;
    158 		frame.giocata[1] = null;
    159 	}
    160 	
    161 	/* Fa giocare la CPU. Questo metodo contiene l'iuntelligenza artificiale
    162 	 * del gioco. Ho preferito non commentare il corpo del metodo per due
    163 	 * motivi; il primo è che abbastanza intuitivo: basta sapere che i vari
    164 	 * metodi vaiLiscio(), vaiTaglio() ecc... tentano di fare ciò che
    165 	 * ovviamente dice il loro nome, se ci riescono restituiscono true,
    166 	 * in caso contrario false.*/
    167 	public void giocaCPU() {
    168 		
    169 		if ( mano < 16 ) {
    170 			
    171 			/* Valuta cosa fare se il giocatore non ha ancora giocato. */
    172 			if ( frame.giocata[0] == null ) {
    173 				if ( vaiPunti() );
    174 				else if ( vaiLiscio() );
    175 				else if ( vaiTaglio() );
    176 				else if ( vaiBriscolaAlta() );
    177 				else if ( vaiCarico() );
    178 				else if ( vaiTre() );
    179 				else if ( vaiAsso() );
    180 				else;
    181 			}
    182 			
    183 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    184 			else {
    185 				if ( haLisciato() ) {
    186 					if ( vaiSopra() );
    187 					else if ( vaiLiscio() );
    188 					else if ( vaiPunti() );
    189 					else if ( vaiTaglio() );
    190 					else if ( vaiTre() );
    191 					else if ( vaiBriscolaAlta() );
    192 					else if ( vaiCarico() );
    193 					else if ( vaiAsso() );
    194 				} else if ( haMessoPunti() ) {
    195 					if ( vaiSopra() );
    196 					else if ( vaiLiscio() );
    197 					else if ( vaiTaglio() );
    198 					else if ( vaiPunti() );
    199 					else if ( vaiTre() );
    200 					else if ( vaiBriscolaAlta() );
    201 					else if ( vaiCarico() );
    202 					else if ( vaiAsso() );
    203 				} else if ( haTagliato() ) {
    204 					if ( vaiLiscio() );
    205 					else if ( vaiPunti() );
    206 					else if ( vaiTaglio() );
    207 					else if ( vaiTre() );
    208 					else if ( vaiBriscolaAlta() );
    209 					else if ( vaiCarico() );
    210 					else if ( vaiAsso() );
    211 				} else if ( haMessoBriscolaAlta() ) {
    212 					if ( vaiLiscio() );
    213 					else if ( vaiPunti() );
    214 					else if ( vaiTre() );
    215 					else if ( vaiTaglio() );
    216 					else if ( vaiBriscolaAlta() );
    217 					else if ( vaiCarico() );
    218 					else if ( vaiAsso() );
    219 				} else if ( haMessoTre() ) {
    220 					if ( vaiAsso() );
    221 					else if ( vaiLiscio() );
    222 					else if ( vaiPunti() );
    223 					else if ( vaiTaglio() );
    224 					else if ( vaiBriscolaAlta() );
    225 					else if ( vaiCarico() );
    226 				} else if ( haMessoAsso() ) {
    227 					if ( vaiLiscio() );
    228 					else if ( vaiPunti() );
    229 					else if ( vaiTaglio() );
    230 					else if ( vaiBriscolaAlta() );
    231 					else if ( vaiCarico() );
    232 					else if ( vaiTre() );
    233 				} else if ( haCaricato() ) {
    234 					if ( vaiSopra() );
    235 					else if ( vaiTre() );
    236 					else if ( vaiBriscolaAlta() );
    237 					else if ( vaiAsso() );
    238 					else if ( vaiTaglio() );
    239 					else if ( vaiLiscio() );
    240 					else if ( vaiPunti() );
    241 					else if ( vaiCarico() );
    242 				}
    243 			}
    244 		}
    245 		else if ( mano == 16 ) {
    246 			if ( frame.giocata[0] == null ) {
    247 				char aux[];
    248 				aux = frame.ultimaCarta.toString().toCharArray();
    249 				if ( aux[aux.length-7] - 48 == 3 || aux[aux.length-7] - 48 == 1 ) {
    250 					if ( vaiCarico() );
    251 					else if ( vaiPunti() );
    252 					else if ( vaiLiscio() );
    253 					else if ( vaiTaglio() );
    254 					else if ( vaiBriscolaAlta() );
    255 					else if ( vaiTre() );
    256 					else if ( vaiAsso() );
    257 					else;
    258 				} else {
    259 					if ( vaiPunti() );
    260 					else if ( vaiLiscio() );
    261 					else if ( vaiTaglio() );
    262 					else if ( vaiBriscolaAlta() );
    263 					else if ( vaiCarico() );
    264 					else if ( vaiTre() );
    265 					else if ( vaiAsso() );
    266 					else;
    267 				}
    268 			}
    269 			else {
    270 				char aux[];
    271 				aux = frame.ultimaCarta.toString().toCharArray();
    272 				if ( aux[aux.length-7] - 48 == 3 || aux[aux.length-7] - 48 == 1 ) {
    273 					if ( haCaricato() ) {
    274 						if ( vaiSopra() );
    275 						else if ( vaiLiscio() );
    276 						else if ( vaiPunti() );
    277 						else if ( vaiTre() );
    278 						else if ( vaiTaglio() );
    279 						else if ( vaiBriscolaAlta() );
    280 						else if ( vaiAsso() );
    281 						else if ( vaiCarico() );
    282 					}
    283 				} else {
    284 					if ( haLisciato() ) {
    285 						if ( vaiSopra() );
    286 						else if ( vaiLiscio() );
    287 					else if ( vaiPunti() );
    288 						else if ( vaiTaglio() );
    289 						else if ( vaiTre() );
    290 						else if ( vaiBriscolaAlta() );
    291 						else if ( vaiCarico() );
    292 						else if ( vaiAsso() );
    293 					} else if ( haMessoPunti() ) {
    294 						if ( vaiSopra() );
    295 						else if ( vaiLiscio() );
    296 						else if ( vaiTaglio() );
    297 						else if ( vaiPunti() );
    298 						else if ( vaiTre() );
    299 						else if ( vaiBriscolaAlta() );
    300 						else if ( vaiCarico() );
    301 						else if ( vaiAsso() );
    302 					} else if ( haTagliato() ) {
    303 						if ( vaiLiscio() );
    304 						else if ( vaiPunti() );
    305 						else if ( vaiTaglio() );
    306 						else if ( vaiTre() );
    307 						else if ( vaiBriscolaAlta() );
    308 						else if ( vaiCarico() );
    309 						else if ( vaiAsso() );
    310 					} else if ( haMessoBriscolaAlta() ) {
    311 						if ( vaiLiscio() );
    312 						else if ( vaiPunti() );
    313 						else if ( vaiTre() );
    314 						else if ( vaiTaglio() );
    315 						else if ( vaiBriscolaAlta() );
    316 						else if ( vaiCarico() );
    317 						else if ( vaiAsso() );
    318 					} else if ( haMessoTre() ) {
    319 						if ( vaiAsso() );
    320 						else if ( vaiLiscio() );
    321 						else if ( vaiPunti() );
    322 						else if ( vaiTaglio() );
    323 						else if ( vaiBriscolaAlta() );
    324 						else if ( vaiCarico() );
    325 					} else if ( haMessoAsso() ) {
    326 						if ( vaiLiscio() );
    327 						else if ( vaiPunti() );
    328 						else if ( vaiTaglio() );
    329 						else if ( vaiBriscolaAlta() );
    330 						else if ( vaiCarico() );
    331 						else if ( vaiTre() );
    332 					} else if ( haCaricato() ) {
    333 						if ( vaiSopra() );
    334 						else if ( vaiTre() );
    335 						else if ( vaiBriscolaAlta() );
    336 						else if ( vaiAsso() );
    337 						else if ( vaiTaglio() );
    338 						else if ( vaiLiscio() );
    339 						else if ( vaiPunti() );
    340 						else if ( vaiCarico() );
    341 					}
    342 				}
    343 			}
    344 		} else if ( mano == 17 ) {
    345 			if ( frame.giocata[0] == null ) {
    346 				if ( hoAsso() ) {
    347 					if ( vaiTre() );
    348 					else if ( vaiBriscolaAlta() );
    349 					else if ( vaiTaglio() );
    350 					else if ( vaiLiscio() );
    351 					else if ( vaiPunti() );
    352 					else if ( vaiAsso() );
    353 					else if ( vaiCarico() );
    354 				} else {
    355 					if ( vaiLiscio() );
    356 					else if ( vaiPunti() );
    357 					else if ( vaiTaglio() );
    358 					else if ( vaiBriscolaAlta() );
    359 					else if ( vaiCarico() );
    360 					else if ( vaiTre() );
    361 				}
    362 			}
    363 			else {
    364 				if ( haLisciato() ) {
    365 					if ( vaiSopra() );
    366 					else if ( vaiLiscio() );
    367 					else if ( vaiPunti() );
    368 					else if ( vaiTaglio() );
    369 					else if ( vaiTre() );
    370 					else if ( vaiBriscolaAlta() );
    371 					else if ( vaiCarico() );
    372 					else if ( vaiAsso() );
    373 				} else if ( haMessoPunti() ) {
    374 					if ( vaiSopra() );
    375 					else if ( vaiLiscio() );
    376 					else if ( vaiTaglio() );
    377 					else if ( vaiPunti() );
    378 					else if ( vaiTre() );
    379 					else if ( vaiBriscolaAlta() );
    380 					else if ( vaiCarico() );
    381 					else if ( vaiAsso() );
    382 				} else if ( haTagliato() ) {
    383 					if ( vaiLiscio() );
    384 					else if ( vaiPunti() );
    385 					else if ( vaiTaglio() );
    386 					else if ( vaiTre() );
    387 					else if ( vaiBriscolaAlta() );
    388 					else if ( vaiCarico() );
    389 					else if ( vaiAsso() );
    390 				} else if ( haMessoBriscolaAlta() ) {
    391 					if ( vaiLiscio() );
    392 					else if ( vaiPunti() );
    393 					else if ( vaiTre() );
    394 					else if ( vaiTaglio() );
    395 					else if ( vaiBriscolaAlta() );
    396 					else if ( vaiCarico() );
    397 					else if ( vaiAsso() );
    398 				} else if ( haMessoTre() ) {
    399 					if ( vaiAsso() );
    400 					else if ( vaiLiscio() );
    401 					else if ( vaiPunti() );
    402 					else if ( vaiTaglio() );
    403 					else if ( vaiBriscolaAlta() );
    404 					else if ( vaiCarico() );
    405 				} else if ( haMessoAsso() ) {
    406 					if ( vaiLiscio() );
    407 					else if ( vaiPunti() );
    408 					else if ( vaiTaglio() );
    409 					else if ( vaiBriscolaAlta() );
    410 					else if ( vaiCarico() );
    411 					else if ( vaiTre() );
    412 				} else if ( haCaricato() ) {
    413 					if ( vaiSopra() );
    414 					else if ( vaiTre() );
    415 					else if ( vaiBriscolaAlta() );
    416 					else if ( vaiAsso() );
    417 					else if ( vaiTaglio() );
    418 					else if ( vaiLiscio() );
    419 					else if ( vaiPunti() );
    420 					else if ( vaiCarico() );
    421 				}
    422 			}
    423 		} else if ( mano == 18 ) {
    424 			if ( frame.giocata[0] == null ) {
    425 				if ( vaiAsso() );
    426 				else if ( vaiCarico() );
    427 				else if ( vaiBriscolaAlta() );
    428 				else if ( vaiTaglio() );
    429 				else if ( vaiPunti() );
    430 				else if ( vaiLiscio() );
    431 				else if ( vaiTre() );
    432 			}
    433 			else {
    434 				if ( haLisciato() ) {
    435 					if ( vaiSopra() );
    436 					else if ( vaiLiscio() );
    437 					else if ( vaiPunti() );
    438 					else if ( vaiTaglio() );
    439 					else if ( vaiTre() );
    440 					else if ( vaiBriscolaAlta() );
    441 					else if ( vaiCarico() );
    442 					else if ( vaiAsso() );
    443 				} else if ( haMessoPunti() ) {
    444 					if ( vaiSopra() );
    445 					else if ( vaiLiscio() );
    446 					else if ( vaiTaglio() );
    447 					else if ( vaiPunti() );
    448 					else if ( vaiTre() );
    449 					else if ( vaiBriscolaAlta() );
    450 					else if ( vaiCarico() );
    451 					else if ( vaiAsso() );
    452 				} else if ( haTagliato() ) {
    453 					if ( vaiLiscio() );
    454 					else if ( vaiPunti() );
    455 					else if ( vaiTaglio() );
    456 					else if ( vaiTre() );
    457 					else if ( vaiBriscolaAlta() );
    458 					else if ( vaiCarico() );
    459 					else if ( vaiAsso() );
    460 				} else if ( haMessoBriscolaAlta() ) {
    461 					if ( vaiLiscio() );
    462 					else if ( vaiPunti() );
    463 					else if ( vaiTre() );
    464 					else if ( vaiTaglio() );
    465 					else if ( vaiBriscolaAlta() );
    466 					else if ( vaiCarico() );
    467 					else if ( vaiAsso() );
    468 				} else if ( haMessoTre() ) {
    469 					if ( vaiAsso() );
    470 					else if ( vaiLiscio() );
    471 					else if ( vaiPunti() );
    472 					else if ( vaiTaglio() );
    473 					else if ( vaiBriscolaAlta() );
    474 					else if ( vaiCarico() );
    475 				} else if ( haMessoAsso() ) {
    476 					if ( vaiLiscio() );
    477 					else if ( vaiPunti() );
    478 					else if ( vaiTaglio() );
    479 					else if ( vaiBriscolaAlta() );
    480 					else if ( vaiCarico() );
    481 					else if ( vaiTre() );
    482 				} else if ( haCaricato() ) {
    483 					if ( vaiSopra() );
    484 					else if ( vaiTre() );
    485 					else if ( vaiBriscolaAlta() );
    486 					else if ( vaiAsso() );
    487 					else if ( vaiTaglio() );
    488 					else if ( vaiLiscio() );
    489 					else if ( vaiPunti() );
    490 					else if ( vaiCarico() );
    491 				}
    492 			}
    493 		} else {
    494 			if ( vaiTre() );
    495 			else if ( vaiBriscolaAlta() );
    496 			else if ( vaiAsso() );
    497 			else if ( vaiTaglio() );
    498 			else if ( vaiLiscio() );
    499 			else if ( vaiPunti() );
    500 			else if ( vaiCarico() );
    501 		}
    502 		
    503 		/* Gioca la carta e aggiorna la finestra con il metodo repaint() */
    504 		frame.giocata[1] = frame.carteCPU[cartaDaGiocare];
    505 		frame.carteCPU[cartaDaGiocare] = null;
    506 		frame.pannello.repaint();
    507 		
    508 		CPUHaGiocato = true;
    509 		
    510 		if ( frame.giocata[0] == null )
    511 			toccaAllaCPU = false;
    512 	}
    513 	
    514 	/* Determina se ha preso la CPU o il giocatore */
    515 	public void chiPrende() {
    516 		char aux[], auxCPU[];
    517 		aux = frame.giocata[0].toString().toCharArray();
    518 		auxCPU = frame.giocata[1].toString().toCharArray();
    519 		
    520 		/* Chiama il metodo giocatorePrende( boolean giocatore ) con parametro
    521 		 * true se ha preso il giocatore, false se ha preso la CPU */
    522 		giocatorePrende(   ( (aux[aux.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) )
    523 			|| ( (aux[aux.length-5] == auxCPU[auxCPU.length-5]) && laPrimaEPiuAlta( aux[aux.length-7] - 48, auxCPU[auxCPU.length-7] - 48 ) )
    524 			|| ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (aux[aux.length-5] != auxCPU[auxCPU.length-5]) && haGiocatoPrima ) );
    525 	}
    526 	
    527 	/* Confronta due carte per decidere quale ha più valore di presa.
    528 	 * Restituisce true se è la prima, false se è la seconda */
    529 	public boolean laPrimaEPiuAlta( int prima, int seconda ) {
    530 		int a, b;
    531 		switch ( prima ) {
    532 			case 0:
    533 				a = 10;
    534 				break;
    535 			case 1:
    536 				a = 12;
    537 				break;
    538 			case 3:
    539 				a = 11;
    540 				break;
    541 			default:
    542 				a = prima;
    543 				break;
    544 		}
    545 		switch ( seconda ) {
    546 			case 0:
    547 				b = 10;
    548 				break;
    549 			case 1:
    550 				b = 12;
    551 				break;
    552 			case 3:
    553 				b = 11;
    554 				break;
    555 			default:
    556 				b = seconda;
    557 				break;
    558 		}
    559 		return a > b;
    560 	}
    561 	
    562 	/* Viene chiamato con parametro true se ha preso il giocatore, false se
    563 	 * ha preso la CPU */
    564 	public void giocatorePrende( boolean giocatore ) {
    565 		if ( giocatore ) {
    566 			toccaAllaCPU = CPUHaGiocato = false;
    567 			haGiocatoPrima = true;
    568 		}
    569 		else {
    570 			toccaAllaCPU = true;
    571 			CPUHaGiocato = haGiocatoPrima = false;
    572 		}
    573 		daiPunti( giocatore );
    574 		if ( toccaAllaCPU )
    575 			giocaCPU();
    576 	}
    577 	
    578 	/* Da i punti (true al giocatore, false alla CPU) e fa pescare le carte*/
    579 	public void daiPunti( boolean giocatore ) {
    580 		
    581 		char aux[], auxCPU[];
    582 		aux = frame.giocata[0].toString().toCharArray();
    583 		auxCPU = frame.giocata[1].toString().toCharArray();
    584 		int punti = 0;
    585 		
    586 		switch( aux[aux.length-7] - 48 ) {
    587 			case 0:
    588 				punti += 4;
    589 				break;
    590 			case 1:
    591 				punti += 11;
    592 				break;
    593 			case 3:
    594 				punti += 10;
    595 				break;
    596 			case 8:
    597 				punti += 2;
    598 				break;
    599 			case 9:
    600 				punti += 3;
    601 				break;
    602 			default:
    603 				break;
    604 		}
    605 		switch( auxCPU[auxCPU.length-7] - 48 ) {
    606 			case 0:
    607 				punti += 4;
    608 				break;
    609 			case 1:
    610 				punti += 11;
    611 				break;
    612 			case 3:
    613 				punti += 10;
    614 				break;
    615 			case 8:
    616 				punti += 2;
    617 				break;
    618 			case 9:
    619 				punti += 3;
    620 				break;
    621 			default:
    622 				break;
    623 		}
    624 		
    625 		frame.giocata[0] = frame.giocata[1] = null;
    626 		
    627 		if ( giocatore ) {
    628 			punteggio += punti;
    629 			if ( mano < 18 ) {
    630 				if ( frame.carteInMano[0] == null )
    631 					frame.carteInMano[0] = frame.arrayCarteMescolate[cartaDaPescare];
    632 				if ( frame.carteInMano[1] == null )
    633 					frame.carteInMano[1] = frame.arrayCarteMescolate[cartaDaPescare];
    634 				if ( frame.carteInMano[2] == null )
    635 					frame.carteInMano[2] = frame.arrayCarteMescolate[cartaDaPescare];
    636 				cartaDaPescare++;
    637 				if ( frame.carteCPU[0] == null )
    638 					frame.carteCPU[0] = frame.arrayCarteMescolate[cartaDaPescare];
    639 				if ( frame.carteCPU[1] == null )
    640 					frame.carteCPU[1] = frame.arrayCarteMescolate[cartaDaPescare];
    641 				if ( frame.carteCPU[2] == null )
    642 					frame.carteCPU[2] = frame.arrayCarteMescolate[cartaDaPescare];
    643 				cartaDaPescare++;
    644 			}
    645 		}
    646 		
    647 		else {
    648 			punteggioCPU += punti;
    649 			if ( mano < 18 ) {
    650 				if ( frame.carteCPU[0] == null )
    651 					frame.carteCPU[0] = frame.arrayCarteMescolate[cartaDaPescare];
    652 				if ( frame.carteCPU[1] == null )
    653 					frame.carteCPU[1] = frame.arrayCarteMescolate[cartaDaPescare];
    654 				if ( frame.carteCPU[2] == null )
    655 					frame.carteCPU[2] = frame.arrayCarteMescolate[cartaDaPescare];
    656 				cartaDaPescare++;
    657 				if ( frame.carteInMano[0] == null )
    658 					frame.carteInMano[0] = frame.arrayCarteMescolate[cartaDaPescare];
    659 				if ( frame.carteInMano[1] == null )
    660 					frame.carteInMano[1] = frame.arrayCarteMescolate[cartaDaPescare];
    661 				if ( frame.carteInMano[2] == null )
    662 					frame.carteInMano[2] = frame.arrayCarteMescolate[cartaDaPescare];
    663 				cartaDaPescare++;
    664 			}
    665 		}
    666 		
    667 		/* Aggiorna la finestra */
    668 		frame.pannello.repaint();
    669 		frame.repaint();
    670 	}
    671 	
    672 	/* Vari metodi che determinano che tipo di carta ha giocato il giocatore.
    673 	 * Per farlo leggono il nome dell'immagine dal file. Dato che ogni carta
    674 	 * a un nome del tipo 1-1.jpg (asso di coppe) o 10-3 (re di denari) e
    675 	 * così via, è facile riconoscerle. */
    676 	public boolean haLisciato() {
    677 		char auxCPU[];
    678 		auxCPU = frame.giocata[0].toString().toCharArray();
    679 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    680 				 (auxCPU[auxCPU.length-7] - 48 != 0 ) && (auxCPU[auxCPU.length-7] - 48 != 1 ) &&
    681 				 (auxCPU[auxCPU.length-7] - 48 != 3 ) && (auxCPU[auxCPU.length-7] - 48 < 8 ) );
    682 	}
    683 	
    684 	public boolean haMessoPunti() {
    685 		char auxCPU[];
    686 		auxCPU = frame.giocata[0].toString().toCharArray();
    687 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    688 				 ( (auxCPU[auxCPU.length-7] - 48 == 0 ) || (auxCPU[auxCPU.length-7] - 48 == 8 ) ||
    689 				 (auxCPU[auxCPU.length-7] - 48 == 9 ) ) );
    690 	}
    691 		
    692 	public boolean haTagliato() {
    693 		char auxCPU[];
    694 		auxCPU = frame.giocata[0].toString().toCharArray();
    695 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    696 				 (auxCPU[auxCPU.length-7] - 48 != 0) && (auxCPU[auxCPU.length-7] - 48 != 1) &&
    697 				 (auxCPU[auxCPU.length-7] - 48 != 3) && (auxCPU[auxCPU.length-7] - 48 <= 7) );
    698 	}
    699 	
    700 	public boolean haMessoBriscolaAlta() {
    701 		char auxCPU[];
    702 		auxCPU = frame.giocata[0].toString().toCharArray();
    703 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    704 				 ( (auxCPU[auxCPU.length-7] - 48 == 0) || (auxCPU[auxCPU.length-7] - 48 == 8) ||
    705 				 (auxCPU[auxCPU.length-7] - 48 == 9) ) );
    706 	}
    707 	
    708 	public boolean haMessoTre() {
    709 		char auxCPU[];
    710 		auxCPU = frame.giocata[0].toString().toCharArray();
    711 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    712 				 (auxCPU[auxCPU.length-7] - 48 == 3) );
    713 	}
    714 	
    715 	public boolean haMessoAsso() {
    716 		char auxCPU[];
    717 		auxCPU = frame.giocata[0].toString().toCharArray();
    718 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    719 				 (auxCPU[auxCPU.length-7] - 48 == 1) );
    720 	}
    721 	
    722 	public boolean haCaricato() {
    723 		char auxCPU[];
    724 		auxCPU = frame.giocata[0].toString().toCharArray();
    725 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    726 				 ( (auxCPU[auxCPU.length-7] - 48 == 1 ) || (auxCPU[auxCPU.length-7] - 48 == 3 ) ) );
    727 	}
    728 	
    729 	/* I metodi seguenti cercano di andare liscio - dare punti - mettere
    730 	 * un taglio - ecc... e restituiscono true se hanno avuto successo,
    731 	 * false altrimenti. */
    732 	public boolean vaiLiscio() {
    733 		
    734 		char auxCPU[];
    735 		
    736 		for ( int i = 0; i < 3; i++ ) {
    737 			if ( frame.carteCPU[i] != null ) {
    738 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    739 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    740 					 (auxCPU[auxCPU.length-7] - 48 != 0 ) && (auxCPU[auxCPU.length-7] - 48 != 1 ) &&
    741 					 (auxCPU[auxCPU.length-7] - 48 != 3 ) && (auxCPU[auxCPU.length-7] - 48 < 8 ) ) {
    742 					cartaDaGiocare = i;
    743 					return true;
    744 				}
    745 			}
    746 		}
    747 		
    748 		return false;
    749 	}
    750 	
    751 	public boolean vaiPunti() {
    752 		/* Cerca di dare punti, cercando di darne il meno possibile (meglio
    753 		 * un fante di re). */
    754 		
    755 		char[] auxCPU;
    756 		
    757 		for ( int i = 0; i < 3; i++ ) {
    758 			if ( frame.carteCPU[i] != null ) {
    759 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    760 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 8 ) ) {
    761 					cartaDaGiocare = i;
    762 					return true;
    763 				}
    764 			}
    765 		}
    766 		
    767 		for ( int i = 0; i < 3; i++ ) {
    768 			if ( frame.carteCPU[i] != null ) {
    769 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    770 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 9 ) ) {
    771 					cartaDaGiocare = i;
    772 					return true;
    773 				}
    774 			}
    775 		}
    776 		
    777 		for ( int i = 0; i < 3; i++ ) {
    778 			if ( frame.carteCPU[i] != null ) {
    779 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    780 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 0 ) ) {
    781 					cartaDaGiocare = i;
    782 					return true;
    783 				}
    784 			}
    785 		}
    786 		
    787 		return false;
    788 	}
    789 	public boolean vaiTaglio() {
    790 		
    791 		char auxCPU[];
    792 		
    793 		for ( int i = 0; i < 3; i++ ) {
    794 			if ( frame.carteCPU[i] != null ) {
    795 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    796 				if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola &&
    797 					 (auxCPU[auxCPU.length-7] - 48 != 0) && (auxCPU[auxCPU.length-7] - 48 != 1) &&
    798 					 (auxCPU[auxCPU.length-7] - 48 != 3) && (auxCPU[auxCPU.length-7] - 48 <= 7) ) {
    799 					cartaDaGiocare = i;
    800 					return true;
    801 				}
    802 			}
    803 		}
    804 		
    805 		return false;
    806 	}
    807 	public boolean vaiBriscolaAlta() {
    808 		
    809 		char[] auxCPU;
    810 		
    811 		for ( int i = 0; i < 3; i++ ) {
    812 			if ( frame.carteCPU[i] != null ) {
    813 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    814 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 8 ) ) {
    815 					cartaDaGiocare = i;
    816 					return true;
    817 				}
    818 			}
    819 		}
    820 		
    821 		for ( int i = 0; i < 3; i++ ) {
    822 			if ( frame.carteCPU[i] != null ) {
    823 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    824 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 9 ) ) {
    825 					cartaDaGiocare = i;
    826 					return true;
    827 				}
    828 			}
    829 		}
    830 		
    831 		for ( int i = 0; i < 3; i++ ) {
    832 			if ( frame.carteCPU[i] != null ) {
    833 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    834 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 0 ) ) {
    835 					cartaDaGiocare = i;
    836 					return true;
    837 				}
    838 			}
    839 		}
    840 		
    841 		return false;
    842 	}
    843 	public boolean vaiTre() {
    844 		
    845 		char auxCPU[];
    846 		
    847 		for ( int i = 0; i < 3; i++ ) {
    848 			if ( frame.carteCPU[i] != null ) {
    849 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    850 				if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola && (auxCPU[auxCPU.length-7] - 48 == 3) ) {
    851 					cartaDaGiocare = i;
    852 					return true;
    853 				}
    854 			}
    855 		}
    856 		
    857 		return false;
    858 	}
    859 	public boolean vaiAsso() {
    860 		
    861 		char auxCPU[];
    862 		
    863 		for ( int i = 0; i < 3; i++ ) {
    864 			if ( frame.carteCPU[i] != null ) {
    865 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    866 				if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola && (auxCPU[auxCPU.length-7] - 48 == 1) ) {
    867 					cartaDaGiocare = i;
    868 					return true;
    869 				}
    870 			}
    871 		}
    872 		
    873 		return false;
    874 	}
    875 	public boolean vaiCarico() {
    876 		
    877 		char[] auxCPU;
    878 		
    879 		for ( int i = 0; i < 3; i++ ) {
    880 			if ( frame.carteCPU[i] != null ) {
    881 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    882 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 3 ) ) {
    883 					cartaDaGiocare = i;
    884 					return true;
    885 				}
    886 			}
    887 		}
    888 		
    889 		for ( int i = 0; i < 3; i++ ) {
    890 			if ( frame.carteCPU[i] != null ) {
    891 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    892 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 1 ) ) {
    893 					cartaDaGiocare = i;
    894 					return true;
    895 				}
    896 			}
    897 		}
    898 		
    899 		return false;
    900 	}
    901 	public boolean vaiSopra() {
    902 		/* Innanzitutto controlla se il giocatore ha giocato (non dovrebbe
    903 		 * essere possibile, in quanto quando questo metodo viene chiamato
    904 		 * tale condizione è già stata verificata, ma è sempre meglio un
    905 		 * controllo in più che uno in meno) e restituisce false in caso
    906 		 * contrario */
    907 		if ( frame.giocata[0] == null )
    908 			return false;
    909 			
    910 		/* Tre variabili intere che serviranno a valutare quali delle tre
    911 		 * carte è meglio giocare, se più di una può andare sopra. */
    912 		int a = -1;
    913 		int b = -1;
    914 		int c = -1;
    915 		
    916 		/* Tre booleane che verificano quali delle tre carte possono
    917 		 * andare sopra. */
    918 		boolean laPrimaPuoAndareSopra = false;
    919 		boolean laSecondaPuoAndareSopra = false;
    920 		boolean laTerzaPuoAndareSopra = false;
    921 		
    922 		/* E tre array di caratteri ausiliari per leggere il nome delle
    923 		 * carte, più quello per la carta giocata dal giocatore.*/
    924 		char[] auxCPU1 = new char[1024];
    925 		char[] auxCPU2 = new char[1024];
    926 		char[] auxCPU3 = new char[1024];
    927 		char[] aux = frame.giocata[0].toString().toCharArray();
    928 		
    929 		/* Se il giocatore ha giocato un asso, restituisce direttamente false. */
    930 		if ( aux[aux.length-7] - 48 == 1 )
    931 			return false;
    932 		
    933 		/* Valuta quali delle tre carte possono andare sopra, dopo essersi
    934 		 * accertato di averle: nelle ultime mani non si hanno tutte le carte
    935 		 * in mano, e noi non vogliamo una NullPointerException sul più bello
    936 		 * di una partita, vero?! */
    937 		if ( frame.carteCPU[0] != null ) {
    938 			auxCPU1 = frame.carteCPU[0].toString().toCharArray();
    939 			a = auxCPU1[auxCPU1.length-7] - 48;
    940 			if ( (auxCPU1[auxCPU1.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( a, aux[aux.length-7] - 48 ) )
    941 				laPrimaPuoAndareSopra = true;
    942 		}
    943 		
    944 		if ( frame.carteCPU[1] != null ) {	
    945 			auxCPU2 = frame.carteCPU[1].toString().toCharArray();
    946 			b = auxCPU2[auxCPU2.length-7] - 48;
    947 			if ( (auxCPU2[auxCPU2.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( b, aux[aux.length-7] - 48 ) )
    948 				laSecondaPuoAndareSopra = true;
    949 		}
    950 		
    951 		if ( frame.carteCPU[2] != null ) {
    952 			auxCPU3 = frame.carteCPU[2].toString().toCharArray();
    953 			c = auxCPU3[auxCPU3.length-7] - 48;
    954 			if ( (auxCPU3[auxCPU3.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( c, aux[aux.length-7] - 48 ) )
    955 				laTerzaPuoAndareSopra = true;
    956 		}
    957 		
    958 		/* Se nessuna carta può andare sopra, restituisce false. Se una
    959 		 * sola delle tre può andare sopra la imposta come carta da giocare. */
    960 		if ( !laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
    961 			return false;
    962 		else if ( laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
    963 			cartaDaGiocare = 0;
    964 		else if ( !laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
    965 			cartaDaGiocare = 1;
    966 		else if ( !laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
    967 			cartaDaGiocare = 2;
    968 			
    969 		/* Se più di una carta può andare sopra, valuta quale è più alta. */
    970 		else if ( laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
    971 			if ( laPrimaEPiuAlta( a, b ) )
    972 				cartaDaGiocare = 0;
    973 			else
    974 				cartaDaGiocare = 1;
    975 		else if ( !laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
    976 			if ( laPrimaEPiuAlta( b, c ) )
    977 				cartaDaGiocare = 1;
    978 			else
    979 				cartaDaGiocare = 2;
    980 		else if ( laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
    981 			if ( laPrimaEPiuAlta( a, c ) )
    982 				cartaDaGiocare = 0;
    983 			else
    984 				cartaDaGiocare = 2;
    985 		else if ( laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
    986 			if ( laPrimaEPiuAlta( a, b ) )
    987 				if ( laPrimaEPiuAlta( a, c ) )
    988 					cartaDaGiocare = 0;
    989 				else
    990 					cartaDaGiocare = 2;
    991 			else
    992 				if ( laPrimaEPiuAlta( b, c ) )
    993 					cartaDaGiocare = 1;
    994 				else
    995 					cartaDaGiocare = 2;
    996 		
    997 		/* Controlla che la carta con cui sta cercando di andare sopra
    998 		 * sia una figura o un carico. Non vogliamo mica prendere delle
    999 		 * scartelle con delle scartelle, giusto?! */
   1000 		aux = frame.carteCPU[cartaDaGiocare].toString().toCharArray();
   1001 		if ( (aux[aux.length-7] - 48 != 0) && (aux[aux.length-7] - 48 != 1) &&
   1002 			 (aux[aux.length-7] - 48 != 3) && (aux[aux.length-7] - 48 <= 7) )
   1003 			return false;
   1004 
   1005 		return true;
   1006 	}
   1007 	
   1008 	/* I metodi seguenti valutano le carte che la CPU ha in mano. */
   1009 	public boolean hoCarico() {
   1010 		
   1011 		char auxCPU[];
   1012 		
   1013 		for ( int i = 0; i < 3; i++ ) {
   1014 			if ( frame.carteCPU[i] != null ) {
   1015 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1016 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
   1017 					 ( (auxCPU[auxCPU.length-7] - 48 == 1 ) || (auxCPU[auxCPU.length-7] - 48 == 3 ) ) ) {
   1018 					return true;
   1019 				}
   1020 			}
   1021 		}
   1022 		
   1023 		return false;
   1024 	}
   1025 	public boolean hoAsso() {
   1026 		
   1027 		char auxCPU[];
   1028 		
   1029 		for ( int i = 0; i < 3; i++ ) {
   1030 			if ( frame.carteCPU[i] != null ) {
   1031 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1032 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 1 ) ) {
   1033 					return true;
   1034 				}
   1035 			}
   1036 		}
   1037 		
   1038 		return false;
   1039 	}
   1040 	public boolean hoTre() {
   1041 		
   1042 		char auxCPU[];
   1043 		
   1044 		for ( int i = 0; i < 3; i++ ) {
   1045 			if ( frame.carteCPU[i] != null ) {
   1046 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1047 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 3 ) ) {
   1048 					return true;
   1049 				}
   1050 			}
   1051 		}
   1052 		
   1053 		return false;
   1054 	}
   1055 	public boolean hoBriscolaAlta() {
   1056 		
   1057 		char auxCPU[];
   1058 		
   1059 		for ( int i = 0; i < 3; i++ ) {
   1060 			if ( frame.carteCPU[i] != null ) {
   1061 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1062 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
   1063 					 ( (auxCPU[auxCPU.length-7] - 48 == 0 ) || (auxCPU[auxCPU.length-7] - 48 == 8 ) || (auxCPU[auxCPU.length-7] - 48 == 9 ) ) ) {
   1064 					return true;
   1065 				}
   1066 			}
   1067 		}
   1068 		
   1069 		return false;
   1070 	}
   1071 	public boolean hoTaglio() {
   1072 		
   1073 		char auxCPU[];
   1074 		
   1075 		for ( int i = 0; i < 3; i++ ) {
   1076 			if ( frame.carteCPU[i] != null ) {
   1077 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1078 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
   1079 					 (auxCPU[auxCPU.length-7] - 48 < 8 ) && (auxCPU[auxCPU.length-7] - 48 != 3 )
   1080 					 && (auxCPU[auxCPU.length-7] - 48 != 1 ) && (auxCPU[auxCPU.length-7] - 48 != 0 ) ) {
   1081 					return true;
   1082 				}
   1083 			}
   1084 		}
   1085 		
   1086 		return false;
   1087 	}
   1088 	
   1089 	/* Imposta le opzioni dell'utente cercando di leggerle dal file di configurazione. */
   1090 	public static void settaOpzioni() {
   1091 		
   1092 		/* Impostazioni predefinite. */
   1093 		lang = "it";
   1094 		soundString = "suono=si";
   1095 		keysString = "tasti=si";
   1096 		int r = 0;
   1097 		int g = 150;
   1098 		int b = 0;
   1099 		
   1100 		/* Cerca di leggere il file per impostare le opzioni. */
   1101 		Scanner scanner = null;
   1102 		File file = new File( "JBriscolaConfig.txt" );
   1103 		if ( file.exists() ) {
   1104 			try {
   1105 				scanner = new Scanner( file );
   1106 			} catch ( FileNotFoundException e ) { }
   1107 			try {
   1108 				lang = scanner.next();
   1109 				soundString = scanner.next();
   1110 				keysString = scanner.next();
   1111 				r = scanner.nextInt();
   1112 				g = scanner.nextInt();
   1113 				b = scanner.nextInt();
   1114 			} catch ( NoSuchElementException e ) { }
   1115 		}
   1116 		
   1117 		/* Modifica le opzioni. */
   1118 		if ( lang.equals( "it" ) ) {
   1119 			stringaBottonePrendi = "Prendi/Lascia carte";
   1120 			stringaPrimaGioca = "Prima Gioca!";
   1121 			stringaUltime4 = "Ultima carta - Occhio alla briscola!";
   1122 			stringaVinto = "Hai Vinto!";
   1123 			stringaPerso = "Hai Perso";
   1124 			stringaPareggio = "Pareggio";
   1125 			stringaGiocatore = "Giocatore: ";
   1126 			stringaComputer = "\nComputer: ";
   1127 			stringaNuovaPartita = "Nuova Partita";
   1128 			stringaVuoiDavveroIniziare = "Vuoi davvero iniziare una nuova partita?";
   1129 			stringaVuoiDavveroUscire = "Vuoi davvero uscire?";
   1130 			stringaSi = "Si";
   1131 			stringaNo = "No";
   1132 			stringaOpzioni = "Opzioni...";
   1133 			stringaEsci = "Esci";
   1134 			stringaImpossibileConfigurare = "Impossibile modificare il file di configurazione.\nSegnalare il bug a: sebastiano@luganega.org\n\nEccezione:\n";
   1135 			stringaLingua = "Lingua";
   1136 			stringaAnnulla = "Annulla";
   1137 			stringaIt = "Italiano";
   1138 			stringaLa = "Latino";
   1139 			stringaBL = "Dialetto Bellunese";
   1140 			stringaBV = "Dialetto Basso Veneto";
   1141 			stringaEN = "Inglese";
   1142 			stringaModificaOpzioni = "Modifica Opzioni";
   1143 			stringaInformazioni = "Informazioni";
   1144 			stringaInformazioni2 = "JBriscola e' un gioco di briscola per pc scritto in java ideato\ne realizzato da Sebastiano Tronto. Il gioco viene rilasciato sotto licenza GNU/Gpl versione 2 o successive; questo permette\npotenzialmente a chiunque di modificare il gioco partendo dal codice sorgente del programma. Se non avete ricevuto i sorgenti\nassieme al gioco, potete richiedermeli con un'e-mail a sebastiano@luganega.org.\n\nJBriscola version" + version + "\nCopyright 2009 Sebastiano Tronto, license GNU/Gpl 2.0 or later\nE-mail: sebastiano@luganega.org";
   1145 			stringaSuono = "Effetti sonori";
   1146 			stringaPunteggio = "Punteggio";
   1147 			stringaSfondo = "Sfondo";
   1148 			stringaTasti = "Tasti rapidi";
   1149 			stringaAggiornamenti = "Cerca aggiornamenti";
   1150 			stringaAggiornamentiSi = "Aggiornamento disponibile: ";
   1151 			stringaAggiornamentiNo = "Nessun aggiornamento disponibile";
   1152 			stringaScarica = "E' possibile scaricare la versione più recente\ndal sito http://porkynator.altervista.org/programmi.html";
   1153 			stringaNoInternet = "Errore: nessuna connessione internet";
   1154 			stringaTasti2 = "1    Gioca la prima carta\n2    Gioca la seconda carta\n3    Gioca la terza carta\nF1   Visualizza questo messaggio\nF2   " + stringaNuovaPartita + "\nF3   " + stringaOpzioni + "\nF4   " + stringaPunteggio + "\nF5   " + stringaInformazioni + "\nF6   " + stringaAggiornamenti + "\nq    " + stringaEsci;
   1155 		}
   1156 		else if ( lang.equals( "la" ) ) {
   1157 			stringaBottonePrendi = "CAPIS/RELINQVIS CHARTAS";
   1158 			stringaPrimaGioca = "ANTE CHARTAM PONE!";
   1159 			stringaUltime4 = "CHARTA POSTREMA - INTVERE BRISCOLAM!";
   1160 			stringaVinto = "VICISTI!";
   1161 			stringaPerso = "PERDIDISTI";
   1162 			stringaPareggio = "AEQVATIO!";
   1163 			stringaGiocatore = "LVSOR: ";
   1164 			stringaComputer = "\nCOMPVTER: ";
   1165 			stringaNuovaPartita = "NOVA LVSO";
   1166 			stringaVuoiDavveroIniziare = "NOVAM LVSIONEM INCIPERE?";
   1167 			stringaVuoiDavveroUscire = "EXIRE?";
   1168 			stringaSi = "ID VOLO";
   1169 			stringaNo = "NOLO";
   1170 			stringaOpzioni = "OPTIONES...";
   1171 			stringaEsci = "EXIRE";
   1172 			stringaImpossibileConfigurare = "CONFIGVRATIONIS FILE SCRIBERE NON POTVI.\nERROREM ME CERTIOREM FACITE: sebastiano@luganega.org\n\nEXCEPTIO:\n";
   1173 			stringaLingua = "LINGVA";
   1174 			stringaAnnulla = "ABROGA";
   1175 			stringaIt = "ITALICA";
   1176 			stringaLa = "LATINA";
   1177 			stringaBL = "BELLUNI";
   1178 			stringaBV = "VENETIAE";
   1179 			stringaEN = "ANGLICVS";
   1180 			stringaModificaOpzioni = "OPTIONES NOVARE";
   1181 			stringaInformazioni = "INFORMATIONES";
   1182 			stringaInformazioni2 = "JBriscola EST LVDVM BRISCOLAE COMPVTERI, JAVA SCRIPTVM, EXCOGITATVM\nFACTVMQUE A SEBASTIANO TRONTO. IPSVM LUDVM REICITUR LICENTIA GNU/Gpl VERSIONE 2 AVT POSTERIORIBUS; ID\nOMNIBVS LVDVM MUTARE CODICE IPSIVS INCIPIENDO LICET. SI CODICES CUM\nLVDO NON PERVENIT, EOS POSCERE POTESTIS E-MAILE sebastiano@luganega.org.\n\nJBriscola version " + version + "\nCopyright 2009 Sebastiano Tronto, license GNU/Gpl 2.0 or later\nE-mail: sebastiano@luganega.org";
   1183 			stringaSuono = "SONVS";
   1184 			stringaPunteggio = "NVMERI";
   1185 			stringaSfondo = "COLOR";
   1186 			stringaTasti = "TASTI RAPIDI";
   1187 			stringaAggiornamenti = "VERSIONEM RECENTIOREM QVAERERE";
   1188 			stringaNoInternet = "ERROR: INTERNETIS CONIVCTIO NON EST";
   1189 			stringaAggiornamentiSi = "VERSIO RECENTIOR EST: ";
   1190 			stringaAggiornamentiNo = "VERSIO RECENTIOR NON EST";
   1191 			stringaScarica = "VERSIONEM RECENTIOREM CEPTA ESSE POTEST:\nhttp://porkynator.altervista.org/programmi.html";
   1192 			stringaTasti2 = "1    PONE CHARTAM PRIMAM\n2    PONE CHARTAM SECUNDAM\n3    PONE CHARTAM TERTIAM\nF1   HEAC INFORMATIONES\nF2   " + stringaNuovaPartita + "\nF3   " + stringaOpzioni + "\nF4   " + stringaPunteggio + "\nF5   " + stringaInformazioni + "\nF6   " + stringaAggiornamenti + "\nq    " + stringaEsci;
   1193 		}
   1194 		if ( lang.equals( "bl" ) ) {
   1195 			stringaBottonePrendi = "Cio' su/lasa le carte";
   1196 			stringaPrimaGioca = "Prima Duga!";
   1197 			stringaUltime4 = "Ultima carta - Ocio a la briscola!";
   1198 			stringaVinto = "Te ha vint!";
   1199 			stringaPerso = "Te ha pers";
   1200 			stringaPareggio = "Pari";
   1201 			stringaGiocatore = "Dugador: ";
   1202 			stringaComputer = "\nComputer: ";
   1203 			stringaNuovaPartita = "Taca n'altra partida";
   1204 			stringaVuoiDavveroIniziare = "Utu sul serio scuminziar n'altra partida?";
   1205 			stringaVuoiDavveroUscire = "Utu sul serio stusar su?";
   1206 			stringaSi = "Si";
   1207 			stringaNo = "No";
   1208 			stringaOpzioni = "Opzioni...";
   1209 			stringaEsci = "Stusa su";
   1210 			stringaImpossibileConfigurare = "No ghe ho riva' a scrivere al file de configurazion.\nMandeme na mail a: sebastiano@luganega.org\n\nEcezion:\n";
   1211 			stringaLingua = "Lengua";
   1212 			stringaAnnulla = "Annulla";
   1213 			stringaIt = "Italian";
   1214 			stringaLa = "Latin";
   1215 			stringaBL = "Dialeto de Belun";
   1216 			stringaBV = "Dialeto de la basa";
   1217 			stringaEN = "Inglese";
   1218 			stringaModificaOpzioni = "Modifica Opzioni";
   1219 			stringaInformazioni = "Informazioni";
   1220 			stringaInformazioni2 = "JBriscola le' an dugo de briscola par computer scrit in java, pensa' e realiza'\n da Sebastiano Tronto. Al dugo l'e' sotto licenza GNU/Gpl versione 2 o sucesive; questo ol dir che chi che ol\n(se l'e' bon) al pol modificar al dugo coi codici sorgenti del programa. Se no i ve ha dat i sorgenti\nasieme al dugo, pote' domandarmeli co na e-mail a sebastiano@luganega.org.\n\nJBriscola version " + version + "\nCopyright 2009 Sebastiano Tronto, license GNU/Gpl 2.0 or later\nE-mail: sebastiano@luganega.org";
   1221 			stringaSuono = "Efeti sonori";
   1222 			stringaPunteggio = "Varda i punti";
   1223 			stringaSfondo = "Sfondo";
   1224 			stringaTasti = "Tasti rapidi";
   1225 			stringaAggiornamenti = "Varda se ghe ne' na version pi nova";
   1226 			stringaAggiornamentiSi = "Ghe ne' na version pi nova: ";
   1227 			stringaAggiornamentiNo = "No ghe ne na version pi nova";
   1228 			stringaScarica = "Te pol scaricar le version pi nova\ndal sito http://porkynator.altervista.org/programmi.html";
   1229 			stringaNoInternet = "Erore: no te se su internet";
   1230 			stringaTasti2 = "1    Duga la prima carta\n2    Duga la seconda carta\n3    Duga la terza carta\nF1   Tasti rapidi\nF2   " + stringaNuovaPartita + "\nF3   " + stringaOpzioni + "\nF4   " + stringaPunteggio + "\nF5   " + stringaInformazioni + "\nF6   " + stringaAggiornamenti + "\nq    " + stringaEsci;
   1231 		}
   1232 		if ( lang.equals( "bv" ) ) {
   1233 			stringaBottonePrendi = "Ciapa su/lasa e carte";
   1234 			stringaPrimaGioca = "Prima Zuga!";
   1235 			stringaUltime4 = "Ultima carta - Ocio a la briscola!";
   1236 			stringaVinto = "Ti ga vinto!";
   1237 			stringaPerso = "Ti ga perso";
   1238 			stringaPareggio = "Pari";
   1239 			stringaGiocatore = "Zugador: ";
   1240 			stringaComputer = "\nComputer: ";
   1241 			stringaNuovaPartita = "N'altra Partida";
   1242 			stringaVuoiDavveroIniziare = "Ti vol sul serio scuminziar n'altra partida?";
   1243 			stringaVuoiDavveroUscire = "Ti vol sul serio stusar su?";
   1244 			stringaSi = "Si";
   1245 			stringaNo = "No";
   1246 			stringaOpzioni = "Opzioni...";
   1247 			stringaEsci = "Stusa su";
   1248 			stringaImpossibileConfigurare = "No ghe son riusito a scrivere al file de configurazione.\nMandeme na mail a: sebastiano@luganega.org\n\nEcezion:\n";
   1249 			stringaLingua = "Lengua";
   1250 			stringaAnnulla = "Annulla";
   1251 			stringaIt = "Italian";
   1252 			stringaLa = "Latin";
   1253 			stringaBL = "Dialeto Belumat";
   1254 			stringaBV = "Dialeto Veneto";
   1255 			stringaEN = "Inglese";
   1256 			stringaModificaOpzioni = "Modifica Opzioni";
   1257 			stringaInformazioni = "Informasioni";
   1258 			stringaInformazioni2 = "JBriscola xe an zugo de briscola par computer scrito in java, pensato e realisato\n da Sebastiano Tronto. Al zugo xe sotto licenza GNU/Gpl versione 2 o sucesive; questo vol dire che chi che\nvol (se xe bono) al pol modificare al zugo coi codici sorgenti del programa. Se no i ve ha dato i sorgenti\nasieme al zugo, pote' domandarmeli co na e-mail a sebastiano@luganega.org.\n\nJBriscola version " + version + "\nCopyright 2009 Sebastiano Tronto, license GNU/Gpl 2.0 or later\nE-mail: sebastiano@luganega.org";
   1259 			stringaSuono = "Efeti sonori";
   1260 			stringaPunteggio = "Varda i punti";
   1261 			stringaSfondo = "Sfondo";
   1262 			stringaTasti = "Tasti rapidi";
   1263 			stringaAggiornamenti = "Varda se xe ne' na versione pi nova";
   1264 			stringaAggiornamentiSi = "Ghe xe na versione pi nova: ";
   1265 			stringaAggiornamentiNo = "No ghe xe na versione pi nova";
   1266 			stringaScarica = "Te pol scaricar le versione pi nova\ndal sito http://porkynator.altervista.org/programmi.html";
   1267 			stringaNoInternet = "Erore: no ti xe su internet";
   1268 			stringaTasti2 = "1    Zuga la prima carta\n2    Zuga la seconda carta\n3    Zuga la terza carta\nF1   Tasti rapidi\nF2   " + stringaNuovaPartita + "\nF3   " + stringaOpzioni + "\nF4   " + stringaPunteggio + "\nF5   " + stringaInformazioni + "\nF6   " + stringaAggiornamenti + "\nq    " + stringaEsci;
   1269 		}
   1270 		if ( lang.equals( "en" ) ) {
   1271 			stringaBottonePrendi = "Take/leave cards";
   1272 			stringaPrimaGioca = "Play your card before!";
   1273 			stringaUltime4 = "Last card - keep your eye on the briscola!";
   1274 			stringaVinto = "You won!";
   1275 			stringaPerso = "You lost";
   1276 			stringaPareggio = "Sixty - sixty!";
   1277 			stringaGiocatore = "Palyer: ";
   1278 			stringaComputer = "\nComputer: ";
   1279 			stringaNuovaPartita = "New Game";
   1280 			stringaVuoiDavveroIniziare = "Do you really want to start a new game?";
   1281 			stringaVuoiDavveroUscire = "Do you really want to exit?";
   1282 			stringaSi = "Yes";
   1283 			stringaNo = "No";
   1284 			stringaOpzioni = "Options...";
   1285 			stringaEsci = "Exit";
   1286 			stringaImpossibileConfigurare = "Couldn't write to the configuration file.\nPlease report the bug to: sebastiano@luganega.org\n\nException:\n";
   1287 			stringaLingua = "Lang";
   1288 			stringaAnnulla = "Cancel";
   1289 			stringaIt = "Italian";
   1290 			stringaLa = "Latin";
   1291 			stringaBL = "Belluno dialect";
   1292 			stringaBV = "Venice dialect";
   1293 			stringaEN = "English";
   1294 			stringaModificaOpzioni = "Change options";
   1295 			stringaInformazioni = "Information";
   1296 			stringaInformazioni2 = "JBriscola is a briscola pc game written in java, meant\nand made by Sebastiano Tronto. The game is protected by the GNU/General public licence version 2 or later.\n\nJBriscola version" + version + "\nCopyright 2009 Sebastiano Tronto, license GNU/Gpl 2.0 or later\nE-mail: sebastiano@luganega.org";
   1297 			stringaSuono = "Sound";
   1298 			stringaPunteggio = "Score";
   1299 			stringaSfondo = "Background";
   1300 			stringaTasti = "Hot keys";
   1301 			stringaAggiornamenti = "Check updates";
   1302 			stringaAggiornamentiSi = "Update available: ";
   1303 			stringaAggiornamentiNo = "No updates available";
   1304 			stringaScarica = "You can get the latest version from the site\nhttp://porkynator.altervista.org/programmi.html";
   1305 			stringaNoInternet = "Error: no internet connection";
   1306 			stringaTasti2 = "1    Play the first card\n2    Play the second card\n3    Play the third card\nF1   Get this message\nF2   " + stringaNuovaPartita + "\nF3   " + stringaOpzioni + "\nF4   " + stringaPunteggio + "\nF5   " + stringaInformazioni + "\nF6   " + stringaAggiornamenti + "\nq    " + stringaEsci;
   1307 		}
   1308 		sound = ( soundString.equals( "suono=si" ) );
   1309 		keys = ( keysString.equals( "tasti=si" ) );
   1310 		color = new Color( r, g, b );
   1311 		if ( frame != null ) {
   1312 			frame.pannello.repaint();
   1313 			frame.pannello2.repaint();
   1314 			frame.repaint();
   1315 		}
   1316 	}
   1317 }