Oppure

Loading
05/11/11 14:56
MagoAntò
Ciao!

Sto cercando di creare un programma che implementi il gioco del tris con protocollo client/server che abbia un interfaccia grafica.

L'idea di base è questa: per l'interfaccia grafica, uso una griglia 3x3 di JButton, ognuno con un proprio listener che, all'atto della pressione, inviano una stringa al server relativa alla posizione del pulsante stesso ("1-1" pulsante in alto a sinistra, "1-3" pulsante in alto a destra ecc. ecc.). Il server, ricevuta la stringa, invia la stringa X o O a tutti i client (compreso quello che ha effettivamente inoltrato il messaggio) che, infine, dovrebbero aggiornare il rispettivo JButton con la stringa ricevuta.

Il problema è il seguente: il protocollo per lo scambio dei messaggi funziona correttamente solo se elimino tutta la parte grafica (cioè, come se volessi realizzare lo stesso programma senza utilizzare finestre, actionListener ecc. ecc.). Includendola, infatti, all'atto della pressione del pulsante in alto a sinistra (non importa se nella finestra del giocatore 1 o 2), quella particolare finestra si blocca e il programma non va avanti.

Il codice che ho svolto finora è questo:

- Lato server - : ho creato un array che tiene traccia delle due connessioni massime effettuabili e, per ognuna di esse, viene fatto partire un thread. Per adesso, ho implementato solo il codice relativo alla ricezione della stringa "1-1" da parte del client. Le altre non le guardate.

import java.io.*;
import java.net.*;

public class TrisServer
{
    static final int MAX_CONNECTIONS = 2;
    static InputOutputServer[] giocatori = new InputOutputServer[2];
    
    public static void main (String[] args)
    {
        try
        {
            boolean giocatore1 = false;
            boolean giocatore2 = false;
            
            int connessioni = 0;
            
            ServerSocket s = new ServerSocket(8089);
            
            System.out.println ("In ascolto sulla porta 8089...");
            
            while (true)
            {
                if (connessioni<MAX_CONNECTIONS)
                {
                    Socket incoming = s.accept();
                    System.out.println ("Collegato!");
                    if ((giocatore1 == false) && (giocatore2 == false))
                    {
                        giocatore1 = true;
                    }
                    else if ((giocatore1==true) && (giocatore2==false))
                    {
                        giocatore2 = true;
                    }
                    else if ((giocatore2==true) && (giocatore1==false))
                    {
                        giocatore1 = true;
                    }
                    
                    giocatori[connessioni] = new InputOutputServer (incoming, giocatori);
                    Runnable r = giocatori[connessioni];
                    Thread t = new Thread (r);
                    t.start();
                    connessioni++;
                    System.out.println ("Connessioni correnti: "+connessioni);
                }
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

import java.io.*;
import java.net.*;
import java.util.*;

public class InputOutputServer implements Runnable
{
    private Socket incoming;
    private InputOutputServer[] players;
    private boolean tGiocatore1;
    private boolean tGiocatore2;
    private PrintWriter out;
    private Scanner in;
    private String name;

    public InputOutputServer(Socket incoming, InputOutputServer[] giocatori)
    {
        this.incoming = incoming;
        players = giocatori;
    }
    
    public void run()
    {
        try
        {
            try
            {
                InputStream inStream = incoming.getInputStream();
                OutputStream outStream = incoming.getOutputStream();

                in = new Scanner (inStream);
                out = new PrintWriter(outStream, true);

                boolean done = false;
                
                tGiocatore1 = true;
                tGiocatore2 = false;
                
                out.println ("Scrivi il nome: ");
                
                if (in.hasNextLine())
                    name = in.nextLine();
                
                System.out.println ("Ho ricevuto il nome "+name);
       
                while (!done && in.hasNextLine())
                {
                    String line;
                    
                    System.out.println ("Aspetto mossa giocatore");
                    
                    line = in.nextLine();
                    
                    if (line.equals("1-1"))
                    {
                        if (tGiocatore1 == true)
                        {
                            for (int i=0; i<players.length; i++)
                            {
                                System.out.println ("Invio X a: "+players[i].name);
                                players[i].out.println ("X");
                            }
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            for (int i=0; i<players.length; i++)
                            {
                            //    out.println ("O");
                            }
                            //tGiocatore1 = true;
                            //tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("1-2"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("1-3"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("2-1"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("2-2"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("2-3"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("3-1"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("3-2"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                    
                    if (line.equals("3-3"))
                    {
                        System.out.println ("Ricevo "+line);
                        if (tGiocatore1 == true)
                        {
                            out.println ("X");
                            tGiocatore1 = false;
                            tGiocatore2 = true;
                        }
                        else
                        {
                            out.println ("O");
                            tGiocatore1 = true;
                            tGiocatore2 = false;
                        }
                    }
                }
            }
            finally
            {
                incoming.close();
                in.close();
                out.close();
            }
        }
        
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}


- Lato client - anche qui, ho implementato solo il codice del listener relativo alla casella11. Ignorate il resto.
import java.awt.*;
import java.io.*;
import java.net.*;

public class TrisClient
{
    static Socket clientSocket;
    static int numeroPorta = 8089;
    static String host = "localhost";
    
    public static void main (String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    clientSocket = new Socket (host, numeroPorta);

                    Runnable frame = new TrisFrame(clientSocket);
                    Thread t = new Thread (frame);
                    t.start();
                }
                catch (UnknownHostException e)
                {
                    e.printStackTrace();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        });
    }    
}

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import java.util.*;
import javax.swing.*;

public class TrisFrame extends JFrame implements Runnable
{
    private static final int LUNGHEZZA = 300;
    private static final int LARGHEZZA = 300;
    
    private JPanel panel;
    
    private JButton casella11;
    private JButton casella12;
    private JButton casella13;
    private JButton casella21;
    private JButton casella22;
    private JButton casella23;
    private JButton casella31;
    private JButton casella32;
    private JButton casella33;
    
    private Socket i;
    private String line;
    
    private Scanner in;
    private PrintWriter out;
    
    private InputStream inputStream;
    private OutputStream outputStream;
    
    private String name;
    
    public TrisFrame (Socket incoming) throws IOException
    {
        i = incoming;
        
        inputStream = i.getInputStream();
        outputStream = i.getOutputStream();
        
        in = new Scanner (inputStream);
        out = new PrintWriter(outputStream,true);
        
        Scanner in2 = new Scanner (System.in);
        
        name = in.nextLine();
        System.out.println (name);
        
        name = in2.nextLine();
        out.println(name);
                
        setTitle ("TIC TAC TOE");
        setSize (LUNGHEZZA, LARGHEZZA);
        
        panel = new JPanel();
        panel.setLayout(new GridLayout (3,3));
        panel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
        
        
        casella11 = inizializzaCasella(casella11, panel, new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                out.println("1-1");
                System.out.println ("Invio 1-1");
                scambioMessaggi();
            }
        });
        
       casella12 = inizializzaCasella(casella12, panel, new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella12.setText("2");
            }
        });
        
       casella13 = inizializzaCasella(casella13,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella13.setText("3");
            }
        });
        
       casella21 = inizializzaCasella(casella21,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella21.setText("4");
            }
        });
        
       casella22 = inizializzaCasella(casella22,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella22.setText("5");
            }
        });
        
       casella23 = inizializzaCasella(casella23,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella23.setText("6");
            
            }
        });
        
       casella31 = inizializzaCasella(casella31,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella31.setText("7");
            }
        });
            
        casella32 = inizializzaCasella(casella32,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella32.setText("8");
            }
        });
        
        casella33 = inizializzaCasella(casella33,panel,new ActionListener()
        {
            public void actionPerformed (ActionEvent event)
            {
                casella33.setText("9");
            }
        });
        
        add(panel,BorderLayout.CENTER);
}
    
    private JButton inizializzaCasella (JButton casellaTemp, JPanel panel, ActionListener listener)
    {
        casellaTemp = new JButton ("");
        casellaTemp.setFont(new Font ("Arial", Font.BOLD, 50));
        casellaTemp.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        casellaTemp.addActionListener(listener);
        panel.add(casellaTemp);
        
        return casellaTemp;
    }
    
    private void scambioMessaggi ()
    {
        while (in.hasNextLine())
        {
            System.out.println ("Entro nel while - Giocatore: "+name);
            line = in.nextLine();
            System.out.println ("Ho ricevuto dal server: "+line);
            casella11.setText(line);
        }
        
        System.out.println ("Esco dal while");
    }
    
    public void run()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}


Penso che il problema possa dipendere da questo metodo:

private void scambioMessaggi ()
    {
        while (in.hasNextLine())
        {
            System.out.println ("Entro nel while - Giocatore: "+name);
            line = in.nextLine();
            System.out.println ("Ho ricevuto dal server: "+line);
            casella11.setText(line);
        }
        
        System.out.println ("Esco dal while");
    }



Infatti, lanciando il programma in esecuzione, la riga "Ho ricevuto dal server: X" viene effettivamente stampata sulla console di output, ma poi il programma si blocca lì. Ho provato a cambiare il while con un if e, effettivamente, l'esecuzione va avanti ma, purtroppo, viene aggiornato solo il JButton della finestra grafica nella quale è stato premuto il pulsante. Altra cosa: controllando con il debugger, ho effettivamente riscontrato che anche l'altro client riceve effettivamente il messaggio dal server, ma non solo il pulsante della sua finestra grafica non si aggiorna, ma non mi vengono nemmeno stampati a schermo i vari messaggi delle println.

Dove sbaglio?

Grazie in anticipo per le risposte.

EDIT: Ho risolto l'esercizio, posto qui la soluzione:

Lato Server
import java.io.*;
import java.net.*;
import java.util.*;

public class TrisServer
{
    static final int MAX_CONNECTIONS = 2;
    static ArrayList <InputOutputServer> giocatori = new ArrayList <InputOutputServer>();
    
    public static void main (String[] args)
    {
        try
        {
            ServerSocket s = new ServerSocket(8089);
            
            System.out.println ("In ascolto sulla porta 8089...");
            
            while (true)
            {
                if (giocatori.size()<MAX_CONNECTIONS)
                {
                    Socket incoming = s.accept();
                    System.out.println ("Collegato!");
                    
                    giocatori.add(new InputOutputServer(incoming, giocatori));
                    Runnable r = giocatori.get(giocatori.size()-1);
                    Thread t = new Thread (r);
                    t.start();
                    
                    System.out.println ("Connessioni correnti: "+giocatori.size());
                }
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

import java.io.*;
import java.net.*;
import java.util.*;

public class InputOutputServer implements Runnable
{
    private Socket incoming;
    private ArrayList <InputOutputServer> players;
    private PrintWriter out;
    private Scanner in;
    private String name;
    
    /* Contatore che viene incrementato ad ogni mossa effettuata. I valori dispari
    corrispondono ai turni del giocatore 1, i valori pari ai turni del giocatore 2.*/
    private static int contaGiocatore = 0;
    
    /* Contatore che viene incrementato ad ogni passo quando le mosse sono >= 5
    Effettuare il controllo prima è inutile, non possono esserci vincitori.*/
    private static int contaMossa = 0;

    public InputOutputServer(Socket incoming, ArrayList giocatori)
    {
        this.incoming = incoming;
        players = giocatori;
    }
    
    public void run()
    {
        try
        {
            try
            {
                InputStream inStream = incoming.getInputStream();
                OutputStream outStream = incoming.getOutputStream();

                in = new Scanner (inStream);
                out = new PrintWriter(outStream, true);

                boolean done = false;
                
                out.println ("Scrivi il nome: ");
                
                if (in.hasNextLine())
                    name = in.nextLine();
                
                System.out.println ("Ho ricevuto il nome "+name);
       
                while (!done && in.hasNextLine())
                {
                    String line;
                    
                    line = in.nextLine();
                    
                    if (line.equals("1-1"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("1-1 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("1-1 O");
                            }
                        }
                    }
                    
                    else if (line.equals("1-2"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("1-2 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("1-2 O");
                            }
                        }
                    }
                    
                    else if (line.equals("1-3"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("1-3 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("1-3 O");
                            }
                        }
                    }
                    
                    else if (line.equals("2-1"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println  ("2-1 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("2-1 O");
                            }
                        }
                    }
                    
                    else if (line.equals("2-2"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("2-2 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("2-2 O");
                            }
                        }
                    }
                    
                    else if (line.equals("2-3"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("2-3 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("2-3 O");
                            }
                        }
                    }
                    
                    else if (line.equals("3-1"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("3-1 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("3-1 O");
                            }
                        }
                    }
                    
                    else if (line.equals("3-2"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("3-2 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("3-2 O");
                            }
                        }
                    }
                    
                    else if (line.equals("3-3"))
                    {
                        if (contaGiocatore%2 == 0)
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("3-3 X");
                            }
                        }
                        else
                        {
                            for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("3-3 O");
                            }
                        }
                    }
                    
                    else if (line.equals("VITTORIA")) // Un giocatore ha vinto
                    {
                        done = true;
                        players.removeAll(players);
                    }
                    
                    if (contaMossa >= 4) // Inizio a controllare se qualcuno ha vinto
                    {
                        for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("contaMossa");
                            }
                    }
                    
                    if (contaMossa >= 8) // La griglia è piena: non vince nessuno
                    {
                        for (int i=0; i<players.size(); i++)
                            {
                                players.get(i).out.println ("FINE");
                            }
                        
                        done = true;
                        players.removeAll(players);
                    }
                    
                    contaGiocatore++;
                    contaMossa++;
                }
            }
            finally
            {
                incoming.close();
                in.close();
                out.close();
                contaGiocatore = 0;
                contaMossa = 0;
                System.out.println ("Gioco finito! Aspetto nuove connessioni...");
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}


Lato Client

import java.io.*;
import java.net.*;

public class TrisClient
{
    static Socket clientSocket;
    static int numeroPorta = 8089;
    static String host = "localhost";
    
    public static void main (String[] args)
    {
        try
        {
            clientSocket = new Socket (host, numeroPorta);
            Runnable r = new InputOutputClient (clientSocket);
            Thread t = new Thread(r);
            t.start();
        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;

public class InputOutputClient implements Runnable
{
    private Socket incoming;
    private PrintWriter out;
    private Scanner in;
    
    public InputOutputClient(Socket s)
    {
        incoming = s;
    }
    
    public void run()
    {
        try
        {
            try
            {
                InputStream inStream = incoming.getInputStream();
                OutputStream outStream = incoming.getOutputStream();
                
                in = new Scanner (inStream);
                out = new PrintWriter (outStream, true);
                
                Scanner tastiera = new Scanner (System.in);
                
                boolean done = false;
                
                String line;
                
                // Inserire il nome
                if (in.hasNextLine())
                {
                    line = in.nextLine();
                    System.out.println (line);
                    line = tastiera.nextLine();
                    out.println(line);
                }
                
                // Creo la finestra grafica
                        
                TrisFrame frame = new TrisFrame(outStream);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                
                // Ricezione messaggi dal Server
                while (!done && in.hasNextLine())
                {
                    line = in.nextLine();
                    frame.stampa(line);
                    
                    /* Ci sono almeno 5 simboli nella finestra. Qualcuno può
                    aver vinto*/
                    
                    if (line.equals("contaMossa"))
                    {
                        boolean esito = frame.controlloVittoria();
                        
                        if (esito==true)
                        {
                            out.println("VITTORIA");
                            done=true;
                            frame.dispose();
                        }
                    }
                    else if (line.equals("FINE")) // Non ha vinto nessuno
                    {
                        done = true;
                        JOptionPane.showMessageDialog(frame, "Non vince nessuno!");
                        frame.dispose();
                    }
                }
            }
            finally
            {
                incoming.close();
                in.close();
                out.close();
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    
    private class TrisFrame extends JFrame
    {
        private static final int LUNGHEZZA = 300;
        private static final int ALTEZZA = 300;
    
        private JPanel panel;
    
        private JButton casella11;
        private JButton casella12;
        private JButton casella13;
        private JButton casella21;
        private JButton casella22;
        private JButton casella23;
        private JButton casella31;
        private JButton casella32;
        private JButton casella33;
    
        private PrintWriter out;

        private OutputStream outStream;
    
        public TrisFrame (OutputStream outputStream) throws IOException
        {
            outStream = outputStream;
            
            out = new PrintWriter (outStream, true);

            setTitle ("TIC TAC TOE");
            setSize (LUNGHEZZA, ALTEZZA);

            panel = new JPanel();
            panel.setLayout(new GridLayout (3,3));
            panel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));


            casella11 = inizializzaCasella(casella11, panel, new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("1-1");
                }
            });

           casella12 = inizializzaCasella(casella12, panel, new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("1-2");
                }
            });

           casella13 = inizializzaCasella(casella13,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("1-3");
                }
            });

           casella21 = inizializzaCasella(casella21,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("2-1");
                }
            });

           casella22 = inizializzaCasella(casella22,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("2-2");
                }
            });

           casella23 = inizializzaCasella(casella23,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("2-3");
                }
            });

           casella31 = inizializzaCasella(casella31,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("3-1");
                }
            });

            casella32 = inizializzaCasella(casella32,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("3-2");
                }
            });

            casella33 = inizializzaCasella(casella33,panel,new ActionListener()
            {
                public void actionPerformed (ActionEvent event)
                {
                    out.println("3-3");
                }
            });

            add(panel,BorderLayout.CENTER);
    }

        private JButton inizializzaCasella (JButton casellaTemp, JPanel panel, ActionListener listener)
        {
            casellaTemp = new JButton ("");
            casellaTemp.setFont(new Font ("Arial", Font.BOLD, 50));
            casellaTemp.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            casellaTemp.addActionListener(listener);
            panel.add(casellaTemp);

            return casellaTemp;
        }
        
        public void stampa (String line)
        {
            if (line.startsWith("1-1"))
            {
                casella11.setText(line.substring(4));
                casella11.setEnabled(false);
            }
            
            if (line.startsWith("1-2"))
            {
                casella12.setText(line.substring(4));
                casella12.setEnabled(false);
            }
            
            if (line.startsWith("1-3"))
            {
                casella13.setText(line.substring(4));
                casella13.setEnabled(false);
            }
            
            if (line.startsWith("2-1"))
            {
                casella21.setText(line.substring(4));
                casella21.setEnabled(false);
            }
            
            if (line.startsWith("2-2"))
            {
                casella22.setText(line.substring(4));
                casella22.setEnabled(false);
            }
            
            if (line.startsWith("2-3"))
            {
                casella23.setText(line.substring(4));
                casella23.setEnabled(false);
            }
            
            if (line.startsWith("3-1"))
            {
                casella31.setText(line.substring(4));
                casella31.setEnabled(false);
            }
            
            if (line.startsWith("3-2"))
            {
                casella32.setText(line.substring(4));
                casella32.setEnabled(false);
            }
            
            if (line.startsWith("3-3"))
            {
                casella33.setText(line.substring(4));
                casella33.setEnabled(false);
            }
        }
        
        public boolean controlloVittoria ()
        {
            // Giocatore X - 1° riga orizzontale
            if (casella11.getText().equals("X") && casella12.getText().equals("X") &&
                    casella13.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore X - 2° riga orizzontale
            else if (casella21.getText().equals("X") && casella22.getText().equals("X") &&
                    casella23.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore X - 3° riga orizzontale
            else if (casella31.getText().equals("X") && casella32.getText().equals("X") &&
                    casella33.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore X - 1° riga verticale
            else if (casella11.getText().equals("X") && casella21.getText().equals("X") &&
                    casella31.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore X - 2° riga verticale
            else if (casella12.getText().equals("X") && casella22.getText().equals("X") &&
                    casella32.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore X - 3° riga verticale
            else if (casella13.getText().equals("X") && casella23.getText().equals("X") &&
                    casella33.getText().equals("X"))
            {
                System.out.println ("Vince il giocatore 1!!!");
                return true;
            }
            
            // Giocatore X - Diagonale alto sx - basso dx
            else if (casella11.getText().equals("X") && casella22.getText().equals("X") &&
                    casella33.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore X - Diagonale alto dx - basso sx
            else if (casella13.getText().equals("X") && casella22.getText().equals("X") &&
                    casella31.getText().equals("X"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 1!");
                return true;
            }
            
            // Giocatore O - 1° riga orizzontale
            if (casella11.getText().equals("O") && casella12.getText().equals("O") &&
                    casella13.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - 2° riga orizzontale
            else if (casella21.getText().equals("O") && casella22.getText().equals("O") &&
                    casella23.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - 3° riga orizzontale
            else if (casella31.getText().equals("O") && casella32.getText().equals("O") &&
                    casella33.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - 1° riga verticale
            else if (casella11.getText().equals("O") && casella21.getText().equals("O") &&
                    casella31.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - 2° riga verticale
            else if (casella12.getText().equals("O") && casella22.getText().equals("O") &&
                    casella32.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - 3° riga verticale
            else if (casella13.getText().equals("O") && casella23.getText().equals("O") &&
                    casella33.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - Diagonale alto sx - basso dx
            else if (casella11.getText().equals("O") && casella22.getText().equals("O") &&
                    casella33.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            // Giocatore O - Diagonale alto dx - basso sx
            else if (casella13.getText().equals("O") && casella22.getText().equals("O") &&
                    casella31.getText().equals("O"))
            {
                JOptionPane.showMessageDialog(null, "Vince il giocatore 2!");
                return true;
            }
            
            else
                return false;
        }
    }
}
Ultima modifica effettuata da MagoAntò 08/11/11 16:42
aaa