Advertisement
Guest User

JogoDaVelha

a guest
Oct 19th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.46 KB | None | 0 0
  1. package jogodavelha;
  2.  
  3. import java.awt.Font;
  4. import java.awt.GridLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.IOException;
  8. import java.io.PrintWriter;
  9. import java.net.Socket;
  10. import java.util.Scanner;
  11. import java.util.logging.Level;
  12. import java.util.logging.Logger;
  13. import javax.swing.JButton;
  14. import javax.swing.JComponent;
  15. import javax.swing.JOptionPane;
  16. import javax.swing.JPanel;
  17. import javax.swing.border.EmptyBorder;
  18.  
  19. /**
  20.  *
  21.  * @author Vinícius Resende
  22.  */
  23. public class JogoDaVelha extends javax.swing.JFrame {
  24.  
  25.     /**
  26.      * Creates new form JogoDaVelha
  27.      */
  28.     JButton cor;        // botão para reinicializar os botões
  29.     JButton[] botoes;  //vetor de botões
  30.     JPanel PainelJogo; // painel onde ficará os botões
  31.     String simbolo;     // aloca X ou 0
  32.     int vezDoJogador;   // verifica a vez do jogador
  33.     PrintWriter servidor;
  34.     Scanner leitor; // para receber msgs do servidor
  35.     String jogadorAtual; // saber o nome do jogador acabou de jogar
  36.     String nome; // nome do jogador
  37.     int cont = 0;
  38.     public JogoDaVelha(String nome, int numero) throws IOException {
  39.         super("Jogo da velha");
  40.         this.nome = nome;
  41.         this.vezDoJogador = 1;
  42.         ((JComponent) getContentPane()).setBorder(new EmptyBorder(15, 15, 15, 15));// Cria borda
  43.  
  44.         PainelJogo = new JPanel(); // cria uma painel
  45.         PainelJogo.setLayout(new GridLayout(3, 3, 10, 10)); // define um grid para colocar os botões, com linha colunas e o espaçamento entre os botões
  46.         cor = new JButton();
  47.  
  48.         botoes = new JButton[9];
  49.         botoes[0] = new JButton("");
  50.         botoes[1] = new JButton("");
  51.         botoes[2] = new JButton("");
  52.         botoes[3] = new JButton("");
  53.         botoes[4] = new JButton("");
  54.         botoes[5] = new JButton("");
  55.         botoes[6] = new JButton("");
  56.         botoes[7] = new JButton("");
  57.         botoes[8] = new JButton("");
  58.         configurarRede();
  59.  
  60.         //------------- FORMATAÇÃO DOS BOTÕES ---------------//
  61.         botoes[0].setFont(new Font("Calibri", Font.BOLD, 70));
  62.         botoes[0].addActionListener(new ActionListener() {
  63.             @Override
  64.             public void actionPerformed(ActionEvent e) {
  65.                 if(vezDoJogador == numero){ // só jogo se for a vez dele
  66.                     servidor.println("0 " + nome + " " + numero); // envio msg pro servidor indicando minha jogada
  67.                     servidor.flush();
  68.                 }
  69.                
  70.             }
  71.         });
  72.         botoes[1].addActionListener(new ActionListener() {
  73.             @Override
  74.             public void actionPerformed(ActionEvent e) {
  75.                 if(vezDoJogador == numero){
  76.                     servidor.println("1 " + nome + " " + numero);
  77.                     servidor.flush();
  78.                 }
  79.             }
  80.         });
  81.         botoes[2].addActionListener(new ActionListener() {
  82.             @Override
  83.             public void actionPerformed(ActionEvent e) {
  84.                 if(vezDoJogador == numero){ // só jogo se for a vez dele
  85.                     servidor.println("2 " + nome + " " + numero);
  86.                     servidor.flush();
  87.                 }
  88.             }
  89.         });
  90.         botoes[3].addActionListener(new ActionListener() {
  91.             @Override
  92.             public void actionPerformed(ActionEvent e) {
  93.                 if(vezDoJogador == numero){ // só jogo se for a vez dele
  94.                     servidor.println("3 " + nome + " " + numero);
  95.                     servidor.flush();
  96.                 }
  97.             }
  98.         });
  99.         botoes[4].addActionListener(new ActionListener() {
  100.             @Override
  101.             public void actionPerformed(ActionEvent e) {
  102.                 if(vezDoJogador == numero){
  103.                     servidor.println("4 " + nome + " " + numero);
  104.                     servidor.flush();
  105.                 }
  106.             }
  107.         });
  108.         botoes[5].addActionListener(new ActionListener() {
  109.             @Override
  110.             public void actionPerformed(ActionEvent e) {
  111.                 if(vezDoJogador == numero){
  112.                     servidor.println("5 " + nome + " " + numero);
  113.                     servidor.flush();
  114.                 }
  115.             }
  116.         });
  117.         botoes[6].addActionListener(new ActionListener() {
  118.             @Override
  119.             public void actionPerformed(ActionEvent e) {
  120.                 if(vezDoJogador == numero){
  121.                     servidor.println("6 " + nome + " " + numero);
  122.                     servidor.flush();
  123.                 }
  124.             }
  125.         });
  126.         botoes[7].addActionListener(new ActionListener() {
  127.             @Override
  128.             public void actionPerformed(ActionEvent e) {
  129.                 if(vezDoJogador == numero){
  130.                     servidor.println("7 " + nome + " " + numero);
  131.                     servidor.flush();
  132.                 }
  133.             }
  134.         });
  135.         botoes[8].addActionListener(new ActionListener() {
  136.             @Override
  137.             public void actionPerformed(ActionEvent e) {
  138.                 if(vezDoJogador == numero){ // só jogo se for a vez dele
  139.                     servidor.println("8 " + nome + " " + numero);
  140.                     servidor.flush();
  141.                 }
  142.             }
  143.         });
  144.         PainelJogo.add(botoes[0]);
  145.         botoes[1].setFont(new Font("Calibri", Font.BOLD, 70));
  146.         PainelJogo.add(botoes[1]);
  147.         botoes[2].setFont(new Font("Calibri", Font.BOLD, 70));
  148.         PainelJogo.add(botoes[2]);
  149.         botoes[3].setFont(new Font("Calibri", Font.BOLD, 70));
  150.         PainelJogo.add(botoes[3]);
  151.         botoes[4].setFont(new Font("Calibri", Font.BOLD, 70));
  152.         PainelJogo.add(botoes[4]);
  153.         botoes[5].setFont(new Font("Calibri", Font.BOLD, 70));
  154.         PainelJogo.add(botoes[5]);
  155.         botoes[6].setFont(new Font("Calibri", Font.BOLD, 70));
  156.         PainelJogo.add(botoes[6]);
  157.         botoes[7].setFont(new Font("Calibri", Font.BOLD, 70));
  158.         PainelJogo.add(botoes[7]);
  159.         botoes[8].setFont(new Font("Calibri", Font.BOLD, 70));
  160.         PainelJogo.add(botoes[8]);
  161.         //--------------------- FIM ---------- ---------------//
  162.         add(PainelJogo); // adiciona o Painel ao Frame
  163.         setLocation(470, 200); // determina localização da janela
  164.         setSize(400, 400); // tamanho da janela
  165.         setVisible(true); // torna visível a janela
  166.  
  167.     }
  168.     public void jogada(int simbol) { // metodo q vai marcar no tabuleiro e passar a vez do jogador
  169.         //verifica a vez e indica o símbolo do jogador
  170.        
  171.         if (vezDoJogador == 1) {
  172.             simbolo = "X"; // símbolo do jogador 1 é X
  173.             vezDoJogador = 2; // jogador 1 já jogou. Agora é a vez do jogador 2
  174.         } else {
  175.             simbolo = "O"; // símbolo do jogador 1 é O
  176.             vezDoJogador = 1; // jogador 2 já jogou. Agora é a vez do jogador 1
  177.         }
  178.         botoes[simbol].setText(simbolo);  // atribui o símbolo ao botão de acordo com o valor do tipo
  179.         botoes[simbol].setEnabled(false); //deixa o botão desativo após atribuir o símbolo a ele
  180.         cont++;  // usado para ver se aconteceu empate (caso tiver preenchido todo tabuleiro)
  181.         verificaLinha();
  182.         verificaColuna();
  183.         verificaDiagonais();
  184.         Empate();
  185.     }
  186.     public void Empate() { // verifica se aconteceu empate
  187.         if (cont == 9) {
  188.             JOptionPane.showMessageDialog(null, "EMPATE");
  189.             System.exit(0);
  190.         }
  191.     }
  192.     public void verificaLinha() { // verifica se alguem ganhou nas linhas
  193.         if (!botoes[0].getText().equals("") && !botoes[1].getText().equals("") && !botoes[2].getText().equals("") && botoes[0].getText().equals(botoes[1].getText()) && botoes[0].getText().equals(botoes[2].getText())) {
  194.             vencedor(); // chamo esse metodo que indica o vencedorr e encerra o programa
  195.         } else if (!botoes[3].getText().equals("") && !botoes[4].getText().equals("") && !botoes[5].getText().equals("") && botoes[3].getText().equals(botoes[4].getText()) && botoes[3].getText().equals(botoes[5].getText())) {
  196.             vencedor(); // chamo esse metodo que indica o vencer e encerra o programa
  197.         } else if (!botoes[6].getText().equals("") && !botoes[7].getText().equals("") && !botoes[8].getText().equals("") && botoes[6].getText().equals(botoes[7].getText()) && botoes[6].getText().equals(botoes[8].getText())) {
  198.             vencedor();
  199.         }
  200.     }
  201.     public void verificaColuna() { // verifica se alguem ganhou nas colunas
  202.         if (!botoes[0].getText().equals("") && !botoes[3].getText().equals("") && !botoes[6].getText().equals("") && botoes[0].getText().equals(botoes[3].getText()) && botoes[0].getText().equals(botoes[6].getText())) {
  203.             vencedor(); // chamo esse metodo que indica o vencedor e encerra o programa
  204.         } else if (!botoes[1].getText().equals("") && !botoes[4].getText().equals("") && !botoes[7].getText().equals("") && botoes[1].getText().equals(botoes[4].getText()) && botoes[1].getText().equals(botoes[7].getText())) {
  205.             vencedor();
  206.         } else if (!botoes[2].getText().equals("") && !botoes[5].getText().equals("") && !botoes[8].getText().equals("") && botoes[2].getText().equals(botoes[5].getText()) && botoes[2].getText().equals(botoes[8].getText())) {
  207.             vencedor();
  208.         }
  209.     }
  210.     public void vencedor() {
  211.         JOptionPane.showMessageDialog(null, (jogadorAtual + " venceu o jogo!"));
  212.         servidor.print("Encerrar");
  213.         System.exit(0);
  214.  
  215.     }
  216.     public void verificaDiagonais() { // verifica se alguem ganhou nas diagonais
  217.         if (!botoes[0].getText().equals("") && !botoes[4].getText().equals("") && !botoes[8].getText().equals("") && botoes[0].getText().equals(botoes[4].getText()) && botoes[0].getText().equals(botoes[8].getText())) {
  218.             vencedor();
  219.         } else if (!botoes[2].getText().equals("") && !botoes[4].getText().equals("") && !botoes[6].getText().equals("") && botoes[2].getText().equals(botoes[4].getText()) && botoes[2].getText().equals(botoes[6].getText())) {
  220.             vencedor();
  221.         }
  222.     }
  223.     @SuppressWarnings("unchecked")
  224.     // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
  225.     private void initComponents() {
  226.  
  227.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  228.  
  229.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  230.         getContentPane().setLayout(layout);
  231.         layout.setHorizontalGroup(
  232.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  233.             .addGap(0, 400, Short.MAX_VALUE)
  234.         );
  235.         layout.setVerticalGroup(
  236.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  237.             .addGap(0, 300, Short.MAX_VALUE)
  238.         );
  239.  
  240.         pack();
  241.     }// </editor-fold>                        
  242.     private void configurarRede() throws IOException{
  243.         Socket socket = new Socket("192.168.1.120", 5000);
  244.         servidor = new PrintWriter(socket.getOutputStream()); //esse vai enviar msgs pro servidor
  245.         leitor = new Scanner(socket.getInputStream()); // esse vai ler as msgs do servidor
  246.         new Thread(new EscutaServidor()).start(); // thread pra ficar escutando o servidor
  247.     }
  248.    
  249.     private class EscutaServidor implements Runnable{
  250.         @Override
  251.         public void run() {
  252.             String s;
  253.             while((s = leitor.nextLine()) != null){  // fico lendo tudo q o servidor enviar
  254.                 jogadorAtual = s.substring(2, s.length() - 2); // guardo o nome de qm acabou de jogar pra caso ele vencer
  255.                 if(s.charAt(0) == '0') { // na posicao 0 da mensagem eu guardo qual posição vou marcar
  256.                     jogada(0);
  257.                 } else if(s.charAt(0) == '1'){
  258.                     jogada(1);
  259.                 } else if (s.charAt(0) == '2'){
  260.                     jogada(2);
  261.                 } else if (s.charAt(0) == '3'){
  262.                     jogada(3);
  263.                 } else if(s.charAt(0) == '4'){
  264.                     jogada(4);
  265.                 } else if(s.charAt(0) == '5'){
  266.                     jogada(5);
  267.                 } else if(s.charAt(0) == '6') {
  268.                     jogada(6);
  269.                 } else if(s.charAt(0) == '7'){
  270.                     jogada(7);
  271.                 } else if(s.charAt(0) == '8') {
  272.                     jogada(8);
  273.                 }
  274.                
  275.             }
  276.         }
  277.        
  278.     }
  279.     public static void main(String args[]){
  280.         /* Set the Nimbus look and feel */
  281.         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
  282.         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
  283.          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
  284.          */
  285.         try {
  286.             for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
  287.                 if ("Nimbus".equals(info.getName())) {
  288.                     javax.swing.UIManager.setLookAndFeel(info.getClassName());
  289.                     break;
  290.                 }
  291.             }
  292.         } catch (ClassNotFoundException ex) {
  293.             java.util.logging.Logger.getLogger(JogoDaVelha.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  294.         } catch (InstantiationException ex) {
  295.             java.util.logging.Logger.getLogger(JogoDaVelha.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  296.         } catch (IllegalAccessException ex) {
  297.             java.util.logging.Logger.getLogger(JogoDaVelha.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  298.         } catch (javax.swing.UnsupportedLookAndFeelException ex) {
  299.             java.util.logging.Logger.getLogger(JogoDaVelha.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  300.         }
  301.         //</editor-fold>
  302.  
  303.         /* Create and display the form */
  304.         java.awt.EventQueue.invokeLater(new Runnable() {
  305.             public void run() {
  306.                 try {
  307.                     //inicio um tabuleiro com os jogadores
  308.                     new JogoDaVelha("Vinicius", 2).setVisible(true);
  309.                 } catch (IOException ex) {
  310.                     Logger.getLogger(JogoDaVelha.class.getName()).log(Level.SEVERE, null, ex);
  311.                 }
  312.             }
  313.         });
  314.     }
  315.  
  316.     // Variables declaration - do not modify                    
  317.     // End of variables declaration                  
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement