import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; /** * Luokka Loppudialogi, joka periytyy luokasta JDialog. Loppudialogi * näyttää tuloksen numeerisesti ja graafisesti. * Loppudialogista voidaan valita uusi peli kummalla tahansa * tasolla tai sulkea koko peli. * * @author Karoliina Tiuraniemi * @version 1.0, 18.1.2009 * */ public class Loppudialogi extends JDialog{ private Nappi nappi1; private Nappi nappi2; private Nappi nappi3; private int syotettyTaso; private Ikkuna ikkuna; private static final long serialVersionUID = 1L; /** * Konstruktori, joka luo loppudialogin * @param ikkuna johon loppudialogi liittyy * @param modal dialogiin on pakko reagoida ennen kuin * pääsee sulkemaan sen tai käsittelemään ikkunaa. */ public Loppudialogi(Ikkuna ikkuna, boolean modal){ super(ikkuna, modal); this.setTitle("Peli loppui!"); this.ikkuna = ikkuna; JPanel otsikkopaneeli = new JPanel(); Dimension otsikkokoko = new Dimension (260,70); otsikkopaneeli.setPreferredSize(otsikkokoko); otsikkopaneeli.setBackground(Varit.TUMMANVIHREA); JLabel tulosLabel = new JLabel(); ImageIcon kuvaTulos = new ImageIcon (Kuvamuunnokset.muutaNumeroKuvaksi(ikkuna.annaPeli(). annaTuloslaskuri())); tulosLabel.setIcon(kuvaTulos); otsikkopaneeli.add(tulosLabel); JLabel kauttaLabel = new JLabel(); ImageIcon kuvaKautta = new ImageIcon (Kuvamuunnokset.muutaKuvaksi("vinoviiva")); kauttaLabel.setIcon(kuvaKautta); otsikkopaneeli.add(kauttaLabel); JLabel vuoroLabel = new JLabel(); ImageIcon kuvaVuoro = new ImageIcon (Kuvamuunnokset.muutaNumeroKuvaksi(ikkuna.annaPeli(). annaVuorolaskuri())); vuoroLabel.setIcon(kuvaVuoro); otsikkopaneeli.add(vuoroLabel); JLabel ilmeLabel = new JLabel(); ImageIcon kuvaIlme = new ImageIcon (Kuvamuunnokset.muutaTulosKuvaksi(ikkuna.annaPeli().annaTulos())); ilmeLabel.setIcon(kuvaIlme); otsikkopaneeli.add(ilmeLabel); this.add(BorderLayout.NORTH, otsikkopaneeli); JPanel paneeli = new JPanel(); paneeli.setBackground(Varit.TUMMANVIHREA); this.add(BorderLayout.CENTER, paneeli); this.setTitle("Valitse taso"); MouseListener kuuntelija = new LoppuKuuntelija(); ImageIcon koppakuoriainen = new ImageIcon("src/img/koppakuoriainen.png"); Dimension nappiKoko = new Dimension((koppakuoriainen.getIconWidth() + 10), (koppakuoriainen.getIconHeight() + 10)); ImageIcon leppakerttu = new ImageIcon("src/img/leppakerttu.png"); this.nappi1 = new Nappi(leppakerttu); this.nappi1.piirra(); this.nappi1.addMouseListener(kuuntelija); this.nappi1.setPreferredSize(nappiKoko); paneeli.add(nappi1); this.nappi2 = new Nappi(koppakuoriainen); this.nappi2.piirra(); this.nappi2.addMouseListener(kuuntelija); this.nappi2.setPreferredSize(nappiKoko); paneeli.add(nappi2); ImageIcon ruksi = new ImageIcon (Kuvamuunnokset.muutaKuvaksi("ruksi")); this.nappi3 = new Nappi(ruksi); this.nappi3.piirra(); this.nappi3.addMouseListener(kuuntelija); this.nappi3.setPreferredSize(nappiKoko); paneeli.add(nappi3); this.pack(); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setLocationRelativeTo(ikkuna); } /** * Metodi, joka antaa alkudialogissa valitun tason. * @return this.syotettyTaso */ public int annaSyotettyTaso(){ return this.syotettyTaso; } /** * Luokka Loppukuuntelija, joka periytyy luokasta Kuuntelija. * Luokka määrittelee tarkemmin, mitä tapahtuu kun * Loppudialogin nappeja klikataan. * @author Karoliina Tiuraniemi * @version 1.0, 20.1.2009 * */ private class LoppuKuuntelija extends Kuuntelija { /** * Metodi, joka määrittelee mitä tapahtuu kun nappeja * klikataan. Nappi1 aloittaa uuden pelin tasolla 1, * nappi2 aloittaa uuden pelin tasolla 2 ja nappi3 * sulkee ikkunan. * @param e MouseEvent */ public void mouseClicked(MouseEvent e){ Peli peli = Loppudialogi.this.ikkuna.annaPeli(); int vuoro = peli.annaVuoromaksimi(); if (e.getSource() instanceof JButton){ // talletetaan omaan muuttujaansa klikattu nappi JButton nappi = (JButton) e.getSource(); // jos on klikattu nappi1:ä tai nappi2:ta if (nappi.equals(Loppudialogi.this.nappi1)){ // lopetetaan edellinen peli peli.lopetaPeli(); // aloitetaan uusi peli samalla tasolla ja vuoromäärällä ikkuna.asetaPeli(new Peli(1, vuoro)); // sen sijaan matikkaa ei muuteta, jolloin minimi ja // maksimiarvot säilyvät samoina matikka-olion ollessa // tallennettuna ikkunaan. ikkuna.uusiLasku(); } else if (nappi.equals(Loppudialogi.this.nappi2)){ // lopetetaan edellinen peli peli.lopetaPeli(); // aloitetaan uusi peli samalla tasolla ikkuna.asetaPeli(new Peli(2, vuoro)); ikkuna.uusiLasku(); } else if (nappi.equals(Loppudialogi.this.nappi3)){ // lopetetaan peli peli.lopetaPeli(); // ja suljetaan ohjelma System.exit(0); } // poistetaan loppudialogi näkyvistä Loppudialogi.this.setVisible(false); } } } }