Final Jogo Da Velha

4 respostas
Ronald_lima

Olá Novamente pessoal, depois de algum tempo, finalmente estou chegando ao final de meu jogo da velha, porem ainda tem um pqueno problema, gostaria de saber se algum pode me ajudar:

Meu código preenche tudo certo o do jogador e do omputador,porém o do computador ele verifica se a posição ja foi preenchida e preenche outra, ja o jogador não consegue selecionar outra opção se acaso ele digitar a msm duas vzs, ele trava e fica assim o jogo, tentei mas naum consegui, sera q vcs poderiam me ajudar:???

package JogoDaVelhaConsole;

import java.util.Random;
import java.util.Scanner;
/**
 * @author Ronald
 */
public class Jogo
{
    String armazenagemJog[][] = new String[3][3];//matriz que armazena os valores randomicos do Jogador
    public static void main(String argumentos[])
    {
        Jogo jo = new Jogo();//Novo Objeto dessa mesma classe
        jo.Inicializar();//Inicializa a matrriz
        jo.ProximaJogada();//Chama o método Proxima jogada, que faz as verificações
    }
    public void Inicializar()//Inicializa a matriz
    {
        for(int j = 0; j < 3; j ++)
        {
            for (int k = 0; k < 3; k ++)
            {
                armazenagemJog[j][k] = "" + j + k;//Concatenação da primeira com a segunda posição
            }
        }
    }
    public void ImprimirPreenchido()//Imprime os valores da matriz
    {

        for(int j = 0; j < 3; j ++)
        {
             System.out.print("\t\t\t\t\t");
            for (int k = 0; k < 3; k ++)
            {
                System.out.print("|" + armazenagemJog[j][k]);//Imprime todas as posições
            }
            System.out.println();
        }
        System.out.print("\n");
    }
    public String geraNumero()//Gera um numero randomico para o computador
    {
        Random aleatorio = new Random();
        switch(aleatorio.nextInt(8))
        {
            case 0: return "00";
            case 1: return "01";
            case 2: return "02";
            case 3: return "10";
            case 4: return "11";
            case 5: return "12";
            case 6: return "20";
            case 7: return "21";
            case 8: return "22";
            default: return geraNumero();
        }
    }
    public void PreencheJogComputador()//Jogada do computador
    {
        boolean ver = false;
        while(!ver)//Evita que o computador fique sem jogar
        {
            String escolhaJogada = geraNumero();
            for(int j= 0; j < 3; j++)
            {
                for(int k = 0; k < 3; k ++)
                {
                    if(armazenagemJog[j][k].equals(escolhaJogada)  && !"O".equals(armazenagemJog[j][k])&& !"X".equals(armazenagemJog[j][k]))
                    {
                            armazenagemJog[j][k] = "O";//A posiçaõ que estiver recebe O
                            ver = true;
                    }

                }
            }
        }

   }
    public void selecionaJogadaJogador()//Jogador Seleciona Posicao que quer Jogar
    {
          System.out.println("Escolha uma das posições da matriz: 00, 01, 02, 10, 11, 12, 20, 21, 22");
          System.out.println("Com Exceção das posições já marcadas\n");
          System.out.print("O valor inserido foi :");
          Scanner s = new Scanner(System.in);//Recebe um valor do teclado
          String valorDaVez = s.next();
          boolean ver = false;
          while(!ver)
          {
            for(int j = 0; j < 3; j++)
            {
                for(int k = 0; k < 3; k ++)
                {
                    if(armazenagemJog[j][k].equals(valorDaVez)  && !"X".equals(armazenagemJog[j][k]) && !"O".equals(armazenagemJog[j][k]))
                    {
                        armazenagemJog[j][k] = "X";//A posição que estiver recebe X
                        ver = true;
                    }
                }
            }
          }
    }
    public void ProximaJogada()//É chamado no main
    {
        for(int i = 0; i < 10; i ++)
        {
            ImprimirPreenchido();//Imprime as posições
            VerificaG();//Verifica ganhador
            selecionaJogadaJogador();//Preenche com o jogador que seleciona a posição que quer preencher
            VerificaG();
            PreencheJogComputador();//Recebe algum valor randomico

        }

    }
    public void VerificaG()//Verifica se jogo acabou
    {
        if( armazenagemJog[0][0].equals( armazenagemJog[0][1]) &&  armazenagemJog[0][1].equals( armazenagemJog[0][2]) && ! armazenagemJog[0][0].equals(""))
        {
            System.out.println("\nO jogo acabou!\n");
            ImprimirPreenchido();
            System.exit(0);
        }
        else if( armazenagemJog[1][0].equals( armazenagemJog[1][1]) &&  armazenagemJog[1][1].equals( armazenagemJog[1][2]) && ! armazenagemJog[1][0].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
        else if( armazenagemJog[2][0].equals( armazenagemJog[2][1]) &&  armazenagemJog[2][1].equals( armazenagemJog[2][2]) && ! armazenagemJog[2][0].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
        /*Verifica colunas*/
        else if( armazenagemJog[0][0].equals( armazenagemJog[1][0]) &&  armazenagemJog[1][0].equals( armazenagemJog[2][0]) && ! armazenagemJog[0][0].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
        else if( armazenagemJog[0][1].equals( armazenagemJog[1][1]) &&  armazenagemJog[1][1].equals( armazenagemJog[2][1]) && ! armazenagemJog[0][1].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
        else if( armazenagemJog[0][2].equals( armazenagemJog[1][2]) &&  armazenagemJog[1][2].equals( armazenagemJog[2][2]) && ! armazenagemJog[0][2].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
        /*Verifica diagonais*/
        else if( armazenagemJog[0][0].equals( armazenagemJog[1][1]) &&  armazenagemJog[1][1].equals( armazenagemJog[2][2]) && ! armazenagemJog[0][0].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
        else if( armazenagemJog[2][0].equals( armazenagemJog[0][2]) &&  armazenagemJog[0][2].equals( armazenagemJog[1][1]) && ! armazenagemJog[2][0].equals(""))
        {
            System.out.println("O jogo acabou!");
            ImprimirPreenchido();
            System.exit(0);
        }
    }

}

4 Respostas

Lucas_Rinaldi

public void selecionaJogadaJogador()//Jogador Seleciona Posicao que quer Jogar { System.out.println("Escolha uma das posições da matriz: 00, 01, 02, 10, 11, 12, 20, 21, 22"); System.out.println("Com Exceção das posições já marcadas\n"); Scanner s = new Scanner(System.in);//Recebe um valor do teclado //System.out.print("O valor inserido foi :"); ... Ao invés de inserir esses dois comandos aqui... //String valorDaVez = s.next(); .... Insira dentro do while... boolean ver = false; while (!ver) { System.out.print("O valor inserido foi :"); String valorDaVez = s.next(); for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { if (armazenagemJog[j][k].equals(valorDaVez) && !"X".equals(armazenagemJog[j][k]) && !"O".equals(armazenagemJog[j][k])) { armazenagemJog[j][k] = "X";//A posição que estiver recebe X ver = true; } } } } }

Pronto, testa, eu penso que agora irá funcionar. Boa implementação!
Abraços

C

Você tem que alterar o seguinte método:

public void selecionaJogadaJogador()// Jogador Seleciona Posicao que quer
										// Jogar
	{
		Boolean posRepetida;
		do {
			posRepetida = false;
			System.out
					.println("Escolha uma das posições da matriz: 00, 01, 02, 10, 11, 12, 20, 21, 22");
			System.out.println("Com Exceção das posições já marcadas\n");
			System.out.print("O valor inserido foi :");
			Scanner s = new Scanner(System.in);// Recebe um valor do teclado
			String valorDaVez = s.next();
			if (!"X".equals(armazenagemJog[Integer.parseInt(""
					+ valorDaVez.charAt(0))][Integer.parseInt(""
					+ valorDaVez.charAt(1))])
					&& !"O".equals(armazenagemJog[Integer.parseInt(""
							+ valorDaVez.charAt(0))][Integer.parseInt(""
							+ valorDaVez.charAt(1))])) {
				armazenagemJog[Integer.parseInt("" + valorDaVez.charAt(0))][Integer
						.parseInt("" + valorDaVez.charAt(1))] = "X";// A posição que estiver recebe X
			}else{
				System.out.println("Posição preenchida!\nEscolha outra posição");
				posRepetida = true;
			}
		} while (posRepetida);
	}

Não entendi o porque você usou o FOR nesse método.

Do jeito que eu escrevi, o sistema vai ficar repetindo até que o usuário escolha uma posição válida.

Ronald_lima

Caraka, parece tão simples e eu nem pensei em nd parecido…rsrsrs

Vlw msm lucas…Abrçs…

Flw

Ronald_lima

Obrigado Aos dois!!!

Criado 5 de outubro de 2010
Ultima resposta 5 de out. de 2010
Respostas 4
Participantes 3