aboutsummaryrefslogtreecommitdiff
path: root/JBriscola/all_versions/0.2/0.2.2/src/Frame.java
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2026-03-26 19:27:18 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2026-03-26 19:27:18 +0100
commit7167b4341ef290d56fb96e2af10883a4b925d83b (patch)
tree1eb1b9e5ab82ddd89540e68d6b22ae69514575c6 /JBriscola/all_versions/0.2/0.2.2/src/Frame.java
downloadancient-projects-7167b4341ef290d56fb96e2af10883a4b925d83b.tar.gz
ancient-projects-7167b4341ef290d56fb96e2af10883a4b925d83b.zip
I found my old code!HEADmaster
Diffstat (limited to 'JBriscola/all_versions/0.2/0.2.2/src/Frame.java')
-rwxr-xr-xJBriscola/all_versions/0.2/0.2.2/src/Frame.java432
1 files changed, 432 insertions, 0 deletions
diff --git a/JBriscola/all_versions/0.2/0.2.2/src/Frame.java b/JBriscola/all_versions/0.2/0.2.2/src/Frame.java
new file mode 100755
index 0000000..bea69a4
--- /dev/null
+++ b/JBriscola/all_versions/0.2/0.2.2/src/Frame.java
@@ -0,0 +1,432 @@
1/*
2Copyright 2009 Sebastiano Tronto <sebastiano@luganega.org>
3
4This 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
22import javax.swing.*;
23import javax.sound.sampled.*;
24import java.io.*;
25import java.net.*;
26import java.awt.*;
27import java.awt.event.*;
28
29public class Frame extends JFrame {
30
31 /* Booleana per determinare se disegnare il mazzo di carte o no (se
32 * è l'ultima mano). */
33 public static boolean mazzo;
34
35 public static Main main;
36
37 /* Menu, bottoni, pannelli e componenti vari. */
38 public static Pannello pannello;
39 public static JPanel pannello2;
40 public static JButton button;
41 public static JMenuBar barraMenu;
42 public static JMenu file, puntoInterrogativo;
43 public static JMenuItem nuovaPartita, opzioni, esci, informazioni, punti, aggiornamenti, tastiRapidi;
44
45 /* Immagini delle carte. */
46 public static ImageIcon retro1, retro2, ultimaCarta;
47 public static ImageIcon[] giocata = new ImageIcon[2];
48 public static ImageIcon[] carteInMano = new ImageIcon[3];
49 public static ImageIcon[] carteCPU = new ImageIcon[3];
50 public static ImageIcon[] arrayCarteMescolate = new ImageIcon[40];
51 public static ImageIcon[][] arrayCarte = new ImageIcon[10][4];
52
53 public Frame() {
54
55 super( "Tronto's JBriscola " + main.version );
56
57 mazzo = true;
58 main = new Main();
59 pannello = new Pannello();
60 pannello2 = new JPanel( new FlowLayout() );
61
62 button = new JButton( main.stringaBottonePrendi );
63 button.addActionListener( new ActionListener() {
64
65 /* Quando viene premuto il bottone per prendere/lasciare le carte,
66 * valuta innanzitutto se il giocatore ha giocato, e poi a chi
67 * darle ed eventualmente, se è finita la partita, a caricare
68 * il suono adatto. */
69 public void actionPerformed( ActionEvent e ) {
70
71 if ( giocata[0] != null && giocata[1] != null )
72 main.mano++;
73
74 try {
75 main.chiPrende();
76 } catch ( Exception ex ) {
77 /* Avvisa di giocare una carta. */
78 JOptionPane.showMessageDialog( Frame.this, main.stringaPrimaGioca, "JBriscola " + main.version, JOptionPane.WARNING_MESSAGE );
79 }
80
81 if ( main.mano == 16 )
82 /* Avvisa che si è arrivati alla quartultima mano. */
83 JOptionPane.showMessageDialog( Frame.this, main.stringaUltime4, "JBriscola " + main.version, JOptionPane.INFORMATION_MESSAGE );
84
85 /* Non disegna più la briscola e il mazzo se sono già state
86 * pescate tutte le carte. */
87 if ( main.mano == 17 ) {
88 mazzo = false;
89 ultimaCarta = null;
90 pannello.repaint();
91 Frame.this.repaint();
92 }
93
94 /* Mostra il punteggio e carica i suoni se è finita la partita. */
95 if ( main.mano == 20 ) {
96
97 String titolo = "";
98 String suonoFinale = "";
99
100 if ( main.punteggio > main.punteggioCPU ) {
101 titolo = main.stringaVinto;
102 suonoFinale = "sounds/perso.wav";
103 }
104 if ( main.punteggio < main.punteggioCPU ) {
105 titolo = main.stringaPerso;
106 suonoFinale = "sounds/vinto.wav";
107 }
108 if ( main.punteggio == main.punteggioCPU ) {
109 titolo = main.stringaPareggio;
110 suonoFinale = "sounds/pareggio.wav";
111 }
112
113 if ( main.sound ) {
114 try {
115 AudioFileFormat aff = AudioSystem.getAudioFileFormat( ClassLoader.getSystemResource( suonoFinale ) );
116 AudioInputStream ais = AudioSystem.getAudioInputStream( ClassLoader.getSystemResource( suonoFinale ) );
117 AudioFormat af = aff.getFormat();
118 DataLine.Info info = new DataLine.Info( Clip.class, ais.getFormat(), ( (int) ais.getFrameLength() * af.getFrameSize() ) );
119 Clip ol = ( Clip ) AudioSystem.getLine( info );
120 ol.open(ais);
121 ol.loop( 0 );
122 } catch ( Exception ex ) {
123 System.err.println( e );
124 }
125 }
126
127 JOptionPane.showMessageDialog( Frame.this, main.stringaGiocatore + main.punteggio + main.stringaComputer + main.punteggioCPU, titolo, JOptionPane.PLAIN_MESSAGE );
128 }
129 }
130 } );
131 button.addKeyListener( new KeyAdapter() {
132 /* Aggiunge il keyListener per le scorciatoie da tastiera. Dato
133 * che il bottone prendi/lascia è l'unico componente effettivo
134 * della finestra, avrà obbligatoriamente il focus ed è necessario
135 * che sia lui a gestire gli eventi della tastiera. */
136 public void keyReleased( KeyEvent key ) {
137
138 if ( main.keys ) {
139 switch ( key.getKeyCode() ) {
140 case KeyEvent.VK_1:
141 if ( mettiCarta( 231, 500 ) ) {
142 if ( !main.CPUHaGiocato )
143 main.giocaCPU();
144 }
145 break;
146
147 case KeyEvent.VK_2:
148 if ( mettiCarta( 301, 500 ) ) {
149 if ( !main.CPUHaGiocato )
150 main.giocaCPU();
151 }
152 break;
153
154 case KeyEvent.VK_3:
155 if ( mettiCarta( 371, 500 ) ) {
156 if ( !main.CPUHaGiocato )
157 main.giocaCPU();
158 }
159 break;
160
161 case KeyEvent.VK_F1:
162 JOptionPane.showMessageDialog( Frame.this, main.stringaTasti2, "JBriscola - " + main.version, JOptionPane.INFORMATION_MESSAGE );
163 break;
164
165 case KeyEvent.VK_F2:
166 if ( main.mano == 20 ) {
167 main.mischia();
168 pannello.repaint();
169 repaint();
170 }
171 else {
172 int selezione = JOptionPane.showOptionDialog( Frame.this, main.stringaVuoiDavveroIniziare, "JBriscola " + main.version, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { main.stringaSi, main.stringaNo }, main.stringaNo );
173 if ( selezione == JOptionPane.YES_OPTION ) {
174 main.mischia();
175 pannello.repaint();
176 repaint();
177 }
178 }
179 break;
180
181 case KeyEvent.VK_F3:
182 OptionFrame optionFrame = new OptionFrame();
183 optionFrame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
184 optionFrame.setResizable( false );
185 optionFrame.setAlwaysOnTop( true );
186 optionFrame.setSize( 300, 200 );
187 optionFrame.setLocation( (Toolkit.getDefaultToolkit().getScreenSize().width - 300) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - 150) / 2);
188 optionFrame.setVisible( true );
189 break;
190 case KeyEvent.VK_F4:
191
192 JOptionPane.showMessageDialog( Frame.this, main.stringaGiocatore + main.punteggio + "\n" + main.stringaComputer + main.punteggioCPU, main.stringaPunteggio, JOptionPane.PLAIN_MESSAGE );
193 break;
194 case KeyEvent.VK_F5:
195
196 JOptionPane.showMessageDialog( Frame.this, main.stringaInformazioni2, main.stringaInformazioni, JOptionPane.PLAIN_MESSAGE );
197 break;
198 case KeyEvent.VK_F6:
199
200 String latest = main.version;
201 try {
202 URL latestIs = new URL( "http://porkynator.altervista.org/jbriscola-latest.is" );
203 BufferedReader latestIsReader = new BufferedReader( new InputStreamReader( latestIs.openStream() ) );
204 latest = latestIsReader.readLine();
205 } catch ( Exception ex ) {
206 JOptionPane.showMessageDialog( Frame.this, main.stringaNoInternet, "JBriscola - " + main.version, JOptionPane.ERROR_MESSAGE );
207 }
208 if ( latest.equals( main.version ) )
209 JOptionPane.showMessageDialog( Frame.this, main.stringaAggiornamentiNo, "JBriscola - " + main.version, JOptionPane.INFORMATION_MESSAGE );
210 else
211 JOptionPane.showMessageDialog( Frame.this, main.stringaAggiornamentiSi + "\n" + main.version + " ==> " + latest + "\n\n" + main.stringaScarica, "JBriscola - " + main.version, JOptionPane.INFORMATION_MESSAGE );
212 break;
213 case KeyEvent.VK_Q:
214
215 int selezione = JOptionPane.showOptionDialog( Frame.this, main.stringaVuoiDavveroUscire, "JBriscola " + main.version, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { main.stringaSi, main.stringaNo }, main.stringaNo );
216 if ( selezione == JOptionPane.YES_OPTION )
217 Frame.this.dispose();
218 break;
219 }
220 }
221 }
222 } );
223
224 barraMenu = new JMenuBar();
225
226 file = new JMenu( "File" );
227
228 nuovaPartita = new JMenuItem( main.stringaNuovaPartita );
229 nuovaPartita.addActionListener( new ActionListener() {
230 /* Avvia una nuova partita, chiedendo prima conferma se ce n'è
231 * già una in corso. */
232 public void actionPerformed( ActionEvent e ) {
233 if ( main.mano == 20 ) {
234 main.mischia();
235 pannello.repaint();
236 repaint();
237 }
238
239 else {
240 int selezione = JOptionPane.showOptionDialog( Frame.this, main.stringaVuoiDavveroIniziare, "JBriscola " + main.version, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { main.stringaSi, main.stringaNo }, main.stringaNo );
241 if ( selezione == JOptionPane.YES_OPTION ) {
242 main.mischia();
243 pannello.repaint();
244 repaint();
245 }
246 }
247 }
248 });
249
250 opzioni = new JMenuItem( main.stringaOpzioni );
251 opzioni.addActionListener( new ActionListener() {
252 /* Apre una OptionFrame per modificare le opzioni. */
253 public void actionPerformed( ActionEvent e ) {
254
255 OptionFrame optionFrame = new OptionFrame();
256 optionFrame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
257 optionFrame.setResizable( false );
258 optionFrame.setAlwaysOnTop( true );
259 optionFrame.setSize( 300, 200 );
260 optionFrame.setLocation( (Toolkit.getDefaultToolkit().getScreenSize().width - 300) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - 150) / 2);
261 optionFrame.setVisible( true );
262 }
263 });
264
265 esci = new JMenuItem( main.stringaEsci );
266 esci.addActionListener( new ActionListener() {
267 /* Ciede conferma prima di uscire. */
268 public void actionPerformed( ActionEvent e ) {
269 int selezione = JOptionPane.showOptionDialog( Frame.this, main.stringaVuoiDavveroUscire, "JBriscola " + main.version, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { main.stringaSi, main.stringaNo }, main.stringaNo );
270 if ( selezione == JOptionPane.YES_OPTION )
271 Frame.this.dispose();
272 }
273 });
274
275 file.add( nuovaPartita );
276 file.add( opzioni );
277 file.addSeparator();
278 file.add( esci );
279
280 puntoInterrogativo = new JMenu( "?" );
281
282 informazioni = new JMenuItem( main.stringaInformazioni );
283 informazioni.addActionListener( new ActionListener() {
284 /* Visualizza le informazioni. */
285 public void actionPerformed( ActionEvent e ) {
286 JOptionPane.showMessageDialog( Frame.this, main.stringaInformazioni2, main.stringaInformazioni, JOptionPane.PLAIN_MESSAGE );
287 }
288 } );
289
290 tastiRapidi = new JMenuItem( main.stringaTasti );
291 tastiRapidi.addActionListener( new ActionListener() {
292 /* Visualizza i tasti rapidi. */
293 public void actionPerformed( ActionEvent e ) {
294 JOptionPane.showMessageDialog( Frame.this, main.stringaTasti2, "JBriscola - " + main.version, JOptionPane.INFORMATION_MESSAGE );
295 }
296 } );
297
298 punti = new JMenuItem( main.stringaPunteggio );
299 punti.addActionListener( new ActionListener() {
300 /* Visualizza il punteggio. */
301 public void actionPerformed( ActionEvent e ) {
302 JOptionPane.showMessageDialog( Frame.this, main.stringaGiocatore + main.punteggio + "\n" + main.stringaComputer + main.punteggioCPU, main.stringaPunteggio, JOptionPane.PLAIN_MESSAGE );
303 }
304 } );
305
306 aggiornamenti = new JMenuItem( main.stringaAggiornamenti );
307 aggiornamenti.addActionListener( new ActionListener() {
308 /* Cerca aggiornamenti sul sito http://porkynator.altervista.org,
309 * confrontando la versione del programma con quella scritta nel
310 * file jbriscola-latest.is (online). */
311 public void actionPerformed( ActionEvent e ) {
312 String latest = main.version;
313 try {
314 URL latestIs = new URL( "http://porkynator.altervista.org/jbriscola-latest.is" );
315 BufferedReader latestIsReader = new BufferedReader( new InputStreamReader( latestIs.openStream() ) );
316 latest = latestIsReader.readLine();
317 } catch ( Exception ex ) {
318 JOptionPane.showMessageDialog( Frame.this, main.stringaNoInternet, "JBriscola - " + main.version, JOptionPane.ERROR_MESSAGE );
319 }
320 if ( latest.equals( main.version ) )
321 JOptionPane.showMessageDialog( Frame.this, main.stringaAggiornamentiNo, "JBriscola - " + main.version, JOptionPane.INFORMATION_MESSAGE );
322 else
323 JOptionPane.showMessageDialog( Frame.this, main.stringaAggiornamentiSi + "\n" + main.version + " ==> " + latest + "\n\n" + main.stringaScarica, "JBriscola - " + main.version, JOptionPane.INFORMATION_MESSAGE );
324 }
325 } );
326
327 puntoInterrogativo.add( punti );
328 puntoInterrogativo.add( tastiRapidi );
329 puntoInterrogativo.add( informazioni );
330 puntoInterrogativo.add( aggiornamenti );
331
332 barraMenu.add( file );
333 barraMenu.add( puntoInterrogativo );
334
335 setJMenuBar( barraMenu );
336
337 /* Inizializza le immagini del retro delle carte. */
338 retro1 = new ImageIcon( ClassLoader.getSystemResource( "img/retro1.jpg" ) );
339 retro2 = new ImageIcon( ClassLoader.getSystemResource( "img/retro2.jpg" ) );
340
341 /* Inizializza tutte le immagini delle carte scorrendo l'array bidimensionale. */
342 for (int i = 0; i < 10; i++)
343 for (int j = 0; j < 4; j++)
344 arrayCarte[i][j] = new ImageIcon( ClassLoader.getSystemResource( "img/" + (i+1) + "-" + (j+1) + ".jpg" ) );
345
346 /* Mischia le carte. */
347 main.mischia();
348
349 /* Aggiunge i vari componenti. */
350 pannello2.add( button );
351 setLayout( new BorderLayout() );
352 add( pannello, BorderLayout.CENTER );
353 add( pannello2, BorderLayout.SOUTH );
354
355 /* Chiama il metodo mettiCarta se l'utente clicca. */
356 addMouseListener(
357 new MouseAdapter() {
358 public void mouseClicked ( MouseEvent e ) {
359 if ( mettiCarta( e.getX(), e.getY() ) ) {
360 if ( !main.CPUHaGiocato )
361 main.giocaCPU();
362 }
363 }
364 }
365 );
366
367 /* Chiede conferma prima di uscire quando viene chiusa la finestra. */
368 addWindowListener(
369 new WindowAdapter() {
370 public void windowClosing( WindowEvent e ) {
371 int selezione = JOptionPane.showOptionDialog( Frame.this, main.stringaVuoiDavveroUscire, "JBriscola " + main.version, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { main.stringaSi, main.stringaNo }, main.stringaNo );
372 if ( selezione == JOptionPane.YES_OPTION )
373 System.exit( 0 );
374 }
375 }
376 );
377 }
378
379 /* Se il giocatore ha cliccato su una carta la gioca e riproduce un suono casuale. */
380 public boolean mettiCarta( int x, int y ) {
381
382 if ( !main.toccaAllaCPU && giocata[0] == null ) {
383 if ( main.sound &&
384 ( ( x > 230 && x < 290 && y > 340 && y < 566 && carteInMano[0] != null ) ||
385 ( x > 300 && x < 360 && y > 340 && y < 566 && carteInMano[1] != null ) ||
386 ( x > 370 && x < 430 && y > 340 && y < 566 && carteInMano[2] != null ) ) ) {
387 try {
388
389 double a = Math.random() * 6;
390 int i = (int) a;
391
392 AudioFileFormat aff = AudioSystem.getAudioFileFormat( ClassLoader.getSystemResource("sounds/" + i + ".wav") );
393 AudioInputStream ais = AudioSystem.getAudioInputStream( ClassLoader.getSystemResource("sounds/" + i + ".wav") );
394 AudioFormat af = aff.getFormat();
395 DataLine.Info info = new DataLine.Info( Clip.class, ais.getFormat(), ( (int) ais.getFrameLength() * af.getFrameSize() ) );
396 Clip ol = ( Clip ) AudioSystem.getLine( info );
397
398 ol.open(ais);
399 ol.loop( 0 );
400
401 } catch ( Exception e ) {
402 System.err.println( e );
403 }
404 }
405
406 if ( x > 230 && x < 290 && y > 340 && y < 566 && carteInMano[0] != null ) {
407 giocata[0] = carteInMano[0];
408 carteInMano[0] = null;
409 pannello.repaint();
410 return true;
411 }
412
413 if ( x > 300 && x < 360 && y > 340 && y < 566 && carteInMano[1] != null ) {
414 giocata[0] = carteInMano[1];
415 carteInMano[1] = null;
416 pannello.repaint();
417 return true;
418 }
419
420 if ( x > 370 && x < 430 && y > 340 && y < 566 && carteInMano[2] != null ) {
421 giocata[0] = carteInMano[2];
422 carteInMano[2] = null;
423 pannello.repaint();
424 return true;
425 }
426 }
427
428 return false;
429 }
430}
431
432

Generated with cgit - Back to sebastiano.tronto.net