Armaggerdon 0 #1 Posted January 26, 2009 (edited) 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! Edited February 18, 2009 by Raphael Carnaúba Share this post Link to post Share on other sites
Baxnie 8 #2 Posted January 31, 2009 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. Share this post Link to post Share on other sites
Fusion 0 #3 Posted February 1, 2009 Includes? Isso ai é JavaScript tio. Share this post Link to post Share on other sites
Eventide 7 #4 Posted February 1, 2009 ahhh essas cores me deixam looouco! :{ obs: isso é c++ mesmo? acho que está na área errada.. :/ Share this post Link to post Share on other sites
Baxnie 8 #5 Posted February 1, 2009 Fusion, eu nem tentei ler. Eu vi que a 1º palavra não era include então nem li. Share this post Link to post Share on other sites
Raphael Carnaúba 1 #6 Posted February 18, 2009 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. Share this post Link to post Share on other sites
Join_u 0 #7 Posted February 19, 2009 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 Share this post Link to post Share on other sites
Baxnie 8 #8 Posted February 20, 2009 Movido para seção Java, eu não sei mecher com isso, portanto, caso não seja Java, desculpa. Share this post Link to post Share on other sites
Zorkss 0 #9 Posted April 24, 2009 Pow Java eh massa... to fazendo curso e to achando massa... alguém ja pensou em fazer ot em java? Share this post Link to post Share on other sites