ancient-projects

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

Main.java (59704B)


      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 	 * aiTrenta serve per determinare se la partida che si sta giocando è
     43 	 * normale o ai 30.
     44 	 * carteScoperte serve se viene attivato il trucco per mostrare le
     45 	 * carte della CPU.
     46 	 * sound e keys riguardano le opzioni (souno si o no, tasti rapidi si
     47 	 * o no) salvate nel file di configurazione. */
     48 	public static boolean toccaAllaCPU = false;
     49 	public static boolean CPUHaGiocato = false;
     50 	public static boolean haGiocatoPrima = true;
     51 	public static boolean aiTrenta = false;
     52 	public static boolean carteScoperte = false;
     53 	public static boolean sound = true;
     54 	public static boolean keys = true;
     55 	
     56 	/* frame è la finestra principale del gioco, color il colore dello sfondo.
     57 	 * lang, soundString e keysString servono a leggere le opzioni dal file
     58 	 * di configurazione. */
     59 	public static Frame frame;
     60 	public static Color color = new Color( 0, 150, 0 );
     61 	public static String lang, soundString, keysString;
     62 
     63 	/* Tutte le stringhe che vengono utilizzate durante il gioco sono
     64 	 * inizializzate qui, per poter essere tradotte in altre lingue. */
     65 	public static String version = "0.3";
     66 	public static String semi[] = { "Bastoni", "Coppe", "Denari", "Spade" };
     67 	public static String stringaBriscola = "Briscola";
     68 	public static String stringaBottonePrendi = "Prendi/Lascia carte";
     69 	public static String stringaPrimaGioca = "Prima Gioca!";
     70 	public static String stringaUltime4 = "Ultima carta - Occhio alla briscola!";
     71 	public static String stringaVinto = "Hai Vinto!";
     72 	public static String stringaPerso = "Hai Perso";
     73 	public static String stringaPareggio = "Pareggio";
     74 	public static String stringaGiocatore = "Giocatore: ";
     75 	public static String stringaComputer = "\nComputer: ";
     76 	public static String stringaNuovaPartita = "Nuova Partita";
     77 	public static String stringaNuovaPartitaAiTrenta = "Nuova Partita Ai 30";
     78 	public static String stringaVuoiDavveroIniziare = "Vuoi davvero iniziare una nuova partita?";
     79 	public static String stringaVuoiDavveroUscire = "Vuoi davvero uscire?";
     80 	public static String stringaSi = "Si";
     81 	public static String stringaNo = "No";
     82 	public static String stringaOpzioni = "Opzioni...";
     83 	public static String stringaEsci = "Esci";
     84 	public static String stringaImpossibileConfigurare = "Impossibile modificare il file di configurazione.\nSegnalare il bug a: sebastiano@luganega.org\n\nEccezione:\n";
     85 	public static String stringaLingua = "Lingua";
     86 	public static String stringaAnnulla = "Annulla";
     87 	public static String stringaIt = "Italiano";
     88 	public static String stringaLa = "Latino";
     89 	public static String stringaBL = "Dialetto Bellunese";
     90 	public static String stringaBV = "Dialetto Basso Veneto";
     91 	public static String stringaEN = "Inglese";
     92 	public static String stringaModificaOpzioni = "Modifica Opzioni";
     93 	public static String stringaInformazioni = "Informazioni";
     94 	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";
     95 	public static String stringaSuono = "Effetti Sonori";
     96 	public static String stringaPunteggio = "Punteggio";
     97 	public static String stringaSfondo = "Sfondo";
     98 	public static String stringaTasti = "Tasti rapidi";
     99 	public static String stringaAggiornamenti = "Cerca aggiornamenti";
    100 	public static String stringaTrucchi = "Trucchi";
    101 	public static String stringaInserisciCodice = "Inserisci il codice:";
    102 	public static String stringaTruccoAttivato = "Trucco attivato!";
    103 	public static String stringaTruccoSbagliato = "Trucco non valido";
    104 	public static String stringaCheCartaVuoi = "E allora che carta vuoi?";
    105 	public static String stringaAggiornamentiSi = "Aggiornamento disponibile: ";
    106 	public static String stringaAggiornamentiNo = "Nessun aggiornamento disponibile";
    107 	public static String stringaScarica = "E' possibile scaricare la versione più recente\ndal sito http://porkynator.altervista.org/programmi.html";
    108 	public static String stringaNoInternet = "Errore: nessuna connessione internet";
    109 	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 + "\nF7   " + stringaNuovaPartitaAiTrenta + "\nF8   " + stringaTrucchi + "\nq    " + stringaEsci;
    110 
    111 	public static void main( String args[] ) {
    112 		
    113 		/* Chiama il metodo settaOpzioni per leggere le impostazioni
    114 		 * dell'utente da un eventuale file di configurazione */
    115 		settaOpzioni();
    116 		
    117 		/* Crea la finestra principale del gioco e la posiziona al centro
    118 		 * dello schermo. */
    119 		frame = new Frame();
    120 		frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );
    121 		frame.setResizable( false );
    122 		frame.setSize( 600, 600 );
    123 		frame.setLocation( (Toolkit.getDefaultToolkit().getScreenSize().width - 600) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - 600) / 2);
    124 		frame.setVisible( true );
    125 	}
    126 	
    127 	/* Algoritmo per mischiare il mazzo: prende due carte a caso e le
    128 	 * inverte di posto, utilizzando una variabile aux. Ripete il procedimento
    129 	 * per 391 volte. */
    130 	public void mischia() {
    131 		
    132 		ImageIcon aux;
    133 		
    134 		mano = 0;
    135 		punteggio = 0;
    136 		punteggioCPU = 0;
    137 		cartaDaPescare = 6;
    138 		frame.mazzo = true;
    139 		toccaAllaCPU = false;
    140 		CPUHaGiocato = false;
    141 		haGiocatoPrima = true;
    142 		frame.mazzo = true;
    143 		
    144 		/* Inizializza l'array di carte mescolate ordinato */
    145 		for ( int i = 0, k = 0; i < 10; i++ )
    146 			for ( int j = 0; j < 4; j++, k++ )
    147 				frame.arrayCarteMescolate[k] = frame.arrayCarte[i][j];
    148 		
    149 		/* Mescola le carte utilizzando il metodo sopra citato */
    150 		for ( int i = 0; i < 391; i++ ) {
    151 			double a = Math.random() * 40;
    152 			int x = (int) a;
    153 			double b = Math.random() * 40;
    154 			int y = (int) b;
    155 			aux = frame.arrayCarteMescolate[x];
    156 			frame.arrayCarteMescolate[x] = frame.arrayCarteMescolate[y];
    157 			frame.arrayCarteMescolate[y] = aux;
    158 		}
    159 		
    160 		/* Imposta il seme della briscola leggendo il nome dell'ultima carta
    161 		 * utilizzando un array ausiliare */
    162 		char auxChar[] = frame.arrayCarteMescolate[39].toString().toCharArray();
    163 		semeBriscola = auxChar[auxChar.length-5] - 49;
    164 		
    165 		/* Distribuisce le carte */
    166 		frame.carteInMano[0] = frame.arrayCarteMescolate[0];
    167 		frame.carteInMano[1] = frame.arrayCarteMescolate[1];
    168 		frame.carteInMano[2] = frame.arrayCarteMescolate[2];
    169 		frame.carteCPU[0] = frame.arrayCarteMescolate[3];
    170 		frame.carteCPU[1] = frame.arrayCarteMescolate[4];
    171 		frame.carteCPU[2] = frame.arrayCarteMescolate[5];
    172 		frame.ultimaCarta = frame.arrayCarteMescolate[39];
    173 		frame.giocata[0] = null;
    174 		frame.giocata[1] = null;
    175 	}
    176 	
    177 	/* Viene chiamato a fine partita. */
    178 	public void pulisciTavolo() {
    179 		
    180 		punteggio = 0;
    181 		punteggioCPU = 0;
    182 		cartaDaPescare = 6;
    183 		toccaAllaCPU = false;
    184 		CPUHaGiocato = false;
    185 		haGiocatoPrima = true;
    186 		
    187 		frame.mazzo = false;
    188 		frame.ultimaCarta = null;
    189 		for ( int i = 0; i < 3; i++ ) {
    190 			frame.carteCPU[i] = null;
    191 			frame.carteInMano[i] = null;
    192 		}
    193 		
    194 		frame.pannello.repaint();
    195 		frame.repaint();
    196 		
    197 	}
    198 	
    199 	/* Fa giocare la CPU. Questo metodo contiene l'intelligenza artificiale
    200 	 * del gioco. Ho preferito non commentare molto il corpo del metodo per
    201 	 * due motivi; il primo è che abbastanza intuitivo: basta sapere che i
    202 	 * vari metodi vaiLiscio(), vaiTaglio() ecc... tentano di fare ciò che
    203 	 * ovviamente dice il loro nome, se ci riescono restituiscono true,
    204 	 * in caso contrario false.*/
    205 	public void giocaCPU() {
    206 		
    207 		/* Nelle prime 16 mani ragiona in maniera diversa*/
    208 		if ( mano < 16 ) {
    209 			
    210 			/* Valuta cosa fare se il giocatore non ha ancora giocato. */
    211 			if ( frame.giocata[0] == null ) {
    212 				if ( vaiPunti() );
    213 				else if ( vaiLiscio() );
    214 				else if ( vaiTaglio() );
    215 				else if ( vaiBriscolaAlta() );
    216 				else if ( vaiCarico() );
    217 				else if ( vaiTre() );
    218 				else if ( vaiAsso() );
    219 				else;
    220 			}
    221 			
    222 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    223 			else {
    224 				if ( haLisciato() ) {
    225 					if ( vaiSopra() );
    226 					else if ( vaiLiscio() );
    227 					else if ( vaiPunti() );
    228 					else if ( vaiTaglio() );
    229 					else if ( vaiTre() );
    230 					else if ( vaiBriscolaAlta() );
    231 					else if ( vaiCarico() );
    232 					else if ( vaiAsso() );
    233 				} else if ( haMessoPunti() ) {
    234 					if ( vaiSopra() );
    235 					else if ( vaiLiscio() );
    236 					else if ( vaiTaglio() );
    237 					else if ( vaiPunti() );
    238 					else if ( vaiTre() );
    239 					else if ( vaiBriscolaAlta() );
    240 					else if ( vaiCarico() );
    241 					else if ( vaiAsso() );
    242 				} else if ( haTagliato() ) {
    243 					if ( vaiLiscio() );
    244 					else if ( vaiPunti() );
    245 					else if ( vaiTaglio() );
    246 					else if ( vaiTre() );
    247 					else if ( vaiBriscolaAlta() );
    248 					else if ( vaiCarico() );
    249 					else if ( vaiAsso() );
    250 				} else if ( haMessoBriscolaAlta() ) {
    251 					if ( vaiLiscio() );
    252 					else if ( vaiPunti() );
    253 					else if ( vaiTre() );
    254 					else if ( vaiTaglio() );
    255 					else if ( vaiBriscolaAlta() );
    256 					else if ( vaiCarico() );
    257 					else if ( vaiAsso() );
    258 				} else if ( haMessoTre() ) {
    259 					if ( vaiAsso() );
    260 					else if ( vaiLiscio() );
    261 					else if ( vaiPunti() );
    262 					else if ( vaiTaglio() );
    263 					else if ( vaiBriscolaAlta() );
    264 					else if ( vaiCarico() );
    265 				} else if ( haMessoAsso() ) {
    266 					if ( vaiLiscio() );
    267 					else if ( vaiPunti() );
    268 					else if ( vaiTaglio() );
    269 					else if ( vaiBriscolaAlta() );
    270 					else if ( vaiCarico() );
    271 					else if ( vaiTre() );
    272 				} else if ( haCaricato() ) {
    273 					if ( vaiSopra() );
    274 					else if ( vaiTre() );
    275 					else if ( vaiBriscolaAlta() );
    276 					else if ( vaiTaglio() );
    277 					else if ( vaiAsso() );
    278 					else if ( vaiLiscio() );
    279 					else if ( vaiPunti() );
    280 					else if ( vaiCarico() );
    281 				}
    282 			}
    283 		}
    284 		
    285 		/* Nella penultima mano (prima di pescare l'ultima carta) */
    286 		else if ( mano == 16 ) {
    287 			
    288 			/* Valuta cosa fare se il giocatore non ha ancora giocato. */
    289 			if ( frame.giocata[0] == null ) {
    290 				char aux[];
    291 				aux = frame.ultimaCarta.toString().toCharArray();
    292 				if ( aux[aux.length-7] - 48 == 3 || aux[aux.length-7] - 48 == 1 ) {
    293 					if ( vaiCarico() );
    294 					else if ( vaiPunti() );
    295 					else if ( vaiLiscio() );
    296 					else if ( vaiTaglio() );
    297 					else if ( vaiBriscolaAlta() );
    298 					else if ( vaiTre() );
    299 					else if ( vaiAsso() );
    300 					else;
    301 				} else {
    302 					if ( vaiPunti() );
    303 					else if ( vaiLiscio() );
    304 					else if ( vaiTaglio() );
    305 					else if ( vaiBriscolaAlta() );
    306 					else if ( vaiCarico() );
    307 					else if ( vaiTre() );
    308 					else if ( vaiAsso() );
    309 					else;
    310 				}
    311 			}
    312 			
    313 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    314 			else {
    315 				char aux[];
    316 				aux = frame.ultimaCarta.toString().toCharArray();
    317 				if ( aux[aux.length-7] - 48 == 3 || aux[aux.length-7] - 48 == 1 ) {
    318 					if ( haCaricato() ) {
    319 						if ( vaiSopra() );
    320 						else if ( vaiLiscio() );
    321 						else if ( vaiPunti() );
    322 						else if ( vaiTre() );
    323 						else if ( vaiTaglio() );
    324 						else if ( vaiBriscolaAlta() );
    325 						else if ( vaiAsso() );
    326 						else if ( vaiCarico() );
    327 					}
    328 				} else {
    329 					if ( haLisciato() ) {
    330 						if ( vaiSopra() );
    331 						else if ( vaiLiscio() );
    332 					else if ( vaiPunti() );
    333 						else if ( vaiTaglio() );
    334 						else if ( vaiTre() );
    335 						else if ( vaiBriscolaAlta() );
    336 						else if ( vaiCarico() );
    337 						else if ( vaiAsso() );
    338 					} else if ( haMessoPunti() ) {
    339 						if ( vaiSopra() );
    340 						else if ( vaiLiscio() );
    341 						else if ( vaiTaglio() );
    342 						else if ( vaiPunti() );
    343 						else if ( vaiTre() );
    344 						else if ( vaiBriscolaAlta() );
    345 						else if ( vaiCarico() );
    346 						else if ( vaiAsso() );
    347 					} else if ( haTagliato() ) {
    348 						if ( vaiLiscio() );
    349 						else if ( vaiPunti() );
    350 						else if ( vaiTaglio() );
    351 						else if ( vaiTre() );
    352 						else if ( vaiBriscolaAlta() );
    353 						else if ( vaiCarico() );
    354 						else if ( vaiAsso() );
    355 					} else if ( haMessoBriscolaAlta() ) {
    356 						if ( vaiLiscio() );
    357 						else if ( vaiPunti() );
    358 						else if ( vaiTre() );
    359 						else if ( vaiTaglio() );
    360 						else if ( vaiBriscolaAlta() );
    361 						else if ( vaiCarico() );
    362 						else if ( vaiAsso() );
    363 					} else if ( haMessoTre() ) {
    364 						if ( vaiAsso() );
    365 						else if ( vaiLiscio() );
    366 						else if ( vaiPunti() );
    367 						else if ( vaiTaglio() );
    368 						else if ( vaiBriscolaAlta() );
    369 						else if ( vaiCarico() );
    370 					} else if ( haMessoAsso() ) {
    371 						if ( vaiLiscio() );
    372 						else if ( vaiPunti() );
    373 						else if ( vaiTaglio() );
    374 						else if ( vaiBriscolaAlta() );
    375 						else if ( vaiCarico() );
    376 						else if ( vaiTre() );
    377 					} else if ( haCaricato() ) {
    378 						if ( vaiSopra() );
    379 						else if ( vaiTre() );
    380 						else if ( vaiBriscolaAlta() );
    381 						else if ( vaiAsso() );
    382 						else if ( vaiTaglio() );
    383 						else if ( vaiLiscio() );
    384 						else if ( vaiPunti() );
    385 						else if ( vaiCarico() );
    386 					}
    387 				}
    388 			}
    389 			
    390 		} else if ( mano == 17 ) {
    391 			
    392 			/* Valuta cosa fare se il giocatore non ha ancora giocato. */
    393 			if ( frame.giocata[0] == null ) {
    394 				if ( hoAsso() ) {
    395 					if ( vaiTre() );
    396 					else if ( vaiBriscolaAlta() );
    397 					else if ( vaiTaglio() );
    398 					else if ( vaiLiscio() );
    399 					else if ( vaiPunti() );
    400 					else if ( vaiAsso() );
    401 					else if ( vaiCarico() );
    402 				} else {
    403 					if ( vaiLiscio() );
    404 					else if ( vaiPunti() );
    405 					else if ( vaiTaglio() );
    406 					else if ( vaiBriscolaAlta() );
    407 					else if ( vaiCarico() );
    408 					else if ( vaiTre() );
    409 				}
    410 			}
    411 			
    412 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    413 			else {
    414 				if ( haLisciato() ) {
    415 					if ( vaiSopra() );
    416 					else if ( vaiLiscio() );
    417 					else if ( vaiPunti() );
    418 					else if ( vaiTaglio() );
    419 					else if ( vaiTre() );
    420 					else if ( vaiBriscolaAlta() );
    421 					else if ( vaiCarico() );
    422 					else if ( vaiAsso() );
    423 				} else if ( haMessoPunti() ) {
    424 					if ( vaiSopra() );
    425 					else if ( vaiLiscio() );
    426 					else if ( vaiTaglio() );
    427 					else if ( vaiPunti() );
    428 					else if ( vaiTre() );
    429 					else if ( vaiBriscolaAlta() );
    430 					else if ( vaiCarico() );
    431 					else if ( vaiAsso() );
    432 				} else if ( haTagliato() ) {
    433 					if ( vaiLiscio() );
    434 					else if ( vaiPunti() );
    435 					else if ( vaiTaglio() );
    436 					else if ( vaiTre() );
    437 					else if ( vaiBriscolaAlta() );
    438 					else if ( vaiCarico() );
    439 					else if ( vaiAsso() );
    440 				} else if ( haMessoBriscolaAlta() ) {
    441 					if ( vaiLiscio() );
    442 					else if ( vaiPunti() );
    443 					else if ( vaiTre() );
    444 					else if ( vaiTaglio() );
    445 					else if ( vaiBriscolaAlta() );
    446 					else if ( vaiCarico() );
    447 					else if ( vaiAsso() );
    448 				} else if ( haMessoTre() ) {
    449 					if ( vaiAsso() );
    450 					else if ( vaiLiscio() );
    451 					else if ( vaiPunti() );
    452 					else if ( vaiTaglio() );
    453 					else if ( vaiBriscolaAlta() );
    454 					else if ( vaiCarico() );
    455 				} else if ( haMessoAsso() ) {
    456 					if ( vaiLiscio() );
    457 					else if ( vaiPunti() );
    458 					else if ( vaiTaglio() );
    459 					else if ( vaiBriscolaAlta() );
    460 					else if ( vaiCarico() );
    461 					else if ( vaiTre() );
    462 				} else if ( haCaricato() ) {
    463 					if ( vaiSopra() );
    464 					else if ( vaiTre() );
    465 					else if ( vaiBriscolaAlta() );
    466 					else if ( vaiAsso() );
    467 					else if ( vaiTaglio() );
    468 					else if ( vaiLiscio() );
    469 					else if ( vaiPunti() );
    470 					else if ( vaiCarico() );
    471 				}
    472 			}
    473 			
    474 		} else if ( mano == 18 ) {
    475 			
    476 			/* Valuta cosa fare se il giocatore non ha ancora giocato. */
    477 			if ( frame.giocata[0] == null ) {
    478 				if ( vaiAsso() );
    479 				else if ( vaiCarico() );
    480 				else if ( vaiBriscolaAlta() );
    481 				else if ( vaiTaglio() );
    482 				else if ( vaiPunti() );
    483 				else if ( vaiLiscio() );
    484 				else if ( vaiTre() );
    485 			}
    486 			
    487 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    488 			else {
    489 				if ( haLisciato() ) {
    490 					if ( vaiSopra() );
    491 					else if ( vaiLiscio() );
    492 					else if ( vaiPunti() );
    493 					else if ( vaiTaglio() );
    494 					else if ( vaiTre() );
    495 					else if ( vaiBriscolaAlta() );
    496 					else if ( vaiCarico() );
    497 					else if ( vaiAsso() );
    498 				} else if ( haMessoPunti() ) {
    499 					if ( vaiSopra() );
    500 					else if ( vaiLiscio() );
    501 					else if ( vaiTaglio() );
    502 					else if ( vaiPunti() );
    503 					else if ( vaiTre() );
    504 					else if ( vaiBriscolaAlta() );
    505 					else if ( vaiCarico() );
    506 					else if ( vaiAsso() );
    507 				} else if ( haTagliato() ) {
    508 					if ( vaiLiscio() );
    509 					else if ( vaiPunti() );
    510 					else if ( vaiTaglio() );
    511 					else if ( vaiTre() );
    512 					else if ( vaiBriscolaAlta() );
    513 					else if ( vaiCarico() );
    514 					else if ( vaiAsso() );
    515 				} else if ( haMessoBriscolaAlta() ) {
    516 					if ( vaiLiscio() );
    517 					else if ( vaiPunti() );
    518 					else if ( vaiTre() );
    519 					else if ( vaiTaglio() );
    520 					else if ( vaiBriscolaAlta() );
    521 					else if ( vaiCarico() );
    522 					else if ( vaiAsso() );
    523 				} else if ( haMessoTre() ) {
    524 					if ( vaiAsso() );
    525 					else if ( vaiLiscio() );
    526 					else if ( vaiPunti() );
    527 					else if ( vaiTaglio() );
    528 					else if ( vaiBriscolaAlta() );
    529 					else if ( vaiCarico() );
    530 				} else if ( haMessoAsso() ) {
    531 					if ( vaiLiscio() );
    532 					else if ( vaiPunti() );
    533 					else if ( vaiTaglio() );
    534 					else if ( vaiBriscolaAlta() );
    535 					else if ( vaiCarico() );
    536 					else if ( vaiTre() );
    537 				} else if ( haCaricato() ) {
    538 					if ( vaiSopra() );
    539 					else if ( vaiTre() );
    540 					else if ( vaiBriscolaAlta() );
    541 					else if ( vaiAsso() );
    542 					else if ( vaiTaglio() );
    543 					else if ( vaiLiscio() );
    544 					else if ( vaiPunti() );
    545 					else if ( vaiCarico() );
    546 				}
    547 			}
    548 			
    549 		/* All'ultima mano è inutile ragionare, dato che ha una sola carta */
    550 		} else {
    551 			if ( vaiTre() );
    552 			else if ( vaiBriscolaAlta() );
    553 			else if ( vaiAsso() );
    554 			else if ( vaiTaglio() );
    555 			else if ( vaiLiscio() );
    556 			else if ( vaiPunti() );
    557 			else if ( vaiCarico() );
    558 		}
    559 		
    560 		/* Gioca la carta e aggiorna la finestra con il metodo repaint() */
    561 		frame.giocata[1] = frame.carteCPU[cartaDaGiocare];
    562 		frame.carteCPU[cartaDaGiocare] = null;
    563 		frame.pannello.repaint();
    564 		
    565 		CPUHaGiocato = true;
    566 		
    567 		if ( frame.giocata[0] == null )
    568 			toccaAllaCPU = false;
    569 	}
    570 	
    571 	/* Fa giocare una partita ai 30. È analogo al metodo precedente, cambia
    572 	 * solo la tecnica di gioco, quindi non è commentato. */
    573 	public void giocaCPUAiTrenta() {
    574 		
    575 		if ( punteggio <= 20 ) {
    576 			
    577 			if ( frame.giocata[0] == null ) {
    578 				if ( vaiPunti() );
    579 				else if ( vaiLiscio() );
    580 				else if ( vaiTaglio() );
    581 				else if ( vaiBriscolaAlta() );
    582 				else if ( vaiCarico() );
    583 				else if ( vaiTre() );
    584 				else if ( vaiAsso() );
    585 				else;
    586 			}
    587 			
    588 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    589 			else {
    590 				if ( haLisciato() ) {
    591 					if ( vaiSopra() );
    592 					else if ( vaiLiscio() );
    593 					else if ( vaiTre() );
    594 					else if ( vaiBriscolaAlta() );
    595 					else if ( vaiTaglio() );
    596 					else if ( vaiPunti() );
    597 					else if ( vaiAsso() );
    598 					else if ( vaiCarico() );
    599 				} else if ( haMessoPunti() ) {
    600 					if ( vaiSopra() );
    601 					else if ( vaiTre() );
    602 					else if ( vaiBriscolaAlta() );
    603 					else if ( vaiTaglio() );
    604 					else if ( vaiLiscio() );
    605 					else if ( vaiPunti() );
    606 					else if ( vaiAsso() );
    607 					else if ( vaiCarico() );
    608 				} else if ( haTagliato() ) {
    609 					if ( vaiLiscio() );
    610 					else if ( vaiPunti() );
    611 					else if ( vaiTaglio() );
    612 					else if ( vaiTre() );
    613 					else if ( vaiBriscolaAlta() );
    614 					else if ( vaiAsso() );
    615 					else if ( vaiCarico() );
    616 				} else if ( haMessoBriscolaAlta() ) {
    617 					if ( vaiLiscio() );
    618 					else if ( vaiPunti() );
    619 					else if ( vaiTre() );
    620 					else if ( vaiTaglio() );
    621 					else if ( vaiBriscolaAlta() );
    622 					else if ( vaiAsso() );
    623 					else if ( vaiCarico() );
    624 				} else if ( haMessoTre() ) {
    625 					if ( vaiAsso() );
    626 					else if ( vaiLiscio() );
    627 					else if ( vaiPunti() );
    628 					else if ( vaiTaglio() );
    629 					else if ( vaiBriscolaAlta() );
    630 					else if ( vaiCarico() );
    631 				} else if ( haMessoAsso() ) {
    632 					if ( vaiLiscio() );
    633 					else if ( vaiPunti() );
    634 					else if ( vaiTaglio() );
    635 					else if ( vaiBriscolaAlta() );
    636 					else if ( vaiCarico() );
    637 					else if ( vaiTre() );
    638 				} else if ( haCaricato() ) {
    639 					if ( vaiSopra() );
    640 					else if ( vaiTre() );
    641 					else if ( vaiBriscolaAlta() );
    642 					else if ( vaiTaglio() );
    643 					else if ( vaiAsso() );
    644 					else if ( vaiLiscio() );
    645 					else if ( vaiPunti() );
    646 					else if ( vaiCarico() );
    647 				}
    648 			}
    649 		}
    650 			
    651 		else {
    652 			
    653 			if ( frame.giocata[0] == null ) {
    654 				if ( vaiLiscio() );
    655 				else if ( vaiPunti() );
    656 				else if ( vaiTaglio() );
    657 				else if ( vaiBriscolaAlta() );
    658 				else if ( vaiAsso() );
    659 				else if ( vaiTre() );
    660 				else if ( vaiCarico() );
    661 				else;
    662 			}
    663 			
    664 			/* Valuta cosa fare quando invece il giocatore ha giocato */
    665 			else {
    666 				if ( haLisciato() ) {
    667 					if ( vaiSopra() );
    668 					else if ( vaiLiscio() );
    669 					else if ( vaiTre() );
    670 					else if ( vaiBriscolaAlta() );
    671 					else if ( vaiTaglio() );
    672 					else if ( vaiAsso() );
    673 					else if ( vaiPunti() );
    674 					else if ( vaiCarico() );
    675 				} else if ( haMessoPunti() ) {
    676 					if ( vaiSopra() );
    677 					else if ( vaiTre() );
    678 					else if ( vaiBriscolaAlta() );
    679 					else if ( vaiTaglio() );
    680 					else if ( vaiAsso() );
    681 					else if ( vaiLiscio() );
    682 					else if ( vaiPunti() );
    683 					else if ( vaiCarico() );
    684 				} else if ( haTagliato() ) {
    685 					if ( vaiLiscio() );
    686 					else if ( vaiTaglio() );
    687 					else if ( vaiTre() );
    688 					else if ( vaiBriscolaAlta() );
    689 					else if ( vaiAsso() );
    690 					else if ( vaiPunti() );
    691 					else if ( vaiCarico() );
    692 				} else if ( haMessoBriscolaAlta() ) {
    693 					if ( vaiLiscio() );
    694 					else if ( vaiTre() );
    695 					else if ( vaiTaglio() );
    696 					else if ( vaiAsso() );
    697 					else if ( vaiBriscolaAlta() );
    698 					else if ( vaiPunti() );
    699 					else if ( vaiCarico() );
    700 				} else if ( haMessoTre() ) {
    701 					if ( vaiAsso() );
    702 					else if ( vaiLiscio() );
    703 					else if ( vaiPunti() );
    704 					else if ( vaiTaglio() );
    705 					else if ( vaiBriscolaAlta() );
    706 					else if ( vaiCarico() );
    707 				} else if ( haMessoAsso() ) {
    708 					if ( vaiLiscio() );
    709 					else if ( vaiTaglio() );
    710 					else if ( vaiPunti() );
    711 					else if ( vaiBriscolaAlta() );
    712 					else if ( vaiCarico() );
    713 					else if ( vaiTre() );
    714 				} else if ( haCaricato() ) {
    715 					if ( vaiSopra() );
    716 					else if ( vaiTre() );
    717 					else if ( vaiBriscolaAlta() );
    718 					else if ( vaiTaglio() );
    719 					else if ( vaiAsso() );
    720 					else if ( vaiLiscio() );
    721 					else if ( vaiPunti() );
    722 					else if ( vaiCarico() );
    723 				}
    724 			}
    725 		}
    726 		
    727 		/* Gioca la carta e aggiorna la finestra con il metodo repaint() */
    728 		frame.giocata[1] = frame.carteCPU[cartaDaGiocare];
    729 		frame.carteCPU[cartaDaGiocare] = null;
    730 		frame.pannello.repaint();
    731 		
    732 		CPUHaGiocato = true;
    733 		
    734 		if ( frame.giocata[0] == null )
    735 			toccaAllaCPU = false;
    736 	}
    737 	
    738 	/* Determina se ha preso la CPU o il giocatore */
    739 	public void chiPrende() {
    740 		char aux[], auxCPU[];
    741 		aux = frame.giocata[0].toString().toCharArray();
    742 		auxCPU = frame.giocata[1].toString().toCharArray();
    743 		
    744 		/* Chiama il metodo giocatorePrende( boolean giocatore ) con parametro
    745 		 * true se ha preso il giocatore, false se ha preso la CPU */
    746 		giocatorePrende(   ( (aux[aux.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) )
    747 			|| ( (aux[aux.length-5] == auxCPU[auxCPU.length-5]) && laPrimaEPiuAlta( aux[aux.length-7] - 48, auxCPU[auxCPU.length-7] - 48 ) )
    748 			|| ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (aux[aux.length-5] != auxCPU[auxCPU.length-5]) && haGiocatoPrima ) );
    749 	}
    750 	
    751 	/* Confronta due carte per decidere quale ha più valore di presa.
    752 	 * Restituisce true se è la prima, false se è la seconda */
    753 	public boolean laPrimaEPiuAlta( int prima, int seconda ) {
    754 		int a, b;
    755 		switch ( prima ) {
    756 			case 0:
    757 				a = 10;
    758 				break;
    759 			case 1:
    760 				a = 12;
    761 				break;
    762 			case 3:
    763 				a = 11;
    764 				break;
    765 			default:
    766 				a = prima;
    767 				break;
    768 		}
    769 		switch ( seconda ) {
    770 			case 0:
    771 				b = 10;
    772 				break;
    773 			case 1:
    774 				b = 12;
    775 				break;
    776 			case 3:
    777 				b = 11;
    778 				break;
    779 			default:
    780 				b = seconda;
    781 				break;
    782 		}
    783 		return a > b;
    784 	}
    785 	
    786 	/* Viene chiamato con parametro true se ha preso il giocatore, false se
    787 	 * ha preso la CPU */
    788 	public void giocatorePrende( boolean giocatore ) {
    789 		if ( giocatore ) {
    790 			toccaAllaCPU = CPUHaGiocato = false;
    791 			haGiocatoPrima = true;
    792 		}
    793 		else {
    794 			toccaAllaCPU = true;
    795 			CPUHaGiocato = haGiocatoPrima = false;
    796 		}
    797 		daiPunti( giocatore );
    798 	}
    799 	
    800 	/* Da i punti (true al giocatore, false alla CPU) e fa pescare le carte*/
    801 	public void daiPunti( boolean giocatore ) {
    802 		
    803 		char aux[], auxCPU[];
    804 		aux = frame.giocata[0].toString().toCharArray();
    805 		auxCPU = frame.giocata[1].toString().toCharArray();
    806 		int punti = 0;
    807 		
    808 		switch( aux[aux.length-7] - 48 ) {
    809 			case 0:
    810 				punti += 4;
    811 				break;
    812 			case 1:
    813 				punti += 11;
    814 				break;
    815 			case 3:
    816 				punti += 10;
    817 				break;
    818 			case 8:
    819 				punti += 2;
    820 				break;
    821 			case 9:
    822 				punti += 3;
    823 				break;
    824 			default:
    825 				break;
    826 		}
    827 		switch( auxCPU[auxCPU.length-7] - 48 ) {
    828 			case 0:
    829 				punti += 4;
    830 				break;
    831 			case 1:
    832 				punti += 11;
    833 				break;
    834 			case 3:
    835 				punti += 10;
    836 				break;
    837 			case 8:
    838 				punti += 2;
    839 				break;
    840 			case 9:
    841 				punti += 3;
    842 				break;
    843 			default:
    844 				break;
    845 		}
    846 		
    847 		frame.giocata[0] = frame.giocata[1] = null;
    848 		
    849 		if ( giocatore ) {
    850 			punteggio += punti;
    851 			if ( mano < 18 ) {
    852 				if ( frame.carteInMano[0] == null )
    853 					frame.carteInMano[0] = frame.arrayCarteMescolate[cartaDaPescare];
    854 				if ( frame.carteInMano[1] == null )
    855 					frame.carteInMano[1] = frame.arrayCarteMescolate[cartaDaPescare];
    856 				if ( frame.carteInMano[2] == null )
    857 					frame.carteInMano[2] = frame.arrayCarteMescolate[cartaDaPescare];
    858 				cartaDaPescare++;
    859 				if ( frame.carteCPU[0] == null )
    860 					frame.carteCPU[0] = frame.arrayCarteMescolate[cartaDaPescare];
    861 				if ( frame.carteCPU[1] == null )
    862 					frame.carteCPU[1] = frame.arrayCarteMescolate[cartaDaPescare];
    863 				if ( frame.carteCPU[2] == null )
    864 					frame.carteCPU[2] = frame.arrayCarteMescolate[cartaDaPescare];
    865 				cartaDaPescare++;
    866 			}
    867 		}
    868 		
    869 		else {
    870 			punteggioCPU += punti;
    871 			if ( mano < 18 ) {
    872 				if ( frame.carteCPU[0] == null )
    873 					frame.carteCPU[0] = frame.arrayCarteMescolate[cartaDaPescare];
    874 				if ( frame.carteCPU[1] == null )
    875 					frame.carteCPU[1] = frame.arrayCarteMescolate[cartaDaPescare];
    876 				if ( frame.carteCPU[2] == null )
    877 					frame.carteCPU[2] = frame.arrayCarteMescolate[cartaDaPescare];
    878 				cartaDaPescare++;
    879 				if ( frame.carteInMano[0] == null )
    880 					frame.carteInMano[0] = frame.arrayCarteMescolate[cartaDaPescare];
    881 				if ( frame.carteInMano[1] == null )
    882 					frame.carteInMano[1] = frame.arrayCarteMescolate[cartaDaPescare];
    883 				if ( frame.carteInMano[2] == null )
    884 					frame.carteInMano[2] = frame.arrayCarteMescolate[cartaDaPescare];
    885 				cartaDaPescare++;
    886 			}
    887 		}
    888 		
    889 		/* Aggiorna la finestra */
    890 		frame.pannello.repaint();
    891 		frame.repaint();
    892 	}
    893 	
    894 	/* Vari metodi che determinano che tipo di carta ha giocato il giocatore.
    895 	 * Per farlo leggono il nome dell'immagine dal file. Dato che ogni carta
    896 	 * a un nome del tipo 1-1.jpg (asso di coppe) o 10-3 (re di denari) e
    897 	 * così via, è facile riconoscerle. */
    898 	public boolean haLisciato() {
    899 		char auxCPU[];
    900 		auxCPU = frame.giocata[0].toString().toCharArray();
    901 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    902 				 (auxCPU[auxCPU.length-7] - 48 != 0 ) && (auxCPU[auxCPU.length-7] - 48 != 1 ) &&
    903 				 (auxCPU[auxCPU.length-7] - 48 != 3 ) && (auxCPU[auxCPU.length-7] - 48 < 8 ) );
    904 	}
    905 	
    906 	public boolean haMessoPunti() {
    907 		char auxCPU[];
    908 		auxCPU = frame.giocata[0].toString().toCharArray();
    909 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    910 				 ( (auxCPU[auxCPU.length-7] - 48 == 0 ) || (auxCPU[auxCPU.length-7] - 48 == 8 ) ||
    911 				 (auxCPU[auxCPU.length-7] - 48 == 9 ) ) );
    912 	}
    913 		
    914 	public boolean haTagliato() {
    915 		char auxCPU[];
    916 		auxCPU = frame.giocata[0].toString().toCharArray();
    917 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    918 				 (auxCPU[auxCPU.length-7] - 48 != 0) && (auxCPU[auxCPU.length-7] - 48 != 1) &&
    919 				 (auxCPU[auxCPU.length-7] - 48 != 3) && (auxCPU[auxCPU.length-7] - 48 <= 7) );
    920 	}
    921 	
    922 	public boolean haMessoBriscolaAlta() {
    923 		char auxCPU[];
    924 		auxCPU = frame.giocata[0].toString().toCharArray();
    925 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    926 				 ( (auxCPU[auxCPU.length-7] - 48 == 0) || (auxCPU[auxCPU.length-7] - 48 == 8) ||
    927 				 (auxCPU[auxCPU.length-7] - 48 == 9) ) );
    928 	}
    929 	
    930 	public boolean haMessoTre() {
    931 		char auxCPU[];
    932 		auxCPU = frame.giocata[0].toString().toCharArray();
    933 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    934 				 (auxCPU[auxCPU.length-7] - 48 == 3) );
    935 	}
    936 	
    937 	public boolean haMessoAsso() {
    938 		char auxCPU[];
    939 		auxCPU = frame.giocata[0].toString().toCharArray();
    940 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
    941 				 (auxCPU[auxCPU.length-7] - 48 == 1) );
    942 	}
    943 	
    944 	public boolean haCaricato() {
    945 		char auxCPU[];
    946 		auxCPU = frame.giocata[0].toString().toCharArray();
    947 		return ( (frame.giocata[0] != null) && (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    948 				 ( (auxCPU[auxCPU.length-7] - 48 == 1 ) || (auxCPU[auxCPU.length-7] - 48 == 3 ) ) );
    949 	}
    950 	
    951 	/* I metodi seguenti cercano di andare liscio - dare punti - mettere
    952 	 * un taglio - ecc... e restituiscono true se hanno avuto successo,
    953 	 * false altrimenti. */
    954 	public boolean vaiLiscio() {
    955 		
    956 		char auxCPU[];
    957 		
    958 		for ( int i = 0; i < 3; i++ ) {
    959 			if ( frame.carteCPU[i] != null ) {
    960 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    961 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
    962 					 (auxCPU[auxCPU.length-7] - 48 != 0 ) && (auxCPU[auxCPU.length-7] - 48 != 1 ) &&
    963 					 (auxCPU[auxCPU.length-7] - 48 != 3 ) && (auxCPU[auxCPU.length-7] - 48 < 8 ) ) {
    964 					cartaDaGiocare = i;
    965 					return true;
    966 				}
    967 			}
    968 		}
    969 		
    970 		return false;
    971 	}
    972 	
    973 	public boolean vaiPunti() {
    974 		/* Cerca di dare punti, cercando di darne il meno possibile (meglio
    975 		 * un fante di re). */
    976 		
    977 		char[] auxCPU;
    978 		
    979 		for ( int i = 0; i < 3; i++ ) {
    980 			if ( frame.carteCPU[i] != null ) {
    981 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    982 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 8 ) ) {
    983 					cartaDaGiocare = i;
    984 					return true;
    985 				}
    986 			}
    987 		}
    988 		
    989 		for ( int i = 0; i < 3; i++ ) {
    990 			if ( frame.carteCPU[i] != null ) {
    991 				auxCPU = frame.carteCPU[i].toString().toCharArray();
    992 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 9 ) ) {
    993 					cartaDaGiocare = i;
    994 					return true;
    995 				}
    996 			}
    997 		}
    998 		
    999 		for ( int i = 0; i < 3; i++ ) {
   1000 			if ( frame.carteCPU[i] != null ) {
   1001 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1002 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 0 ) ) {
   1003 					cartaDaGiocare = i;
   1004 					return true;
   1005 				}
   1006 			}
   1007 		}
   1008 		
   1009 		return false;
   1010 	}
   1011 	public boolean vaiTaglio() {
   1012 		
   1013 		char auxCPU[];
   1014 		
   1015 		for ( int i = 0; i < 3; i++ ) {
   1016 			if ( frame.carteCPU[i] != null ) {
   1017 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1018 				if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola &&
   1019 					 (auxCPU[auxCPU.length-7] - 48 != 0) && (auxCPU[auxCPU.length-7] - 48 != 1) &&
   1020 					 (auxCPU[auxCPU.length-7] - 48 != 3) && (auxCPU[auxCPU.length-7] - 48 <= 7) ) {
   1021 					cartaDaGiocare = i;
   1022 					return true;
   1023 				}
   1024 			}
   1025 		}
   1026 		
   1027 		return false;
   1028 	}
   1029 	public boolean vaiBriscolaAlta() {
   1030 		
   1031 		char[] auxCPU;
   1032 		
   1033 		for ( int i = 0; i < 3; i++ ) {
   1034 			if ( frame.carteCPU[i] != null ) {
   1035 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1036 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 8 ) ) {
   1037 					cartaDaGiocare = i;
   1038 					return true;
   1039 				}
   1040 			}
   1041 		}
   1042 		
   1043 		for ( int i = 0; i < 3; i++ ) {
   1044 			if ( frame.carteCPU[i] != null ) {
   1045 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1046 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 9 ) ) {
   1047 					cartaDaGiocare = i;
   1048 					return true;
   1049 				}
   1050 			}
   1051 		}
   1052 		
   1053 		for ( int i = 0; i < 3; i++ ) {
   1054 			if ( frame.carteCPU[i] != null ) {
   1055 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1056 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 0 ) ) {
   1057 					cartaDaGiocare = i;
   1058 					return true;
   1059 				}
   1060 			}
   1061 		}
   1062 		
   1063 		return false;
   1064 	}
   1065 	public boolean vaiTre() {
   1066 		
   1067 		char auxCPU[];
   1068 		
   1069 		for ( int i = 0; i < 3; i++ ) {
   1070 			if ( frame.carteCPU[i] != null ) {
   1071 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1072 				if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola && (auxCPU[auxCPU.length-7] - 48 == 3) ) {
   1073 					cartaDaGiocare = i;
   1074 					return true;
   1075 				}
   1076 			}
   1077 		}
   1078 		
   1079 		return false;
   1080 	}
   1081 	public boolean vaiAsso() {
   1082 		
   1083 		char auxCPU[];
   1084 		
   1085 		for ( int i = 0; i < 3; i++ ) {
   1086 			if ( frame.carteCPU[i] != null ) {
   1087 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1088 				if ( auxCPU[auxCPU.length-5] - 49 == semeBriscola && (auxCPU[auxCPU.length-7] - 48 == 1) ) {
   1089 					cartaDaGiocare = i;
   1090 					return true;
   1091 				}
   1092 			}
   1093 		}
   1094 		
   1095 		return false;
   1096 	}
   1097 	public boolean vaiCarico() {
   1098 		
   1099 		char[] auxCPU;
   1100 		
   1101 		for ( int i = 0; i < 3; i++ ) {
   1102 			if ( frame.carteCPU[i] != null ) {
   1103 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1104 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 3 ) ) {
   1105 					cartaDaGiocare = i;
   1106 					return true;
   1107 				}
   1108 			}
   1109 		}
   1110 		
   1111 		for ( int i = 0; i < 3; i++ ) {
   1112 			if ( frame.carteCPU[i] != null ) {
   1113 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1114 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 1 ) ) {
   1115 					cartaDaGiocare = i;
   1116 					return true;
   1117 				}
   1118 			}
   1119 		}
   1120 		
   1121 		return false;
   1122 	}
   1123 	public boolean vaiSopra() {
   1124 		/* Innanzitutto controlla se il giocatore ha giocato (non dovrebbe
   1125 		 * essere possibile, in quanto quando questo metodo viene chiamato
   1126 		 * tale condizione è già stata verificata, ma è sempre meglio un
   1127 		 * controllo in più che uno in meno) e restituisce false in caso
   1128 		 * contrario */
   1129 		if ( frame.giocata[0] == null )
   1130 			return false;
   1131 			
   1132 		/* Tre variabili intere che serviranno a valutare quali delle tre
   1133 		 * carte è meglio giocare, se più di una può andare sopra. */
   1134 		int a = -1;
   1135 		int b = -1;
   1136 		int c = -1;
   1137 		
   1138 		/* Tre booleane che verificano quali delle tre carte possono
   1139 		 * andare sopra. */
   1140 		boolean laPrimaPuoAndareSopra = false;
   1141 		boolean laSecondaPuoAndareSopra = false;
   1142 		boolean laTerzaPuoAndareSopra = false;
   1143 		
   1144 		/* E tre array di caratteri ausiliari per leggere il nome delle
   1145 		 * carte, più quello per la carta giocata dal giocatore.*/
   1146 		char[] auxCPU1 = new char[1024];
   1147 		char[] auxCPU2 = new char[1024];
   1148 		char[] auxCPU3 = new char[1024];
   1149 		char[] aux = frame.giocata[0].toString().toCharArray();
   1150 		
   1151 		/* Se il giocatore ha giocato un asso, restituisce direttamente false. */
   1152 		if ( aux[aux.length-7] - 48 == 1 )
   1153 			return false;
   1154 		
   1155 		/* Valuta quali delle tre carte possono andare sopra, dopo essersi
   1156 		 * accertato di averle: nelle ultime mani non si hanno tutte le carte
   1157 		 * in mano, e noi non vogliamo una NullPointerException sul più bello
   1158 		 * di una partita, vero?! */
   1159 		if ( frame.carteCPU[0] != null ) {
   1160 			auxCPU1 = frame.carteCPU[0].toString().toCharArray();
   1161 			a = auxCPU1[auxCPU1.length-7] - 48;
   1162 			if ( (auxCPU1[auxCPU1.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( a, aux[aux.length-7] - 48 ) )
   1163 				laPrimaPuoAndareSopra = true;
   1164 		}
   1165 		
   1166 		if ( frame.carteCPU[1] != null ) {	
   1167 			auxCPU2 = frame.carteCPU[1].toString().toCharArray();
   1168 			b = auxCPU2[auxCPU2.length-7] - 48;
   1169 			if ( (auxCPU2[auxCPU2.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( b, aux[aux.length-7] - 48 ) )
   1170 				laSecondaPuoAndareSopra = true;
   1171 		}
   1172 		
   1173 		if ( frame.carteCPU[2] != null ) {
   1174 			auxCPU3 = frame.carteCPU[2].toString().toCharArray();
   1175 			c = auxCPU3[auxCPU3.length-7] - 48;
   1176 			if ( (auxCPU3[auxCPU3.length-5] - 49 == aux[aux.length-5] - 49) && laPrimaEPiuAlta( c, aux[aux.length-7] - 48 ) )
   1177 				laTerzaPuoAndareSopra = true;
   1178 		}
   1179 		
   1180 		/* Se nessuna carta può andare sopra, restituisce false. Se una
   1181 		 * sola delle tre può andare sopra la imposta come carta da giocare. */
   1182 		if ( !laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
   1183 			return false;
   1184 		else if ( laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
   1185 			cartaDaGiocare = 0;
   1186 		else if ( !laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
   1187 			cartaDaGiocare = 1;
   1188 		else if ( !laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
   1189 			cartaDaGiocare = 2;
   1190 			
   1191 		/* Se più di una carta può andare sopra, valuta quale è più alta. */
   1192 		else if ( laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && !laTerzaPuoAndareSopra )
   1193 			if ( laPrimaEPiuAlta( a, b ) )
   1194 				cartaDaGiocare = 0;
   1195 			else
   1196 				cartaDaGiocare = 1;
   1197 		else if ( !laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
   1198 			if ( laPrimaEPiuAlta( b, c ) )
   1199 				cartaDaGiocare = 1;
   1200 			else
   1201 				cartaDaGiocare = 2;
   1202 		else if ( laPrimaPuoAndareSopra && !laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
   1203 			if ( laPrimaEPiuAlta( a, c ) )
   1204 				cartaDaGiocare = 0;
   1205 			else
   1206 				cartaDaGiocare = 2;
   1207 		else if ( laPrimaPuoAndareSopra && laSecondaPuoAndareSopra && laTerzaPuoAndareSopra )
   1208 			if ( laPrimaEPiuAlta( a, b ) )
   1209 				if ( laPrimaEPiuAlta( a, c ) )
   1210 					cartaDaGiocare = 0;
   1211 				else
   1212 					cartaDaGiocare = 2;
   1213 			else
   1214 				if ( laPrimaEPiuAlta( b, c ) )
   1215 					cartaDaGiocare = 1;
   1216 				else
   1217 					cartaDaGiocare = 2;
   1218 		
   1219 		/* Controlla che la carta con cui sta cercando di andare sopra
   1220 		 * sia una figura o un carico. Non vogliamo mica prendere delle
   1221 		 * scartelle con delle scartelle, giusto?! */
   1222 		aux = frame.carteCPU[cartaDaGiocare].toString().toCharArray();
   1223 		if ( (aux[aux.length-7] - 48 != 0) && (aux[aux.length-7] - 48 != 1) &&
   1224 			 (aux[aux.length-7] - 48 != 3) && (aux[aux.length-7] - 48 <= 7) )
   1225 			return false;
   1226 
   1227 		return true;
   1228 	}
   1229 	
   1230 	/* I metodi seguenti valutano le carte che la CPU ha in mano. */
   1231 	public boolean hoCarico() {
   1232 		
   1233 		char auxCPU[];
   1234 		
   1235 		for ( int i = 0; i < 3; i++ ) {
   1236 			if ( frame.carteCPU[i] != null ) {
   1237 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1238 				if ( (auxCPU[auxCPU.length-5] - 49 != semeBriscola) &&
   1239 					 ( (auxCPU[auxCPU.length-7] - 48 == 1 ) || (auxCPU[auxCPU.length-7] - 48 == 3 ) ) ) {
   1240 					return true;
   1241 				}
   1242 			}
   1243 		}
   1244 		
   1245 		return false;
   1246 	}
   1247 	public boolean hoAsso() {
   1248 		
   1249 		char auxCPU[];
   1250 		
   1251 		for ( int i = 0; i < 3; i++ ) {
   1252 			if ( frame.carteCPU[i] != null ) {
   1253 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1254 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 1 ) ) {
   1255 					return true;
   1256 				}
   1257 			}
   1258 		}
   1259 		
   1260 		return false;
   1261 	}
   1262 	public boolean hoTre() {
   1263 		
   1264 		char auxCPU[];
   1265 		
   1266 		for ( int i = 0; i < 3; i++ ) {
   1267 			if ( frame.carteCPU[i] != null ) {
   1268 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1269 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) && (auxCPU[auxCPU.length-7] - 48 == 3 ) ) {
   1270 					return true;
   1271 				}
   1272 			}
   1273 		}
   1274 		
   1275 		return false;
   1276 	}
   1277 	public boolean hoBriscolaAlta() {
   1278 		
   1279 		char auxCPU[];
   1280 		
   1281 		for ( int i = 0; i < 3; i++ ) {
   1282 			if ( frame.carteCPU[i] != null ) {
   1283 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1284 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
   1285 					 ( (auxCPU[auxCPU.length-7] - 48 == 0 ) || (auxCPU[auxCPU.length-7] - 48 == 8 ) || (auxCPU[auxCPU.length-7] - 48 == 9 ) ) ) {
   1286 					return true;
   1287 				}
   1288 			}
   1289 		}
   1290 		
   1291 		return false;
   1292 	}
   1293 	public boolean hoTaglio() {
   1294 		
   1295 		char auxCPU[];
   1296 		
   1297 		for ( int i = 0; i < 3; i++ ) {
   1298 			if ( frame.carteCPU[i] != null ) {
   1299 				auxCPU = frame.carteCPU[i].toString().toCharArray();
   1300 				if ( (auxCPU[auxCPU.length-5] - 49 == semeBriscola) &&
   1301 					 (auxCPU[auxCPU.length-7] - 48 < 8 ) && (auxCPU[auxCPU.length-7] - 48 != 3 )
   1302 					 && (auxCPU[auxCPU.length-7] - 48 != 1 ) && (auxCPU[auxCPU.length-7] - 48 != 0 ) ) {
   1303 					return true;
   1304 				}
   1305 			}
   1306 		}
   1307 		
   1308 		return false;
   1309 	}
   1310 	
   1311 	/* I vari trucchi del gioco. */
   1312 	public static void trucco( String trucco ) {
   1313 		
   1314 		byte[] truccoByte = trucco.getBytes();
   1315 		char[] truccoChar = new char[ truccoByte.length ];
   1316 		for ( int i = 0; i < truccoChar.length; i++ )
   1317 			truccoChar[i] = (char)truccoByte[i];
   1318 			
   1319 		String attivato = stringaTruccoSbagliato;
   1320 		
   1321 		/* Carta che vuoi dove vuoi. Esempio: x251 sostituisce
   1322 		 * la terza carta (2) con il 6 (5) di coppe (1). */
   1323 		if ( truccoChar[0] == 'x' && truccoChar.length == 4 ) {
   1324 		
   1325 			attivato = stringaTruccoAttivato;
   1326 			
   1327 			String aS = "" + truccoChar[1];
   1328 			String xS = "" + truccoChar[2];
   1329 			String yS = "" + truccoChar[3];
   1330 			
   1331 			int a, x, y;
   1332 			
   1333 			try {
   1334 				
   1335 				a = Integer.parseInt( aS );
   1336 				x = Integer.parseInt( xS );
   1337 				y = Integer.parseInt( yS );
   1338 				
   1339 				frame.carteInMano[a] = frame.arrayCarte[x][y];
   1340 				
   1341 			} catch ( Exception e ) {
   1342 				attivato = stringaTruccoSbagliato;
   1343 			}
   1344 		}
   1345 		
   1346 		/* Mostra le carte del computer. */
   1347 		if ( trucco.equalsIgnoreCase( "Kill Devil Hill" ) ) {
   1348 			
   1349 			attivato = stringaTruccoAttivato;
   1350 			
   1351 			carteScoperte = true;
   1352 			
   1353 		}
   1354 		
   1355 		/* Scambia le carte con il computer. */
   1356 		if ( trucco.equalsIgnoreCase( "Darkside of Aquarius" ) ) {
   1357 			
   1358 			attivato = stringaTruccoAttivato;
   1359 			
   1360 			ImageIcon aux = null;
   1361 			
   1362 			for ( int i = 0; i < 3; i++ ) {
   1363 				
   1364 				aux = frame.carteInMano[i];
   1365 				frame.carteInMano[i] = frame.carteCPU[i];
   1366 				frame.carteCPU[i] = aux;
   1367 				
   1368 			}
   1369 		}
   1370 		
   1371 		/* Cambia il seme di briscola con uno a caso, senza dire quale.
   1372 		 * L'ultima carta non cambia. È possibile comunque capire
   1373 		 * qual'è la briscola dal menu ?->Briscola*/
   1374 		if ( trucco.equalsIgnoreCase( "Change of Heart" ) ) {
   1375 			
   1376 			attivato = stringaTruccoAttivato;
   1377 			
   1378 			semeBriscola = (int) ( Math.random() * 4 );
   1379 			
   1380 		}
   1381 		
   1382 		/* Asso Tre e Re di Briscola tutti in mano (anche in caso di doppioni). */
   1383 		if ( trucco.equalsIgnoreCase( "Tears of The Dragon" ) ) {
   1384 			
   1385 			attivato = stringaTruccoAttivato;
   1386 			
   1387 			frame.carteInMano[0] = frame.arrayCarte[9][semeBriscola];
   1388 			frame.carteInMano[1] = frame.arrayCarte[2][semeBriscola];
   1389 			frame.carteInMano[2] = frame.arrayCarte[0][semeBriscola];
   1390 			
   1391 		}
   1392 		
   1393 		/* Tre assi di briscola. */
   1394 		if ( trucco.equalsIgnoreCase( "Navigate The Seas of The Sun" ) ) {
   1395 			
   1396 			attivato = stringaTruccoAttivato;
   1397 			
   1398 			frame.carteInMano[0] = frame.arrayCarte[0][semeBriscola];
   1399 			frame.carteInMano[1] = frame.arrayCarte[0][semeBriscola];
   1400 			frame.carteInMano[2] = frame.arrayCarte[0][semeBriscola];
   1401 			
   1402 		}
   1403 		
   1404 		/* Fa finire la partita al prossimo piglio. */
   1405 		if ( trucco.equalsIgnoreCase( "Omega" ) ) {
   1406 			
   1407 			attivato = stringaTruccoAttivato;
   1408 			
   1409 			mano = 19;
   1410 			
   1411 		}
   1412 		
   1413 		JOptionPane.showMessageDialog( frame, attivato, "JBriscola - " + version, JOptionPane.INFORMATION_MESSAGE );
   1414 		frame.pannello.repaint();
   1415 		frame.repaint();
   1416 		
   1417 	}
   1418 	
   1419 	/* Imposta le opzioni dell'utente cercando di leggerle dal file di configurazione. */
   1420 	public static void settaOpzioni() {
   1421 		
   1422 		/* Impostazioni predefinite. */
   1423 		lang = "it";
   1424 		soundString = "suono=si";
   1425 		keysString = "tasti=si";
   1426 		int r = 0;
   1427 		int g = 150;
   1428 		int b = 0;
   1429 		
   1430 		/* Cerca di leggere il file per impostare le opzioni. */
   1431 		Scanner scanner = null;
   1432 		File file = new File( "JBriscolaConfig.txt" );
   1433 		if ( file.exists() ) {
   1434 			try {
   1435 				scanner = new Scanner( file );
   1436 			} catch ( FileNotFoundException e ) { }
   1437 			try {
   1438 				lang = scanner.next();
   1439 				soundString = scanner.next();
   1440 				keysString = scanner.next();
   1441 				r = scanner.nextInt();
   1442 				g = scanner.nextInt();
   1443 				b = scanner.nextInt();
   1444 			} catch ( NoSuchElementException e ) { }
   1445 		}
   1446 		
   1447 		/* Modifica le opzioni. */
   1448 		if ( lang.equals( "it" ) ) {
   1449 			semi[0] = "Bastoni";
   1450 			semi[1] = "Coppe";
   1451 			semi[2] = "Denari";
   1452 			semi[3] = "Spade";
   1453 			stringaBriscola = "Briscola";
   1454 			stringaBottonePrendi = "Prendi/Lascia carte";
   1455 			stringaPrimaGioca = "Prima Gioca!";
   1456 			stringaUltime4 = "Ultima carta - Occhio alla briscola!";
   1457 			stringaVinto = "Hai Vinto!";
   1458 			stringaPerso = "Hai Perso";
   1459 			stringaPareggio = "Pareggio";
   1460 			stringaGiocatore = "Giocatore: ";
   1461 			stringaComputer = "\nComputer: ";
   1462 			stringaNuovaPartita = "Nuova Partita";
   1463 			stringaNuovaPartitaAiTrenta = "Nuova Partita Ai 30";
   1464 			stringaVuoiDavveroIniziare = "Vuoi davvero iniziare una nuova partita?";
   1465 			stringaVuoiDavveroUscire = "Vuoi davvero uscire?";
   1466 			stringaSi = "Si";
   1467 			stringaNo = "No";
   1468 			stringaOpzioni = "Opzioni...";
   1469 			stringaEsci = "Esci";
   1470 			stringaImpossibileConfigurare = "Impossibile modificare il file di configurazione.\nSegnalare il bug a: sebastiano@luganega.org\n\nEccezione:\n";
   1471 			stringaLingua = "Lingua";
   1472 			stringaAnnulla = "Annulla";
   1473 			stringaIt = "Italiano";
   1474 			stringaLa = "Latino";
   1475 			stringaBL = "Dialetto Bellunese";
   1476 			stringaBV = "Dialetto Basso Veneto";
   1477 			stringaEN = "Inglese";
   1478 			stringaModificaOpzioni = "Modifica Opzioni";
   1479 			stringaInformazioni = "Informazioni";
   1480 			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";
   1481 			stringaSuono = "Effetti sonori";
   1482 			stringaPunteggio = "Punteggio";
   1483 			stringaSfondo = "Sfondo";
   1484 			stringaTasti = "Tasti rapidi";
   1485 			stringaAggiornamenti = "Cerca aggiornamenti";
   1486 			stringaTrucchi = "Trucchi";
   1487 			stringaInserisciCodice = "Inserisci il codice:";
   1488 			stringaTruccoAttivato = "Trucco attivato!";
   1489 			stringaTruccoSbagliato = "Trucco non valido";
   1490 			stringaCheCartaVuoi = "E allora che carta vuoi?";
   1491 			stringaAggiornamentiSi = "Aggiornamento disponibile: ";
   1492 			stringaAggiornamentiNo = "Nessun aggiornamento disponibile";
   1493 			stringaScarica = "E' possibile scaricare la versione più recente\ndal sito http://porkynator.altervista.org/programmi.html";
   1494 			stringaNoInternet = "Errore: nessuna connessione internet";
   1495 			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 + "\nF7   " + stringaNuovaPartitaAiTrenta + "\nF8   " + stringaTrucchi + "\nq    " + stringaEsci;
   1496 		}
   1497 		else if ( lang.equals( "la" ) ) {
   1498 			semi[0] = "BACULI";
   1499 			semi[1] = "CALICES";
   1500 			semi[2] = "DENARII";
   1501 			semi[3] = "GLADII";
   1502 			stringaBriscola = "BRISCOLA";
   1503 			stringaBottonePrendi = "CAPIS/RELINQVIS CHARTAS";
   1504 			stringaPrimaGioca = "ANTE CHARTAM PONE!";
   1505 			stringaUltime4 = "CHARTA POSTREMA - INTVERE BRISCOLAM!";
   1506 			stringaVinto = "VICISTI!";
   1507 			stringaPerso = "PERDIDISTI";
   1508 			stringaPareggio = "AEQVATIO!";
   1509 			stringaGiocatore = "LVSOR: ";
   1510 			stringaComputer = "\nCOMPVTER: ";
   1511 			stringaNuovaPartita = "NOVA LVSO";
   1512 			stringaNuovaPartitaAiTrenta = "NOVA LVSO XXX";
   1513 			stringaVuoiDavveroIniziare = "NOVAM LVSIONEM INCIPERE?";
   1514 			stringaVuoiDavveroUscire = "EXIRE?";
   1515 			stringaSi = "ID VOLO";
   1516 			stringaNo = "NOLO";
   1517 			stringaOpzioni = "OPTIONES...";
   1518 			stringaEsci = "EXIRE";
   1519 			stringaImpossibileConfigurare = "CONFIGVRATIONIS FILE SCRIBERE NON POTVI.\nERROREM ME CERTIOREM FACITE: sebastiano@luganega.org\n\nEXCEPTIO:\n";
   1520 			stringaLingua = "LINGVA";
   1521 			stringaAnnulla = "ABROGA";
   1522 			stringaIt = "ITALICA";
   1523 			stringaLa = "LATINA";
   1524 			stringaBL = "BELLUNI";
   1525 			stringaBV = "VENETIAE";
   1526 			stringaEN = "ANGLICVS";
   1527 			stringaModificaOpzioni = "OPTIONES NOVARE";
   1528 			stringaInformazioni = "INFORMATIONES";
   1529 			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";
   1530 			stringaSuono = "SONVS";
   1531 			stringaPunteggio = "NVMERI";
   1532 			stringaSfondo = "COLOR";
   1533 			stringaTasti = "TASTI RAPIDI";
   1534 			stringaAggiornamenti = "VERSIONEM RECENTIOREM QVAERERE";
   1535 			stringaTrucchi = "CODICES";
   1536 			stringaInserisciCodice = "CODICEM INSCRIBE:";
   1537 			stringaTruccoAttivato = "CODEX INCIPIVIT!";
   1538 			stringaTruccoSbagliato = "ERROR CODICIS";
   1539 			stringaCheCartaVuoi = "QUAM CHARTAM VOLIS?";
   1540 			stringaNoInternet = "ERROR: INTERNETIS CONIVCTIO NON EST";
   1541 			stringaAggiornamentiSi = "VERSIO RECENTIOR EST: ";
   1542 			stringaAggiornamentiNo = "VERSIO RECENTIOR NON EST";
   1543 			stringaScarica = "VERSIONEM RECENTIOREM CEPTA ESSE POTEST:\nhttp://porkynator.altervista.org/programmi.html";
   1544 			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 + "\nF7   " + stringaNuovaPartitaAiTrenta + "\nF8   " + stringaTrucchi + "\nq    " + stringaEsci;
   1545 		}
   1546 		if ( lang.equals( "bl" ) ) {
   1547 			semi[0] = "Bastoi";
   1548 			semi[1] = "Coppe";
   1549 			semi[2] = "Danari";
   1550 			semi[3] = "Spade";
   1551 			stringaBriscola = "Briscola";
   1552 			stringaBottonePrendi = "Cio' su/lasa le carte";
   1553 			stringaPrimaGioca = "Prima Duga!";
   1554 			stringaUltime4 = "Ultima carta - Ocio a la briscola!";
   1555 			stringaVinto = "Te ha vint!";
   1556 			stringaPerso = "Te ha pers";
   1557 			stringaPareggio = "Pari";
   1558 			stringaGiocatore = "Dugador: ";
   1559 			stringaComputer = "\nComputer: ";
   1560 			stringaNuovaPartita = "Taca n'altra partida";
   1561 			stringaNuovaPartitaAiTrenta = "Taca na partida ai 30";
   1562 			stringaVuoiDavveroIniziare = "Utu sul serio scuminziar n'altra partida?";
   1563 			stringaVuoiDavveroUscire = "Utu sul serio stusar su?";
   1564 			stringaSi = "Si";
   1565 			stringaNo = "No";
   1566 			stringaOpzioni = "Opzioni...";
   1567 			stringaEsci = "Stusa su";
   1568 			stringaImpossibileConfigurare = "No ghe ho riva' a scrivere al file de configurazion.\nMandeme na mail a: sebastiano@luganega.org\n\nEcezion:\n";
   1569 			stringaLingua = "Lengua";
   1570 			stringaAnnulla = "Annulla";
   1571 			stringaIt = "Italian";
   1572 			stringaLa = "Latin";
   1573 			stringaBL = "Dialeto de Belun";
   1574 			stringaBV = "Dialeto de la basa";
   1575 			stringaEN = "Inglese";
   1576 			stringaModificaOpzioni = "Modifica Opzioni";
   1577 			stringaInformazioni = "Informazioni";
   1578 			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";
   1579 			stringaSuono = "Efeti sonori";
   1580 			stringaPunteggio = "Varda i punti";
   1581 			stringaSfondo = "Sfondo";
   1582 			stringaTasti = "Tasti rapidi";
   1583 			stringaAggiornamenti = "Varda se ghe ne' na version pi nova";
   1584 			stringaTrucchi = "Truchi";
   1585 			stringaInserisciCodice = "Scrivi al codice:";
   1586 			stringaTruccoAttivato = "Truco ativa'!";
   1587 			stringaTruccoSbagliato = "Truco sbaia'";
   1588 			stringaCheCartaVuoi = "Che carta utu alora?";
   1589 			stringaAggiornamentiSi = "Ghe ne' na version pi nova: ";
   1590 			stringaAggiornamentiNo = "No ghe ne na version pi nova";
   1591 			stringaScarica = "Te pol scaricar le version pi nova\ndal sito http://porkynator.altervista.org/programmi.html";
   1592 			stringaNoInternet = "Erore: no te se su internet";
   1593 			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 + "\nF7   " + stringaNuovaPartitaAiTrenta + "\nF8   " + stringaTrucchi + "\nq    " + stringaEsci;
   1594 		}
   1595 		if ( lang.equals( "bv" ) ) {
   1596 			semi[0] = "Bastoni";
   1597 			semi[1] = "Coppe";
   1598 			semi[2] = "Danari";
   1599 			semi[3] = "Spade";
   1600 			stringaBriscola = "Briscola";
   1601 			stringaBottonePrendi = "Ciapa su/lasa e carte";
   1602 			stringaPrimaGioca = "Prima Zuga!";
   1603 			stringaUltime4 = "Ultima carta - Ocio a la briscola!";
   1604 			stringaVinto = "Ti ga vinto!";
   1605 			stringaPerso = "Ti ga perso";
   1606 			stringaPareggio = "Pari";
   1607 			stringaGiocatore = "Zugador: ";
   1608 			stringaComputer = "\nComputer: ";
   1609 			stringaNuovaPartita = "N'altra Partida";
   1610 			stringaNuovaPartitaAiTrenta = "Na Partida ai 30";
   1611 			stringaVuoiDavveroIniziare = "Ti vol sul serio scuminziar n'altra partida?";
   1612 			stringaVuoiDavveroUscire = "Ti vol sul serio stusar su?";
   1613 			stringaSi = "Si";
   1614 			stringaNo = "No";
   1615 			stringaOpzioni = "Opzioni...";
   1616 			stringaEsci = "Stusa su";
   1617 			stringaImpossibileConfigurare = "No ghe son riusito a scrivere al file de configurazione.\nMandeme na mail a: sebastiano@luganega.org\n\nEcezion:\n";
   1618 			stringaLingua = "Lengua";
   1619 			stringaAnnulla = "Annulla";
   1620 			stringaIt = "Italian";
   1621 			stringaLa = "Latin";
   1622 			stringaBL = "Dialeto Belumat";
   1623 			stringaBV = "Dialeto Veneto";
   1624 			stringaEN = "Inglese";
   1625 			stringaModificaOpzioni = "Modifica Opzioni";
   1626 			stringaInformazioni = "Informasioni";
   1627 			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";
   1628 			stringaSuono = "Efeti sonori";
   1629 			stringaPunteggio = "Varda i punti";
   1630 			stringaSfondo = "Sfondo";
   1631 			stringaTasti = "Tasti rapidi";
   1632 			stringaAggiornamenti = "Varda se ghe xe na versione pi nova";
   1633 			stringaTrucchi = "Truchi";
   1634 			stringaInserisciCodice = "Scrivi al codice:";
   1635 			stringaTruccoAttivato = "Truco ativa'!";
   1636 			stringaTruccoSbagliato = "Truco sbaia'";
   1637 			stringaCheCartaVuoi = "Che carta utu alora?";
   1638 			stringaAggiornamentiSi = "Ghe xe na versione pi nova: ";
   1639 			stringaAggiornamentiNo = "No ghe xe na versione pi nova";
   1640 			stringaScarica = "Te pol scaricar le versione pi nova\ndal sito http://porkynator.altervista.org/programmi.html";
   1641 			stringaNoInternet = "Erore: no ti xe su internet";
   1642 			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 + "\nF7   " + stringaNuovaPartitaAiTrenta + "\nF8   " + stringaTrucchi + "\nq    " + stringaEsci;
   1643 		}
   1644 		if ( lang.equals( "en" ) ) {
   1645 			semi[0] = "Sticks";
   1646 			semi[1] = "Cups";
   1647 			semi[2] = "Golds";
   1648 			semi[3] = "Swords";
   1649 			stringaBriscola = "Briscola";
   1650 			stringaBottonePrendi = "Take/leave cards";
   1651 			stringaPrimaGioca = "Play your card before!";
   1652 			stringaUltime4 = "Last card - keep your eye on the briscola!";
   1653 			stringaVinto = "You won!";
   1654 			stringaPerso = "You lost";
   1655 			stringaPareggio = "Sixty - sixty!";
   1656 			stringaGiocatore = "Palyer: ";
   1657 			stringaComputer = "\nComputer: ";
   1658 			stringaNuovaPartita = "New Game";
   1659 			stringaNuovaPartitaAiTrenta = "New Game - 30 Points";
   1660 			stringaVuoiDavveroIniziare = "Do you really want to start a new game?";
   1661 			stringaVuoiDavveroUscire = "Do you really want to exit?";
   1662 			stringaSi = "Yes";
   1663 			stringaNo = "No";
   1664 			stringaOpzioni = "Options...";
   1665 			stringaEsci = "Exit";
   1666 			stringaImpossibileConfigurare = "Couldn't write to the configuration file.\nPlease report the bug to: sebastiano@luganega.org\n\nException:\n";
   1667 			stringaLingua = "Lang";
   1668 			stringaAnnulla = "Cancel";
   1669 			stringaIt = "Italian";
   1670 			stringaLa = "Latin";
   1671 			stringaBL = "Belluno dialect";
   1672 			stringaBV = "Venice dialect";
   1673 			stringaEN = "English";
   1674 			stringaModificaOpzioni = "Change options";
   1675 			stringaInformazioni = "Information";
   1676 			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";
   1677 			stringaSuono = "Sound";
   1678 			stringaPunteggio = "Score";
   1679 			stringaSfondo = "Background";
   1680 			stringaTasti = "Hot keys";
   1681 			stringaAggiornamenti = "Check updates";
   1682 			stringaTrucchi = "Cheats";
   1683 			stringaInserisciCodice = "Insert cheat:";
   1684 			stringaTruccoAttivato = "Cheat actived!";
   1685 			stringaTruccoSbagliato = "Wrong cheat";
   1686 			stringaCheCartaVuoi = "So what card do you want?";
   1687 			stringaAggiornamentiSi = "Update available: ";
   1688 			stringaAggiornamentiNo = "No updates available";
   1689 			stringaScarica = "You can get the latest version from the site\nhttp://porkynator.altervista.org/programmi.html";
   1690 			stringaNoInternet = "Error: no internet connection";
   1691 			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 + "\nF7   " + stringaNuovaPartitaAiTrenta + "\nF8   " + stringaTrucchi + "\nq    " + stringaEsci;
   1692 		}
   1693 		sound = ( soundString.equals( "suono=si" ) );
   1694 		keys = ( keysString.equals( "tasti=si" ) );
   1695 		color = new Color( r, g, b );
   1696 		if ( frame != null ) {
   1697 			frame.pannello.repaint();
   1698 			frame.pannello2.repaint();
   1699 			frame.repaint();
   1700 		}
   1701 	}
   1702 }