segunda-feira, 20 de junho de 2011

[JAVA] Jogo da velha

Este código foi desenvolvido por mim como parte integrante da disciplina de Algoritmos, no meu curso de ciência da computação. Disponiblizarei para estudo.


Código:

/*Código feito por João Marcos*/
/*Informação do pacote */
package jogodavelha;

/*Importação de bibliotecas*/
import java.util.Scanner;

public class JogoDaVelha {

    //Função para mostrar o tabuleiro
        public static void MostraTabuleiro(String[][] x) {
            System.out.println();
            /*Varrer as linhas*/
            for(int l = 0; l < x.length; l++) {
                /*Varrer as colunas*/
                for(int c = 0; c < x.length; c++) {
                    /*Exibir a matroz*/
                    System.out.print(x[l][c]+ "\t");
                }
                System.out.println("\n");
            }
            System.out.println();
    }

    //Função para verificar ganhador
    public static String VerificaGanhador(String[][] x, Integer j) {
        String[] Tab = new String[8];
        String Win = "null";

        /*Se jogadas = 9, vencedor é velha*/
        if(j == 9) {
            Win = "Velha";
        }

        //Linhas
        Tab[0] = x[0][0] + x[0][1] + x[0][2];
        Tab[1] = x[1][0] + x[1][1] + x[1][2];
        Tab[2] = x[2][0] + x[2][1] + x[2][2];

        //Colunas
        Tab[3] = x[0][0] + x[1][0] + x[2][0];
        Tab[4] = x[0][1] + x[1][1] + x[2][1];
        Tab[5] = x[0][2] + x[1][2] + x[2][2];

        //Diagonais
        Tab[6] = x[0][0] + x[1][1] + x[2][2];
        Tab[7] = x[0][2] + x[1][1] + x[2][0];

        /*Varrer o vetor Tab, procurando por sequencias iguais de X ou O*/
        for(int i = 0; i < Tab.length; i++) {
           /*Se padrao XXX for encontrado, vencedor = player 1*/
           if(Tab[i].equals("XXX")) {
               Win = "Player 1";
           /*Se padrao OOO for encontrado, vencedor = player 2*/
           } else if(Tab[i].equals("OOO")) {
               Win = "Player 2";
           }
        }
        /*Retorna o vencedor. Caso nao foram encontrados os padrões e tabuleiro cheio, velha.
         * se Nao foram encontrados os padroes e tabuleiro ainda vazio, nulo
         * Senao vencedor = player 1 ou player 2
         */
        return Win;
        }

    public static void main(String[] args) {
       String[][] Tabuleiro = new String[3][3];
       Integer Linha = 0;
       Integer Coluna = 0;
       Integer Valid = 0;
       Integer Jogadas = 0;

       Scanner in = new Scanner(System.in);

       //Inicializa o tabuleiro com "-"
       for(int i = 0; i < 3; i++){
           for(int x = 0; x < 3; x++){
               Tabuleiro[i][x] = "-";
           }
       }

       //Inicia as jogadas enquanto não houver ganhador
       while(true) { //Loop infinito
           //Inicializa e autentica jogada do jogador 1
           do {
                System.out.println("Jogador 1, vamos lá. Informe a linha: ");
                Linha = in.nextInt();

                while(Linha < 0 || Linha > 2) {
            System.out.println("Esta linha é inválida!.");
                    System.out.println("Jogador 1, vamos lá. Informe a linha: ");
                    Linha = in.nextInt();
                }

                System.out.println("Jogador 1, vamos lá. Informe a coluna: ");
                Coluna = in.nextInt();

                while(Coluna < 0 || Coluna > 2) {
                    System.out.println("Esta coluna é inválida!.");
                    System.out.println("Jogador 1, vamos lá. Informe a coluna: ");
                    Coluna = in.nextInt();
                }

                //Verificar se campo está vazio
                if(Tabuleiro[Linha][Coluna].equals("-")) {
                    Tabuleiro[Linha][Coluna] = "X";
                    Valid = 1;
                } else {
                    Valid = 0;
                    System.out.println("Jogada inválida. Tente novamente.");
        }

           } while(Valid == 0);

            //Verifica ganhador. Se não houver, jogador 2 joga
            Jogadas++;
            Valid = 0;
            MostraTabuleiro(Tabuleiro);

            if(!VerificaGanhador(Tabuleiro, Jogadas).equals("null")) {
                break;
            }


           //Inicializa e autentica jogada do jogador 2
           do {
                System.out.println("Jogador 2, vamos lá. Informe a linha: ");
                Linha = in.nextInt();

                while(Linha < 0 || Linha > 2) {
                    System.out.println("Esta linha é inválida!.");
                    System.out.println("Jogador 2, vamos lá. Informe a linha: ");
                    Linha = in.nextInt();
                }

                System.out.println("Jogador 2, vamos lá. Informe a coluna: ");
                Coluna = in.nextInt();

                while(Coluna < 0 || Coluna > 2) {
                    System.out.println("Esta coluna é inválida!.");
                    System.out.println("Jogador 2, vamos lá. Informe a coluna: ");
                    Coluna = in.nextInt();
                }

                //Verifica se campo está vazio
                if(Tabuleiro[Linha][Coluna].equals("-")) {
                    Tabuleiro[Linha][Coluna] = "O";
                    Valid = 1;
                } else {
                    Valid = 0;
                    System.out.println("Jogada inválida. Tente novamente.");
                }

             } while(Valid == 0);

            //Verifica ganhador. Se não houver, jogador 1 joga
            Valid = 0;
            MostraTabuleiro(Tabuleiro);
            Jogadas++;

            if(!VerificaGanhador(Tabuleiro, Jogadas).equals("null")) {
                break;
            }

    }
       //Finaliza e exibe vencedor
    System.out.println(VerificaGanhador(Tabuleiro, Jogadas) + " Vence!");
    }
}
Lembrando que o jogo não possui interface gráfica. Execute com o auxílio de um debugger. Bom proveito

1 comentários:

Anônimo disse...

muito bom esse jogo

Postar um comentário