Ir para conteúdo
Entre para seguir isso  
Armaggerdon

JogodaVelha com arquitetura Cliente/Serv

Recommended Posts

Armaggerdon    0
Armaggerdon

Explicação

Os códigos java abaixo possibilitam 2 usuários jogarem um jogo da velha pela internet. É uma arquitetura Cliente/Servidor, onde o usuário denominado servidor fica sempre disponível para uma conexão. Ele irá aceitar a conexão do cliente, criar o tabuleiro, e realizar a primeira jogada. Após realizar a primeira jogada, o servidor atualiza seu tabuleiro e envia os dados ao Cliente. Este, por sua vez, lê os dados recebidos, verifica se houve vencedores, e, em caso negativo, faz sua jogada, atualizando seu tabuleiro e enviado dados ao servidor. Em caso de vitória, é mostrada uma mensagem indicando quem venceu e o Cliente fecha as conexões.

Há uma série de melhorias a serem implementadas, como a parte gráfica e a possibilidade de escolher quem fará a primeira jogada, se o servidor ou o cliente.

 

 

Código do Cliente

 

package jogovelha;

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

public class Cliente {
   private static JogoVelha jogo = new JogoVelha('X');

   public static void main(String[] args) throws Exception {

       String host = "127.0.0.1";
       int porta = 6666;
       String situacaoTabuleiro;

       System.out.println("Rodando...");
       System.out.println("Conectando com servidor...");

       Socket socketCliente = new Socket(host, porta);
       System.out.println("Conectado...");

       System.out.println("Criando cadeias...");

       BufferedReader entradaServidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
       DataOutputStream saidaServidor = new DataOutputStream(socketCliente.getOutputStream());
       System.out.println("Cadeias criadas...");

       jogo.criarTabuleiro();

       while(true) {
           situacaoTabuleiro = entradaServidor.readLine();
           jogo.atualizarTabuleiro(situacaoTabuleiro);

           if(jogo.vitoria())
           {
               System.out.println("O servidor venceu!!!");
               break;
           }

           situacaoTabuleiro = jogo.jogada();

           saidaServidor.writeBytes(situacaoTabuleiro+"\n");

           if(jogo.vitoria())
           {
               System.out.println("O cliente venceu!!!");
               break;
           }
       }

       entradaServidor.close();
       saidaServidor.close();
       socketCliente.close();
   }
}

Código do Servidor

package Servidor;

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

public class Servidor {
   private static JogoVelha jogo = new JogoVelha('O');

   public static void main(String[] args) throws Exception {

       int porta = 6666;

       ServerSocket servidor = new ServerSocket(porta);


       while(true) {
           String situacaoTabuleiro;

           System.out.println("Esperando cliente...");
           Socket conexao = servidor.accept();
           System.out.println("Cliente Conectado...");

           BufferedReader entradaCliente = 
                   new BufferedReader(new InputStreamReader(conexao.getInputStream()));

           DataOutputStream saidaCliente = new DataOutputStream(conexao.getOutputStream());

           System.out.println("Cadeias criadas...");

           jogo.criarTabuleiro();
           jogo.mostrarTabuleiro();

           while(true) {
               situacaoTabuleiro = jogo.jogada();

               saidaCliente.writeBytes(situacaoTabuleiro+"\n");

               if(jogo.vitoria())
               {
                   System.out.println("O servidor venceu!!");
                   break;
               }

               situacaoTabuleiro = entradaCliente.readLine();
               jogo.atualizarTabuleiro(situacaoTabuleiro);

               if(jogo.vitoria())
               {
                   System.out.println("O cliente venceu!!!");
                   break;
               }
           }
       }
   }
}

 

Protocolo JogoVelha

 

package jogovelha;

import java.io.*;

public class JogoVelha {
   private char[][] tabuleiro = new char[3][3];
   private char jogador;

   public JogoVelha() {}

   public JogoVelha(char jogador) {
       this.jogador = jogador;
   }

   public void criarTabuleiro() {
       for(int i=0;i<3;i++)
           for(int j=0;j<3;j++)
               tabuleiro[i][j] = ' ';
   }

   public void mostrarTabuleiro() {
       System.out.println("O tabuleiro segue esquema abaixo: \n");

       for(int i=1;i<10;i++)
               if((i==3)||(i==6))
                   System.out.println(i+"\n----------");
               else if(i==9)
                   System.out.println(i);
               else
                   System.out.print(i+" | ");


       System.out.println("\n\nTabuleiro atual: ");

       for(int i=0;i<3;i++)
           for(int j=0;j<3;j++)
               if((i==0 && j==2)||(i==1 && j==2))
                   System.out.println(tabuleiro[i][j]+"\n----------");
               else if (i==2 && j==2)
                   System.out.println(tabuleiro[i][j]);
               else
                   System.out.print(tabuleiro[i][j]+" | ");
   }

   public String jogada() throws Exception {
       BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in));
       String situacaoTabuleiro = "";
       String jogada;
       int jogadaInt; 

           do {
               System.out.print("Escolha a sua próxima jogada(1 a 9, 0 termina o jogo): ");
               jogada = doUsuario.readLine();
               try {
                   jogadaInt = Integer.parseInt(jogada);

                   if (Integer.signum(jogadaInt) == -1) {
                       jogadaInt = 10;
                       System.out.println("Essa jogada não é válida. Jogue Novamente.");
                   } else if(jogadaInt == 0)
                   {
                       System.exit(0);
                   }

               } catch (NumberFormatException e) {
                   jogadaInt = 10;
                   System.out.println("Essa jogada não é válida. Jogue Novamente.");
               }
           } while (jogadaInt > 9);

       switch (jogadaInt) {
           case (1):
               tabuleiro[0][0] = jogador;
               break;
           case (2):
               tabuleiro[0][1] = jogador;
               break;
           case (3):
               tabuleiro[0][2] = jogador;
               break;
           case (4):
               tabuleiro[1][0] = jogador;
               break;
           case (5):
               tabuleiro[1][1] = jogador;
               break;
           case (6):
               tabuleiro[1][2] = jogador;
               break;
           case (7):
               tabuleiro[2][0] = jogador;
               break;
           case (8):
               tabuleiro[2][1] = jogador;
               break;
           case (9):
               tabuleiro[2][2] = jogador;
               break;
       }

       mostrarTabuleiro();

       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 3; j++) {
               situacaoTabuleiro += tabuleiro[i][j];
           }
       }

       return situacaoTabuleiro;
   }

   public void atualizarTabuleiro(String situacao) {
       int cont = 0;
       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 3; j++) {
               tabuleiro[i][j] = situacao.charAt(cont);
               cont++;
           }
       }

       mostrarTabuleiro();
   }

   public boolean vitoria() {
       if(tabuleiro[0][0]!=' ' && tabuleiro[0][0]==tabuleiro[0][1] && tabuleiro[0][1]==tabuleiro[0][2])
           return true;
       else if (tabuleiro[1][0]!=' ' && tabuleiro[1][0]==tabuleiro[1][1] && tabuleiro[1][1]==tabuleiro[1][2])
           return true;
       else if (tabuleiro[2][0]!=' ' && tabuleiro[2][0]==tabuleiro[2][1] && tabuleiro[2][1]==tabuleiro[2][2])
           return true;
       else if (tabuleiro[0][0]!=' ' && tabuleiro[0][0]==tabuleiro[1][0] && tabuleiro[1][0]==tabuleiro[2][0])
           return true;
       else if (tabuleiro[0][1]!=' ' && tabuleiro[0][1]==tabuleiro[1][1] && tabuleiro[1][1]==tabuleiro[2][1])
           return true;
       else if (tabuleiro[0][2]!=' ' && tabuleiro[0][2]==tabuleiro[1][2] && tabuleiro[1][2]==tabuleiro[2][2])
           return true;
       else if (tabuleiro[0][0]!=' ' && tabuleiro[0][0]==tabuleiro[1][1] && tabuleiro[1][1]==tabuleiro[2][2])
           return true;
       else if (tabuleiro[0][2]!=' ' && tabuleiro[0][2]==tabuleiro[1][1] && tabuleiro[1][1]==tabuleiro[2][0])
           return true;

       return false;
   }
}

Eu achei isso na net e estava sem créditos então não posso diser quem fez.Eu testei aqui e deu certo, sem nenhum bug ou problema!

Editado por Raphael Carnaúba

Compartilhar este post


Link para o post
Compartilhar em outros sites
Baxnie    8
Baxnie

Sem identação não da cara. Cade os includes? Se cada um do forum copiar 1 code da internet e colocar aqui, isso vira uma bagunça. Arrume isso ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Fusion    0
Fusion

Includes? Isso ai é JavaScript tio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Eventide    7
Eventide

ahhh essas cores me deixam looouco! :{

obs:

isso é c++ mesmo? acho que está na área errada.. :/

Compartilhar este post


Link para o post
Compartilhar em outros sites
Baxnie    8
Baxnie

Fusion, eu nem tentei ler. Eu vi que a 1º palavra não era include então nem li.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Raphael Carnaúba    1
Raphael Carnaúba

Bom, achei o código de fonte original e arrumei o post do nosso colega, espero que fique mais claro agora :)

 

Forte abraço,

Raphael.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Join_u    0
Join_u
Fusion, eu nem tentei ler. Eu vi que a 1º palavra não era include então nem li.

 

Soh de ver a primeira palavra ja da pa sacar q eh java

Compartilhar este post


Link para o post
Compartilhar em outros sites
Baxnie    8
Baxnie

Movido para seção Java, eu não sei mecher com isso, portanto, caso não seja Java, desculpa.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zorkss    0
Zorkss

Pow Java eh massa... to fazendo curso e to achando massa... alguém ja pensou em fazer ot em java? :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×