Oppure

Loading
10/10/11 12:41
MagoAntò
Ciao a tutti!

Ho svolto il seguente esercizio:

"Scrivere un programma Java dotato di interfaccia grafica che implementa una slot machine a 5 dischi ciascuno dotato di 10 simoboli dallo 0 al 9. Il giocatore inizia la partita con un credito pari a 100. Ogni giocata costa 1 credito.
Le combinazioni danno il punteggio positivo o negativo:
9 9 9 9 9 -> +100
8 8 8 8 8 -> +75
7 7 7 7 7 -> +50
6 6 6 6 6 -> -50
5 5 5 5 5 -> -75
0 0 0 0 0 -> -100
Coppia di numeri uguali -> +10
Tris di numeri uguali -> +20
Coppia di numeri uguale e tris di numeri uguali (full) -> +30
Numeri uguali nelle posizioni 0 2 4 e numeri uguali nelle posizioni 1 e 3 -> +40
Scala dalla posizione 0 a quella 4 -> Raddoppio del credito
Scala dalla posizione 4 a quella 0 -> Dimezzamento del credito
Il gioco termina quando il giocatore perde tutto o preme l'apposito pulsante.

Realizzare la simulazione dei dischi utilizzando un thread per implementare la rotazione (far variare le velocita' casualmente bloccando prima il disco in posizione 0 ed alla fine quello in posizione 4."

Il codice che ho realizzato è questo:

import java.awt.*;
import javax.swing.*;

public class SlotMachineTest
{
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                SlotMachineFrame frame = new SlotMachineFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SlotMachineFrame extends JFrame
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    
    private JLabel giocatore;
    private JLabel creditoGiocatore;
    private JLabel numero1;
    private JLabel numero2;
    private JLabel numero3;
    private JLabel numero4;
    private JLabel numero5;
    private JLabel luck;
    private JPanel infoGiocatore;
    private JPanel rulli;
   
    private JButton pulsanteRulli;
    private JButton esci;
    
    public SlotMachineFrame()
    {
        setTitle("$$$ SLOT MACHINE $$$");
        setSize (WIDTH,HEIGHT);
        
        giocatore = new JLabel ("Credito Giocatore: ");
        creditoGiocatore = new JLabel("100");
        pulsanteRulli = new JButton ("GIOCA!");
        
        esci = new JButton ("Esci");
        esci.addActionListener(new esci());
        
        infoGiocatore = new JPanel();
        infoGiocatore.add(giocatore);
        infoGiocatore.add(creditoGiocatore);
        infoGiocatore.add(pulsanteRulli);
        infoGiocatore.add(esci);
        add(infoGiocatore,BorderLayout.SOUTH);
        
        numero1 = new JLabel("0");
        numero1.setFont(new Font("Arial", Font.BOLD, 70));
        numero2 = new JLabel("0");
        numero2.setFont(new Font("Arial", Font.BOLD, 70));
        numero3 = new JLabel("0");
        numero3.setFont(new Font("Arial", Font.BOLD, 70));
        numero4 = new JLabel("0");
        numero4.setFont(new Font("Arial", Font.BOLD, 70));
        numero5 = new JLabel("0");
        numero5.setFont(new Font("Arial", Font.BOLD, 70));
        luck = new JLabel ("Tieni le dita incrociate!");
        luck.setFont(new Font ("Arial", Font.BOLD, 25));
        luck.setForeground(Color.RED);
        luck.setVisible(false);
        
        rulli = new JPanel();
        rulli.add(numero1);
        rulli.add(numero2);
        rulli.add(numero3);
        rulli.add(numero4);
        rulli.add(numero5);
        rulli.add(luck);
        
        add(rulli,BorderLayout.CENTER);
        
        pulsanteRulli.addActionListener(new cliccoPulsante());
    }
         
    private class cliccoPulsante implements ActionListener
    {
            public void actionPerformed(ActionEvent event)
            {
                if (Integer.parseInt(creditoGiocatore.getText())>0)
                {
                    numero1.setText("0");
                    numero2.setText("0");
                    numero3.setText("0");
                    numero4.setText("0");
                    numero5.setText("0");
                    int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
                    creditoTemp--;
                    creditoGiocatore.setText(""+creditoTemp);
                    pulsanteRulli.setEnabled(false);
                    Runnable r = new RulloNumeri(numero1, numero2,
                            numero3, numero4, numero5, pulsanteRulli, 
                            creditoGiocatore, luck);
                    Thread t = new Thread (r);
                    t.start();
                }
                else
                {
                    JOptionPane.showMessageDialog(rootPane, "Non hai abbastanza credito");
                    System.exit(0);
                }
            }              
    }
    
    private class esci implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            System.exit(0);
        }
    }
}

import javax.swing.*;

public class RulloNumeri implements Runnable
{
    private int random;
    private int c = 1;
    private JLabel rullo1;
    private JLabel rullo2;
    private JLabel rullo3;
    private JLabel rullo4;
    private JLabel rullo5;
    private JLabel creditoGiocatore;
    private JButton pulsanteRulli;
    private JLabel luck;
    private boolean full = false;
    private boolean tris = false;
    private boolean allEqual = false;
    
    public RulloNumeri (JLabel numero1, JLabel numero2,
            JLabel numero3, JLabel numero4, JLabel numero5, JButton pulsanteRulli,
            JLabel creditoGiocatore, JLabel luck)
    {
        rullo1 = numero1;
        rullo2 = numero2;
        rullo3 = numero3;
        rullo4 = numero4;
        rullo5 = numero5;
        this.pulsanteRulli = pulsanteRulli;
        this.creditoGiocatore = creditoGiocatore;
        this.luck = luck;
    }
    
    public void run()
    {
        try
        {
            luck.setVisible(true);
            
            for (int i=0; i<5; i++)
            {
                Thread.sleep((int) (Math.random() * 3000) + 1);
                random = (int) (Math.random() * 9);
                switch (c)
                {
                    case 1: rullo1.setText(""+random);
                    break;
                    case 2: rullo2.setText(""+random);
                    break;
                    case 3: rullo3.setText(""+random);
                    break;
                    case 4: rullo4.setText(""+random);
                    break;
                    case 5: rullo5.setText(""+random);
                    break;
                }
                c++;
            }
            controllaVincita();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    
    private void controllaVincita ()
    {   
        // TUTTI 9
        if ((rullo1.getText().equals("9"))&&(rullo2.getText().equals("9"))&&
                (rullo3.getText().equals("9"))&&(rullo4.getText().equals("9"))
                &&(rullo5.getText().equals("9")))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp+100;
            creditoGiocatore.setText(""+creditoTemp);
            allEqual = true;
            JOptionPane.showMessageDialog(rullo1, "Tutti 9! Hai vinto 100 crediti!");
        }

        //TUTTI 8
        if ((rullo1.getText().equals("8"))&&(rullo2.getText().equals("8"))&&
        (rullo3.getText().equals("8"))&&(rullo4.getText().equals("8"))
        &&(rullo5.getText().equals("8")))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp+75;
            creditoGiocatore.setText(""+creditoTemp);
            allEqual = true;
            JOptionPane.showMessageDialog(rullo1, "Tutti 8! Hai vinto 75 crediti!");
        }

        // TUTTI 7
        if ((rullo1.getText().equals("7"))&&(rullo2.getText().equals("7"))&&
        (rullo3.getText().equals("7"))&&(rullo4.getText().equals("7"))
        &&(rullo5.getText().equals("7")))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp+50;
            creditoGiocatore.setText(""+creditoTemp);
            allEqual = true;
            JOptionPane.showMessageDialog(rullo1, "Tutti 7! Hai vinto 50 crediti!");
        }

        // TUTTI 6
        if ((rullo1.getText().equals("6"))&&(rullo2.getText().equals("6"))&&
        (rullo3.getText().equals("6"))&&(rullo4.getText().equals("6"))
        &&(rullo5.getText().equals("6")))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp-50;
            creditoGiocatore.setText(""+creditoTemp);
            allEqual = true;
            JOptionPane.showMessageDialog(rullo1, "Tutti 6! Perdi crediti!");  
        }

        //TUTTI 5
        if ((rullo1.getText().equals("5"))&&(rullo2.getText().equals("5"))&&
        (rullo3.getText().equals("5"))&&(rullo4.getText().equals("5"))
        &&(rullo5.getText().equals("5")))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp-75;
            creditoGiocatore.setText(""+creditoTemp);
            allEqual = true;
            JOptionPane.showMessageDialog(rullo1, "Tutti 5! Perdi 75 crediti!");
        }

        //TUTTI 0
        if ((rullo1.getText().equals("0"))&&(rullo2.getText().equals("0"))&&
        (rullo3.getText().equals("0"))&&(rullo4.getText().equals("0"))
        &&(rullo5.getText().equals("0")))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp-100;
            creditoGiocatore.setText(""+creditoTemp);
            allEqual = true;
            JOptionPane.showMessageDialog(rullo1, "Tutti 0! Perdi 100 crediti!");
        }

        // Scala crescente da 0 a 4
        if ((Integer.parseInt(rullo1.getText()) == (Integer.parseInt(rullo2.getText())-1))
                && ((Integer.parseInt(rullo2.getText()))==(Integer.parseInt(
                rullo3.getText())-1))&& (Integer.parseInt(rullo3.getText()) == 
                (Integer.parseInt(rullo4.getText())-1)) && ((Integer.parseInt
                (rullo4.getText()) == (Integer.parseInt(rullo5.getText())-1))))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp*2;
            creditoGiocatore.setText(""+creditoTemp);
            JOptionPane.showMessageDialog(rullo1, "Scala crescente! Raddoppi i tuoi crediti!");
        }

        // Scala crescente da 4 a 0
        if ((Integer.parseInt(rullo1.getText()) == (Integer.parseInt(rullo2.getText())+1))
                && ((Integer.parseInt(rullo2.getText()))==(Integer.parseInt(
                rullo3.getText())+1))&& (Integer.parseInt(rullo3.getText()) == 
                (Integer.parseInt(rullo4.getText())+1)) && ((Integer.parseInt
                (rullo4.getText()) == (Integer.parseInt(rullo5.getText())+1))))
        {
            int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
            creditoTemp=creditoTemp/2;
            creditoGiocatore.setText(""+creditoTemp);
            JOptionPane.showMessageDialog(rullo1, "Scala decrescente! Dimezzi i tuoi crediti!");
        }
        
        if (allEqual == false)
        {
            // Full
            if (((rullo1.getText().equals(rullo2.getText())) && (rullo3.
                    getText().equals(rullo4.getText())) && (rullo4.getText()
                .equals(rullo5.getText()))) || ((rullo1.getText().equals(rullo2.
                        getText())) && (rullo2.getText().equals(rullo3.getText()
                        )) && (rullo4.getText().equals(rullo5.getText()))))
            {
                int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
                creditoTemp=creditoTemp+30;
                creditoGiocatore.setText(""+creditoTemp);
                JOptionPane.showMessageDialog(rullo1, "Full! Hai vinto 30 crediti!");
                full = true;
            }
        }
        
        if ((full == false) && (allEqual == false))
        {
            // Tris di numeri uguali
            if (((rullo1.getText().equals(rullo2.getText())) && (rullo2.getText
                ().equals(rullo3.getText()))) || ((rullo3.getText().equals(rullo4.
                getText())) && (rullo4.getText().equals(rullo5.getText()))) ||
                (((rullo2.getText().equals(rullo3.getText())) && (rullo3.getText().
            equals(rullo4.getText())))))
            {
                int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
                creditoTemp=creditoTemp+20;
                creditoGiocatore.setText(""+creditoTemp);
                JOptionPane.showMessageDialog(rullo1, "Tris! Hai vinto 20 crediti!");
                tris = true;
            }
            
            // Coppia di numeri uguali
            if (tris == false)
            {
                if ((rullo1.getText().equals(rullo2.getText())) || (rullo2.getText().
                        equals(rullo3.getText())) || (rullo3.getText().equals(rullo4.
                        getText())) || (rullo4.getText().equals(rullo5.getText())))
                {
                    int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
                    creditoTemp=creditoTemp+10;
                    creditoGiocatore.setText(""+creditoTemp);
                    JOptionPane.showMessageDialog(rullo1, "Coppia! Hai vinto 10 crediti!");
                }
            }
            
            // Numeri uguali in 1,3,5 e 2,4
            if (((rullo1.getText().equals(rullo3.getText())) && (rullo3.getText().
                equals(rullo5.getText())) && rullo2.getText().equals(rullo4.
                getText())))
            {
                int creditoTemp = Integer.parseInt(creditoGiocatore.getText());
                creditoTemp=creditoTemp+40;
                creditoGiocatore.setText(""+creditoTemp);
                JOptionPane.showMessageDialog(rullo1, "Full alternato! Hai vinto 40 crediti!");
            }
        }
        
        luck.setVisible(false);
        pulsanteRulli.setEnabled(true);
    }
}


E' formalmente corretto verificare la vincita ed aggiornare le JLabel nella classe RulloNumeri? Mi sono visto costretto a fare così perchè non sono riuscito a trovare un sistema per gestire la cosa nella classe SlotMachineFrame.

Che ne dite?
Grazie in anticipo per l'aiuto!
Ultima modifica effettuata da MagoAntò 12/10/11 11:40
aaa