Ajuda com Jogo da Velha

Olá Galera

Sou noob em java, e preciso de uma grande ajuda de vocês. Eu sempre dou uma olhada por aqui, mesmo não participando estou sempre olhando os tópicos.

Tenho que fazer um jogo da velha em Java, e tem uma restrição, não pode haver comparações de valores fixos, por ex:

MAT[0][0]; MAT[0][1];

Eu ví vários outros tópicos e maneiras de fazer o jogo da velha, mas eu gostaria muito de terminar esse código que comecei.

Deêm uma olhada:


package JogoDaVelha;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


   public class Principal {
      

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


      String[][] posicao = {{"","",""},
                            {"","",""},
                            {"","",""}};

      
      BufferedReader escolhas = new BufferedReader( new InputStreamReader(System.in));

      int jogadas = 0;
      while(jogadas < 5){      

          int contadorAuxiliar = 1;
          InicioJogada:
          while (contadorAuxiliar > 0){

          System.out.println("Digite a casa que deseja jogar: ");
          
          String escolhaDoJogador = escolhas.readLine();

          int jogada = Integer.parseInt(escolhaDoJogador);

          switch(jogada) {
                case 1:
                    if(posicao[0][0].equals("")){
                        posicao[0][0] = "O";
                        contadorAuxiliar = -1;
                        continue;

                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                        contadorAuxiliar = 1;
                        break InicioJogada;
                    }
                case 2:
                    if(posicao[0][1].equals("")){
                        posicao[0][1] = "O";
                        contadorAuxiliar = -1;
                        continue;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                        contadorAuxiliar = 1;
                        break InicioJogada;
                    }
                 case 3:
                    if(posicao[0][2].equals("")){
                        posicao[0][2] = "O";
                        contadorAuxiliar = -1;
                        continue;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                        contadorAuxiliar = 1;
                        break InicioJogada;
                    }
                 case 4:
                    if(posicao[1][0].equals("")){
                        posicao[1][0] = "O";
                        contadorAuxiliar = 1;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                    }
                    break;
                 case 5:
                    if(posicao[1][1].equals("")){
                        posicao[1][1] = "O";
                        contadorAuxiliar = 1;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                    }
                    break;
                 case 6:
                    if(posicao[1][2].equals("")){
                        posicao[1][2] = "O";
                        contadorAuxiliar = 1;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                    }
                    break;
                 case 7:
                    if(posicao[2][0].equals("")){
                        posicao[2][0] = "O";
                        contadorAuxiliar = 1;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                    }
                    break;
                 case 8:
                    if(posicao[2][1].equals("")){
                        posicao[2][1] = "O";
                        contadorAuxiliar = 1;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                    }
                    break;
                 case 9:
                    if(posicao[2][2].equals("")){
                        posicao[2][2] = "O";
                        contadorAuxiliar = 1;
                    }
                    else {
                        System.out.println("Jogada Inválida, jogue novamente!");
                    }
                    break;
            }

          }
         
         if(posicao[0][0].equals("")){
             posicao[0][0] = "X";
         }
         else if(posicao[0][1].equals("")){
             posicao[0][1] = "X";
         }
          else if(posicao[0][2].equals("")){
             posicao[0][2] = "X";
         }
          else if(posicao[1][0].equals("")){
             posicao[1][0] = "X";
         }
          else if(posicao[1][1].equals("")){
             posicao[1][1] = "X";
         }
          else if(posicao[1][2].equals("")){
             posicao[1][2] = "X";
         }
          else if(posicao[2][0].equals("")){
             posicao[2][0] = "X";
         }
          else if(posicao[2][1].equals("")){
             posicao[2][1] = "X";
         }
          else if(posicao[2][2].equals("")){
             posicao[2][2] = "X";
         }
          
          System.out.print(posicao[0][0]);
          System.out.print("|" + posicao[0][1]);
          System.out.println("|" + posicao[0][2]);

          System.out.print(posicao[1][0]);
          System.out.print("|" + posicao[1][1]);
          System.out.println("|" + posicao[1][2]);

          System.out.print(posicao[2][0]);
          System.out.print("|" + posicao[2][1]);
          System.out.println("|" + posicao[2][2]);

          if (posicao[0][0].equals("O") && posicao[0][1].equals("O") && posicao[0][2].equals("O")){
                   System.out.println("Você é o vencedor!");
          }
          else if (posicao[1][0].equals("O") && posicao[1][1].equals("O") && posicao[1][2].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[2][0].equals("O") && posicao[2][1].equals("O") && posicao[2][2].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[0][0].equals("O") && posicao[1][0].equals("O") && posicao[2][0].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[0][1].equals("O") && posicao[1][1].equals("O") && posicao[2][1].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[0][2].equals("O") && posicao[1][2].equals("O") && posicao[2][2].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[0][0].equals("O") && posicao[1][1].equals("O") && posicao[2][2].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[2][0].equals("O") && posicao[1][1].equals("O") && posicao[0][2].equals("O")){
               System.out.println("Você é o vencedor!");
          }
          else if (posicao[0][0].equals("X") && posicao[0][1].equals("X") && posicao[0][2].equals("X")){
                   System.out.println("Você Perdeu!");
          }
          else if (posicao[1][0].equals("X") && posicao[1][1].equals("X") && posicao[1][2].equals("X")){
               System.out.println("Você Perdeu!");
          }
          else if (posicao[2][0].equals("X") && posicao[2][1].equals("X") && posicao[2][2].equals("X")){
               System.out.println("Você Perdeu!");
          }
          else if (posicao[0][0].equals("X") && posicao[1][0].equals("X") && posicao[2][0].equals("X")){
               System.out.println("Você Perdeu!");
          }
          else if (posicao[0][1].equals("X") && posicao[1][1].equals("X") && posicao[2][1].equals("X")){
               System.out.println("Você Perdeu!");
          }
          else if (posicao[0][2].equals("X") && posicao[1][2].equals("X") && posicao[2][2].equals("X")){
               System.out.println("Você Perdeu!");
          }
          else if (posicao[0][0].equals("X") && posicao[1][1].equals("X") && posicao[2][2].equals("X")){
               System.out.println("Você Perdeu!");
          }
          else if (posicao[2][0].equals("X") && posicao[1][1].equals("X") && posicao[0][2].equals("X")){
               System.out.println("Você Perdeu!");
          }

          jogadas++;

       }

      

      }

          
      }

Aguardo uma resposta!
At. Felipe

Bom segue abaixo o códogo de um jogo da velha quase pronto falta só a condição de saída para quem ganhar, mas ta bem simples o seu axei muito complexo grande d+ quando tiver program,]ando tente cada vez verificar o seu código e tentar fazer cada vez menor

[code]
package jogodavelha;

import java.util.Scanner;

public class Principal {

public static void main(String[] args) {

	String[][] posicao = { { " ", " ", " " }, { " ", " ", " " },
			{ " ", " ", " " } };

	String escolha;
	int jogadas = 0;
	int l = 0;
	int c = 0;
	Scanner io = new Scanner(System.in);
	System.out.println("Digite {X ou O}: ");
	escolha = io.next();

	do {

		System.out.print(posicao[0][0] + "|");
		System.out.print(posicao[0][1] + "|");
		System.out.print(posicao[0][2]);
		System.out.println();
		System.out.print(posicao[1][0] + "|");
		System.out.print(posicao[1][1] + "|");
		System.out.print(posicao[1][2]);
		System.out.println();
		System.out.print(posicao[2][0] + "|");
		System.out.print(posicao[2][1] + "|");
		System.out.print(posicao[2][2]);
		System.out.println();

		System.out.println("Linha:");

		l = io.nextInt();

		System.out.println("Coluna:");

		c = io.nextInt();

		if (posicao[l][c].equals(" ")) {
			posicao[l][c] = escolha;

			if (escolha.equals("O")) {
				escolha = "X";
			} else {
				escolha = "O";
			}

			jogadas++;
		} else {
			System.out.println("posicao não vazia");
		}

	} while (jogadas < 9);

}

}[/code]

Bom… Eu não entendi o que você quis dizer com ‘valores fixos’. Presumo que você não pode comparar item a item (0,0 com 0,1, com 0,2 e por aí vai). Você deve usar índices para isso. Dê uma pesquisada sobre estruturas de repetição (pro seu caso, eu indico for). E faça, primeiro, para uma matriz 2x2. Depois você aumenta pra 3x3 e depois pra zxz. O princípio do 100x100 é o mesmo de 2x2.

Se alguém digita qualquer coisa que não for número ele cospe uma exception, certo?

Coloquei um tratamento de erro, veja:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class JogoDaVelha {

	public static void main(String[] args) throws IOException {
		String[][] posicao = { { "", "", "" }, { "", "", "" }, { "", "", "" } };
		try{
		BufferedReader escolhas = new BufferedReader(new InputStreamReader(System.in));
		int jogadas = 0;
		while (jogadas < 5) {
			int contadorAuxiliar = 1;
			InicioJogada: while (contadorAuxiliar > 0) {
				System.out.println("Digite a casa que deseja jogar: ");
				String escolhaDoJogador = escolhas.readLine();
				int jogada = Integer.parseInt(escolhaDoJogador);

				switch (jogada) {
				case 1:
					if (posicao[0][0].equals("")) {
						posicao[0][0] = "O";
						contadorAuxiliar = -1;
						continue;

					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
						contadorAuxiliar = 1;
						break InicioJogada;
					}
				case 2:
					if (posicao[0][1].equals("")) {
						posicao[0][1] = "O";
						contadorAuxiliar = -1;
						continue;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
						contadorAuxiliar = 1;
						break InicioJogada;
					}
				case 3:
					if (posicao[0][2].equals("")) {
						posicao[0][2] = "O";
						contadorAuxiliar = -1;
						continue;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
						contadorAuxiliar = 1;
						break InicioJogada;
					}
				case 4:
					if (posicao[1][0].equals("")) {
						posicao[1][0] = "O";
						contadorAuxiliar = 1;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
					}
					break;
				case 5:
					if (posicao[1][1].equals("")) {
						posicao[1][1] = "O";
						contadorAuxiliar = 1;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
					}
					break;
				case 6:
					if (posicao[1][2].equals("")) {
						posicao[1][2] = "O";
						contadorAuxiliar = 1;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
					}
					break;
				case 7:
					if (posicao[2][0].equals("")) {
						posicao[2][0] = "O";
						contadorAuxiliar = 1;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
					}
					break;
				case 8:
					if (posicao[2][1].equals("")) {
						posicao[2][1] = "O";
						contadorAuxiliar = 1;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
					}
					break;
				case 9:
					if (posicao[2][2].equals("")) {
						posicao[2][2] = "O";
						contadorAuxiliar = 1;
					} else {
						System.out.println("Jogada Inválida, jogue novamente!");
					}
					break;
				}

			}

			if (posicao[0][0].equals("")) {
				posicao[0][0] = "X";
			} else if (posicao[0][1].equals("")) {
				posicao[0][1] = "X";
			} else if (posicao[0][2].equals("")) {
				posicao[0][2] = "X";
			} else if (posicao[1][0].equals("")) {
				posicao[1][0] = "X";
			} else if (posicao[1][1].equals("")) {
				posicao[1][1] = "X";
			} else if (posicao[1][2].equals("")) {
				posicao[1][2] = "X";
			} else if (posicao[2][0].equals("")) {
				posicao[2][0] = "X";
			} else if (posicao[2][1].equals("")) {
				posicao[2][1] = "X";
			} else if (posicao[2][2].equals("")) {
				posicao[2][2] = "X";
			}

			System.out.print(posicao[0][0]);
			System.out.print("|" + posicao[0][1]);
			System.out.println("|" + posicao[0][2]);

			System.out.print(posicao[1][0]);
			System.out.print("|" + posicao[1][1]);
			System.out.println("|" + posicao[1][2]);

			System.out.print(posicao[2][0]);
			System.out.print("|" + posicao[2][1]);
			System.out.println("|" + posicao[2][2]);

			if (posicao[0][0].equals("O") && posicao[0][1].equals("O")
					&& posicao[0][2].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[1][0].equals("O") && posicao[1][1].equals("O")
					&& posicao[1][2].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[2][0].equals("O") && posicao[2][1].equals("O")
					&& posicao[2][2].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[0][0].equals("O") && posicao[1][0].equals("O")
					&& posicao[2][0].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[0][1].equals("O") && posicao[1][1].equals("O")
					&& posicao[2][1].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[0][2].equals("O") && posicao[1][2].equals("O")
					&& posicao[2][2].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[0][0].equals("O") && posicao[1][1].equals("O")
					&& posicao[2][2].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[2][0].equals("O") && posicao[1][1].equals("O")
					&& posicao[0][2].equals("O")) {
				System.out.println("Você é o vencedor!");
			} else if (posicao[0][0].equals("X") && posicao[0][1].equals("X")
					&& posicao[0][2].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[1][0].equals("X") && posicao[1][1].equals("X")
					&& posicao[1][2].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[2][0].equals("X") && posicao[2][1].equals("X")
					&& posicao[2][2].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[0][0].equals("X") && posicao[1][0].equals("X")
					&& posicao[2][0].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[0][1].equals("X") && posicao[1][1].equals("X")
					&& posicao[2][1].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[0][2].equals("X") && posicao[1][2].equals("X")
					&& posicao[2][2].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[0][0].equals("X") && posicao[1][1].equals("X")
					&& posicao[2][2].equals("X")) {
				System.out.println("Você Perdeu!");
			} else if (posicao[2][0].equals("X") && posicao[1][1].equals("X")
					&& posicao[0][2].equals("X")) {
				System.out.println("Você Perdeu!");
			}

			jogadas++;

		}

	
	}catch(IllegalArgumentException e){
		System.out.println("O valor digitado não é permitido! Digite apenas números!");
	}
	}}

E, assim como respondí seu tópico no JavaFree, não entendí a lógica do seu programinha…

Abraço,
AS

Gente do céu. Quanto código! Dá p/ simplificar MUITA coisa.
Vou fazer algo aqui…

Bem, hehe, não ficou mais simples, mas ficou mais genérico :smiley:

[code]package jogovelha;

import java.util.Random;

/**
*

  • @author David Buzatto
    */
    public class JogoVelha {

    public static final String X = “X”;
    public static final String O = “O”;

    private String[][] tabuleiro;
    private String vezDe;
    private int tamanhoTabuleiro;

    public JogoVelha( int tamanhoTabuleiro ) {
    novoJogo( tamanhoTabuleiro );
    }

    public boolean jogar( int linha, int coluna ) {

     if ( tabuleiro[linha][coluna] == null ) {
    
         tabuleiro[linha][coluna] = vezDe;
    
         if ( vezDe.equals( X ) ) {
             vezDe = O;
         } else {
             vezDe = X;
         }
    
         return true;
    
     } else {
         return false;
     }
    

    }

    public String quemGanhou() {

     String quemGanhou = null;
    
     quemGanhou = analizarLinhas();
     if ( quemGanhou != null ) {
         return quemGanhou;
     }
    
     quemGanhou = analizarColunas();
     if ( quemGanhou != null ) {
         return quemGanhou;
     }
    
     quemGanhou = analizarDiagonais();
     if ( quemGanhou != null ) {
         return quemGanhou;
     }
    
     return quemGanhou;
    

    }

    private String analizarLinhas() {

     String quemGanhou = null;
    
     for ( int i = 0; i < tamanhoTabuleiro; i++ ) {
         quemGanhou = analizarLinha( i );
         if ( quemGanhou != null ) {
             break;
         }
     }
    
     return quemGanhou;
    

    }

    private String analizarLinha( int linha ) {

     int qX = 0;
     int qO = 0;
    
     for ( int i = 0; i < tamanhoTabuleiro; i++ ) {
    
         String valor = tabuleiro[linha][i];
    
         if ( valor != null ) {
             if ( valor.equals( X ) ) {
                 qX++;
             } else {
                 qO++;
             }
         }
    
     }
    
     if ( qX == tamanhoTabuleiro ) {
         return X;
     }
    
     if ( qO == tamanhoTabuleiro ) {
         return O;
     }
    
     return null;
    

    }

    private String analizarColunas() {

     String quemGanhou = null;
    
     for ( int i = 0; i < tamanhoTabuleiro; i++ ) {
         quemGanhou = analizarColuna( i );
         if ( quemGanhou != null ) {
             break;
         }
     }
    
     return quemGanhou;
    

    }

    private String analizarColuna( int coluna ) {

     int qX = 0;
     int qO = 0;
    
     for ( int i = 0; i < tamanhoTabuleiro; i++ ) {
    
         String valor = tabuleiro[i][coluna];
    
         if ( valor != null ) {
             if ( valor.equals( X ) ) {
                 qX++;
             } else {
                 qO++;
             }
         }
    
     }
    
     if ( qX == tamanhoTabuleiro ) {
         return X;
     }
    
     if ( qO == tamanhoTabuleiro ) {
         return O;
     }
    
     return null;
    

    }

    private String analizarDiagonal( boolean principal ) {

     int qX = 0;
     int qO = 0;
    
     for ( int i = 0; i < tamanhoTabuleiro; i++ ) {
    
         String valor = null;
    
         if ( principal )
             valor = tabuleiro[i][i];
         else
             valor = tabuleiro[tamanhoTabuleiro - 1 - i][i];
    
         if ( valor != null ) {
             if ( valor.equals( X ) ) {
                 qX++;
             } else {
                 qO++;
             }
         }
    
     }
    
     if ( qX == tamanhoTabuleiro ) {
         return X;
     }
    
     if ( qO == tamanhoTabuleiro ) {
         return O;
     }
    
     return null;
    

    }

    private String analizarDiagonais() {

     String quemGanhou = analizarDiagonal( true );
     if ( quemGanhou != null ) {
         return quemGanhou;
     }
    
     quemGanhou = analizarDiagonal( false );
     if ( quemGanhou != null ) {
         return quemGanhou;
     }
    
     return null;
    

    }

    public boolean empatou() {

     for ( String[] linha : tabuleiro ) {
         for ( String item : linha ) {
             if ( item == null ) {
                 return false;
             }
         }
     }
    
     return true;
    

    }

    public String getVezDe() {
    return vezDe;
    }

    public void novoJogo( int tamanhoTabuleiro ) {
    this.tamanhoTabuleiro = tamanhoTabuleiro;
    tabuleiro = new String[tamanhoTabuleiro][tamanhoTabuleiro];
    vezDe = new Random().nextInt( 2 ) == 1 ? X : O;
    }

    public void mostrarTabuleiro() {
    for ( String[] linha : tabuleiro ) {
    for ( String item : linha ) {
    System.out.print(
    “[” +
    ( item == null ? " " : item ) +
    "] " );
    }
    System.out.println();
    }
    }

}[/code]

[code]package jogovelha;

import java.util.Scanner;

/**
*

  • @author David Buzatto
    */
    public class Main {

    public static void main(String[] args) {

     int tamanhoTabuleiro = 3;
     JogoVelha jogo = null;
    
     Scanner s = new Scanner( System.in );
     boolean continuar = true;
    
     while ( continuar ) {
    
         jogo = new JogoVelha( tamanhoTabuleiro );
    
         String quemGanhou = null;
         boolean empatou = false;
    
         while ( quemGanhou == null && !empatou ) {
    
             boolean jogadaOk = false;
    
             while ( !jogadaOk ) {
    
                 int linha = 0;
                 int coluna = 0;
    
                 System.out.printf( "Jogador %s, faça sua jogada!\n", jogo.getVezDe() );
                 
                 System.out.print( "Linha: " );
                 linha = s.nextInt();
                 linha--;
    
                 System.out.print( "Coluna: " );
                 coluna = s.nextInt();
                 coluna--;
    
                 System.out.println();
    
                 if ( !( linha >= 0 && linha < tamanhoTabuleiro &&
                          coluna >= 0 && coluna < tamanhoTabuleiro ) ) {
    
                     System.out.println( "Valor incorreto para linha ou coluna...\n"
                             + "Jogue novamente!" );
                     System.out.println();
                     continue;
                     
                 }
    
                 jogadaOk = jogo.jogar( linha, coluna );
    
                 if ( !jogadaOk ) {
                     System.out.println( "Esta posição já foi escolhida!" );
                     System.out.println();
                 }
    
             }
    
             System.out.println( "Tabuleiro:" );
             jogo.mostrarTabuleiro();
             System.out.println();
    
             quemGanhou = jogo.quemGanhou();
             empatou = jogo.empatou();
    
         }
    
         if ( quemGanhou != null ) {
             System.out.printf( "Parabéns Jogador %s, você ganhou!\n\n", quemGanhou );
         } else if ( empatou ) {
             System.out.println( "O Jogo empatou!\n" );
         }
    
         System.out.print( "Deseja jogar de novo? [1] Sim - [2] Não: " );
         continuar = s.nextInt() == 1 ? true : false;
         System.out.println();
    
     }
    

    }

}[/code]

Hehe, Vlw Galera.

O código tá mto bagunçado mesmo, comecei a fazer bem rápido, e sem recursos, para apresentar, e além disso estou começando também.

Agradeço a ajuda, vou dar uma testada aqui e daqui a poco posto de novo.

Abraço!