Dúvida - Jogo da Velha

6 respostas
thundercas

Fala galera, beleza?? É o seguinte, estou desenvolvendo um jogo da velha, mas estou tendo dúvidas. Eu Criei JLabels 3x3, mas o problema é que quando o usuário digita X por exemplo, quando movo o valor para o JLabel, o tamanho do JLabel é redimensionado, ferrando todo o layout da tela. Alguém tem alguma solução???

Valeu!!

6 Respostas

Dieval_Guizelini

Qual layout você está utilizando?

Se você usar o GridLayout em um JPanel acredito que isso não ocorra.

fw

thundercas

Vo tenta e já retorno aqui, valeu!

thundercas

Cara, não deu certo… Os JLabels continuam mudando de tamanho quando altero a descrição deles.

Dieval_Guizelini

Acho que você está tendo problemas com os layouts, veja o exemplo que fiz:

public class MainApp extends javax.swing.JFrame {
    
    /** Creates new form MainApp */
    public MainApp() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("teste");

        jPanel1.setBackground(new java.awt.Color(255, 255, 0));
        jPanel1.setLayout(new java.awt.GridLayout(3, 3, 2, 2));

        jLabel1.setText("jLabel1");
        jLabel1.setOpaque(true);
        jPanel1.add(jLabel1);

        jLabel7.setText("jLabel7");
        jLabel7.setOpaque(true);
        jPanel1.add(jLabel7);

        jLabel9.setText("jLabel9");
        jLabel9.setOpaque(true);
        jPanel1.add(jLabel9);

        jLabel5.setText("jLabel5");
        jLabel5.setOpaque(true);
        jPanel1.add(jLabel5);

        jLabel4.setText("jLabel4");
        jLabel4.setOpaque(true);
        jPanel1.add(jLabel4);

        jLabel2.setText("jLabel2");
        jLabel2.setOpaque(true);
        jPanel1.add(jLabel2);

        jLabel6.setText("jLabel6");
        jLabel6.setOpaque(true);
        jPanel1.add(jLabel6);

        jLabel8.setText("jLabel8");
        jLabel8.setOpaque(true);
        jPanel1.add(jLabel8);

        jLabel3.setText("jLabel3");
        jLabel3.setOpaque(true);
        jPanel1.add(jLabel3);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainApp().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration
}
Neste ponto:
jPanel1.setBackground(new java.awt.Color(255, 255, 0));
        jPanel1.setLayout(new java.awt.GridLayout(3, 3, 2, 2));

eu fiz duas coisas, defini as cores das linhas do jogo da velha como amarelas e a distância entre um célula e outra do grid como sendo 2.
aqui funcionou, ou seja, posso modificar os valores dos labels, ampliar ou reduzir o form, e o formato da velha é preservado.

tenta aí.

fw

thundercas

Legal cara, vou tentar!! Obrigado!!!

thundercas

Dieval, com sua ajuda eu consegui montar o programa ^^

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class JogoDaVelia extends JFrame implements ActionListener{
	
	private int jogador = 1;
	int j = 1, flag = 0;
	String jogador1, jogador2;
	private int jogo[][] = new int [3][3];
	String desenho;
	JPanel painel = new JPanel();
	JButton b1 = new JButton("");
	JButton b2 = new JButton("");
	JButton b3 = new JButton("");
	JButton b4 = new JButton("");
	JButton b5 = new JButton("");
	JButton b6 = new JButton("");
	JButton b7 = new JButton("");
	JButton b8 = new JButton("");
	JButton b9 = new JButton("");
	
	public static void main(String args[]) {   
        java.awt.EventQueue.invokeLater(new Runnable() {   
            public void run() {   
                new JogoDaVelia().setVisible(true);   
            }   
        });  }
	
	public JogoDaVelia () {
		iniciarComponentes();
	}
	
	public void iniciarComponentes () {
		painel.add(b1);
		painel.add(b2);
		painel.add(b3);
		painel.add(b4);
		painel.add(b5);
		painel.add(b6);
		painel.add(b7);
		painel.add(b8);
		painel.add(b9);
		
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		b4.addActionListener(this);
		b5.addActionListener(this);
		b6.addActionListener(this);
		b7.addActionListener(this);
		b8.addActionListener(this);
		b9.addActionListener(this);
		
		for (int i = 0; i < 3; i++){
			for (int j = 0; j < 3; j++) {
				jogo[i][j] = 0;
			}
		}
		
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setTitle("Jogo da Velha");
		
		painel.setBackground(new Color(255, 255, 0, 0));
		painel.setLayout(new GridLayout(3, 3, 2, 2));
				
		getContentPane().add(painel, BorderLayout.CENTER);
		
		painel.setVisible(true);
		pack();	
		
		jogador1 = JOptionPane.showInputDialog("Digite o nome do primeiro jogador:");
		jogador2 = JOptionPane.showInputDialog("Digite o nome do segundo jogador:");
	}

	public void actionPerformed(ActionEvent e) {
		if (jogador % 2 == 0) {
			desenho = "O";
			j = 2;			
		}
		else {
			desenho = "X";
			j = 1;
		}
		
		jogador++;
		
		if (e.getSource() == b1) {
				b1.setText(desenho);
				b1.setEnabled(false);
				jogo[0][0] = j;				
		}
		else if (e.getSource() == b2) {
			b2.setText(desenho);
			b2.setEnabled(false);
			jogo[0][1] = j;
		}
		else if (e.getSource() == b3) {
			b3.setText(desenho);
			b3.setEnabled(false);
			jogo[0][2] = j;
		}
		else if (e.getSource() == b4) {
			b4.setText(desenho);
			b4.setEnabled(false);
			jogo[1][0] = j;
		}
		else if (e.getSource() == b5) {
			b5.setText(desenho);
			b5.setEnabled(false);
			jogo[1][1] = j;
		}
		else if (e.getSource() == b6) {
			b6.setText(desenho);
			b6.setEnabled(false);
			jogo[1][2] = j;
		}
		else if (e.getSource() == b7) {
			b7.setText(desenho);
			b7.setEnabled(false);
			jogo[2][0] = j;
		}
		else if (e.getSource() == b8) {
			b8.setText(desenho);
			b8.setEnabled(false);
			jogo[2][1] = j;
		}
		else if (e.getSource() == b9){
			b9.setText(desenho);
			b9.setEnabled(false);
			jogo[2][2] = j;
		}
		
		for (int i = 0; i < 3; i++) {
			if ((jogo[0][i] == 1) && (jogo[1][i] == 1) && (jogo[2][i]) == 1){
				flag = 1;		
			}
			else if((jogo[0][i] == 2) && (jogo[1][i] == 2) && (jogo[2][i]) == 2){
				flag = 2;
			}
		}
		
		for (int i = 0; i < 3; i++) {
			if ((jogo[i][0] == 1) && (jogo[i][1] == 1) && (jogo[i][2]) == 1){
				flag = 1;		
			}
			else if ((jogo[i][0] == 2) && (jogo[i][1] == 2) && (jogo[i][2]) == 2){
				flag = 2;
			}
		}

		if ((jogo[0][0] == 1) && (jogo[1][1] == 1) && (jogo[2][2] == 1))
				flag = 1;
		else if ((jogo[0][0] == 2) && (jogo[1][1] == 2) && (jogo[2][2] == 2))
				flag = 2;
		
		if ((jogo[0][2] == 1) && (jogo[1][1] == 1) && (jogo[2][0] == 1))
			flag = 1;
	else if ((jogo[0][2] == 2) && (jogo[1][1] == 2) && (jogo[2][0] == 2))
			flag = 2;
	
	if (jogador > 9) {
		JOptionPane.showMessageDialog(null, "Deu velha!!");
		b1.setEnabled(false);
		b2.setEnabled(false);
		b3.setEnabled(false);
		b4.setEnabled(false);
		b5.setEnabled(false);
		b6.setEnabled(false);
		b7.setEnabled(false);
		b8.setEnabled(false);
		b9.setEnabled(false);
	} else	if (flag == 1 || flag == 2){
		if (flag == 1)
			JOptionPane.showMessageDialog(null, "O jogador " + jogador1 + " venceu!");
		else
			JOptionPane.showMessageDialog(null, "O jogador " + jogador2 + " venceu!");
		b1.setEnabled(false);
		b2.setEnabled(false);
		b3.setEnabled(false);
		b4.setEnabled(false);
		b5.setEnabled(false);
		b6.setEnabled(false);
		b7.setEnabled(false);
		b8.setEnabled(false);
		b9.setEnabled(false);
	} 

	}
}

Ficou simples, mas era mais ou menos o que eu queria… Agora vou tentar montar Single Player… Se tiver alguma sugestão ou correção no meu programa, fique a vontade. Valeu abraços!!

Criado 22 de dezembro de 2007
Ultima resposta 23 de dez. de 2007
Respostas 6
Participantes 2