Matriz

16 respostas
Ronald_lima

Olá Pessoal, sei q voces ja devem ter recebido centenas de pedidos sobre isso, mas sou mais um que naum estou conseguindo:
Estou realizando um projeto de jogo da velha, meu codigo esta me tirando do serio, gostaria de saber se voces poderiam me dizer o q devo fzr para melhorar e conseguir terminar esse meu codigo, ele não esta dando erro, mas tabm naum me da o resultado que quero!!!:

package JogoDaVelhaConsole;

import java.util.Scanner;
/**
 *
 * @author Ronald
 */
public class Jogo
{
    int armazenagemJog[][] = new int[3][3];//matriz que armazena os valores randomicos do Jogador
    public static void main(String argumentos[])
    {
        new Jogo().Imprimir();//Imprime as posições
        //new Jogo().PreencheJog();//Preenche com o computador Aleatoriamente
        new Jogo().selecionaJogada();//Preenche com o jogador que seleciona a posição que quer preencher
        new Jogo().ImprimirPreenchido();//Imprime as posições Corretas e preenchidas
    }
    public void Imprimir()//Imprime Toda
    {
        for(int j = 0; j < 3; j ++)
        {
            for (int k = 0; k < 3; k ++)
            {
                System.out.print("|" + j + k);
            }
            System.out.println();
        }
        System.out.println();
    }
    public void ImprimirPreenchido()//Imprime os valores da matriz
    {
        for(int j = 0; j < 3; j ++)
        {
            for (int k = 0; k < 3; k ++)
            {
                System.out.print("|" + armazenagemJog[j][k]);
            }
            System.out.println();
        }
    }

    public void PreencheJog()
    {
          int escolhaJogada = 0 + (int) (Math.random() * 8);//Recebe um valor aleatorio
          for(int k= 0; k < 3; k++)
          {
              for(int j = 0; j < 3; j ++)
              {
                  if(armazenagemJog[k][j] == escolhaJogada /*&& armazenagemComp[k][j] != Integer.parseInt(null) && armazenagemComp[k][j] != Integer.parseInt("X")*/)
                  {
                        armazenagemJog[k][j] = 2;//A posiçaõ que estiver recebe 0
                  }
              }
          }
    }
    public void selecionaJogada()//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");
          Scanner s = new Scanner(System.in);
          int valorDaVez = s.nextInt();
          for(int k = 0; k < 3; k++)
          {
              for(int j = 0; j < 3; j ++)
              {
                  if(armazenagemJog[k][j] == valorDaVez /*&& armazenagemComp[k][j] != Integer.parseInt(null) && armazenagemComp[k][j] != Integer.parseInt("X")*/)
                  {
                       armazenagemJog[k][j] = Integer.parseInt("X");//A posiçaõ que estiver recebe 0
                  }
              }
          }
    }
}

16 Respostas

robsonsm

para que serve esta linha??

armazenagemJog[k][j] = Integer.parseInt("X");

vc está tentando converter “X” para um tipo int ???

Ronald_lima

Pois eh, acho q devo ter feito caca no codigo todo!!rsrsr

eu queeria na realidade inserir o valor x na posição que o jogador tiver selecionado, e o mesmo com o computador, a posiçaõ que foi gerada randomicamente, eu queria inserir 0…

por favor me ajude!!!

robsonsm

este codigo tem varios problemas… outra coisa é q vc nao pode chamar os metodos criando sempre uma nova instancia dessa forma:

new Jogo().Imprimir(); new Jogo().selecionaJogada(); new Jogo().ImprimirPreenchido();

o correto seria assim:

Jogo jogo = new Jogo(); jogo.Imprimir(); jogo.selecionaJogada(); jogo.ImprimirPreenchido();

robsonsm

se vai misturar “X” e “O” na matriz, é melhor que ela seja uma matriz de String

String armazenagemJog[][] = new String[3][3];
Ronald_lima

Entendi, mas eu posso correr as posições com um int no for do msm jeito???

robsonsm

sim

robsonsm

no metodo imprimir é melhor inicializar os valores da matriz tbm ao inves de so exibir:

public void Imprimir()// Imprime Toda { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { armazenagemJog[k][j] = ""+k + j; System.out.print("|" + j + k); } System.out.println(); } System.out.println(); }

no metodo selecionaJogada vc pode receber uma string tbm

public void selecionaJogada() { System.out .println("Escolha uma das posições da matriz: 00, 01, 02, 10, 11, 12, 20, 21, 22"); Scanner s = new Scanner(System.in); String valorDaVez = s.next(); for (int k = 0; k < 3; k++) { for (int j = 0; j < 3; j++) { if (armazenagemJog[k][j].equals(valorDaVez) && !"X".equals(armazenagemJog[k][j]) && !"O".equals(armazenagemJog[k][j])) armazenagemJog[k][j] = "X"; } } }

Ronald_lima

o q significa !“0” ???

Diferente de zero???
obrigado novamente

andredemelo

Sim Ronald_lima,

o !“0” quer dizer diferente de 0.

robsonsm

Ronald_lima:
o q significa !“0” ???

Diferente de zero???
obrigado novamente

na verdade é um “O” (vogal)

achei que o computador iria jogar um “O” (vogal) em contra partida ao “X”

robsonsm

Vc teria que fazer com q o jogodor fique jogando ate acabar as posicoes da matriz.
O método PreencheJog() vc esta gerando um numero aleatorio de 0 a 8, acho q deveria ser um numero correspondente aos numeros da matriz, ou seja: 00,01,02,10,11,12,20,21,22
Teria q ter tbm um método para saber se alguem ganhou.

Ronald_lima

Ok obrigado, estouseguindo suas dicas, foram de muita valia…vlw msm

Ronald_lima

Olá Pessoal, consegui fazer algumas mudanças em meu codigo, porem ainda estou com erro na hora que o computador seleciona um valor random, pq ele nunca entra no if(acho que é porque ele verifica o numero random, ex: 0, com a posição que é 00, entao ele nunca entra, sera que voces poderiam me ajudar nesse ponto do numero randim? seegue codigo

package JogoDaVelha;

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();
        jo.Inicializar();
        jo.ProximaJogada();
    }
    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;
            }
        }
    }
    public void ImprimirPreenchido()//Imprime os valores da matriz
    {
        for(int j = 0; j < 3; j ++)
        {
            for (int k = 0; k < 3; k ++)
            {
                System.out.print("|" + armazenagemJog[j][k]);
            }
            System.out.println();
        }
        System.out.print("\n");
    }

    public void PreencheJogComputador()//Jogada do computador
    {
          String escolhaJogada = String.valueOf(0 + (int) (Math.random() * 8));//Recebe um valor aleatorio
          
          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 2
                        //ImprimirPreenchido();
                        //ProximaJogada();
                  }

              }
          }
   }
    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");
          Scanner s = new Scanner(System.in);
          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çaõ que estiver recebe X
                  }
              }
          }
    }
    public void ProximaJogada()
    {
        for(int i = 0; i < 9; i ++)
        {
            ImprimirPreenchido();
            selecionaJogadaJogador();//Preenche com o jogador que seleciona a posição que quer preencher
            PreencheJogComputador();
        }

    }
}
robsonsm
me parece q os numeros aleatorios q vc precisa gerar na verdade são as strings da matiz, ou seja 00,01,02,10,11,12,20,21,22 vou sugerir q coloque um metodo para gerar estes valores
private String geraNumero() {
		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();
		}
	}
no metodo PreencheJogComputador() chame este metodo e recomendo tbm que coloque o for dentro de um while com um flag:
public void PreencheJogComputador() {
		boolean flag = false;
		while(!flag) {
			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";
						flag = true;
					}
	
				}
			}
		}
	}

o while e o flag é para q o computador gere outro numero caso o numero sorteado se repita, evitando que o computador fique sem jogar.

Ronald_lima

Muito Obrigado, vou seguir sua dica…abrçs

Ronald_lima

Nuss…exatamente o q eu precisava de uma forma facil e rapida…vlw msm robson!!!

Criado 30 de setembro de 2010
Ultima resposta 2 de out. de 2010
Respostas 16
Participantes 3