importjava.util.*;importjavax.swing.*;publicclassJogoVelha{publicstaticvoidmain(String[]args){JogoiniciaJogo=newJogo();System.out.println("***Jogo da Velha***");Stringa=JOptionPane.showInputDialog("Entre com o nome do jogador1: ");Stringb=JOptionPane.showInputDialog("Entre com o nome do jogador2: ");Stringjogador1=a;Stringjogador2=b;System.out.println("Jogador 1: "+a);System.out.println("Jogador 2: "+b);Tabuleiro.imprimir();iniciaJogo.jogar();classTabuleiro{Stringp1,p2,p3,p4,p5,p6,p7,p8,p9;voidimprimir(){System.out.println(p1+p2+p3);System.out.println(p4+p5+p6);System.out.println(p7+p8+p9);}}classJogo{TabuleiroT=newTabuleiro();voidjogar(){Stringp=JOptionPane.showInputDialog("Qual a sua posição? ");intx=Integer.parseInt(p);switch(x){case1:System.out.println("x"+T.p2+T.p3);break;case2:System.out.println(T.p1+"x"+T.p3);break;case3:System.out.println(T.p1+T.p2+"x");break;case4:System.out.println("x"+T.p5+T.p6);break;case5:System.out.println(T.p4+"x"+T.p6);break;case6:System.out.println(T.p4+T.p5+"x");break;case7:System.out.println("x"+T.p8+T.p9);break;case8:System.out.println(T.p7+"x"+T.p9);break;case9:System.out.println(T.p7+T.p8+"x");break;}}}classJogador{Stringnome;Stringsimb;Jogoj;}}}
compila normal, mais meu switch na linha 35 não imprime o que eu to pedindo..
Você mostra p1 (por exemplo) mas quem é que põe um valor dentro de p1?
Não se esqueça de duas leis fundamentais da informática:
a) Entrou lixo, saiu lixo (mais conhecida por “garbage in, garbage out” ou GIGO)
b) Não espere que saia alguma coisa de um programa quando você não entrou com dados nele.
L
lucasstoffel
Entendi mais ou menos, mas o que eu devo fazer pra por o valor em p1?
E
entanglement
Eu que vou fazer a pergunta.
p1, p2, p3. … .p9 são strings que contém que tipos de valores? “O”, “X”, " " ???
Para atribuir um valor a p1, obviamente você usa algo como:
T.p1="aquilo que você queria pôr dentro de p1";
Mas onde no seu código você põe a atribuição é por sua conta.
L
lucasstoffel
Na verdade o programa executaria assim
Se o usuario digitar 8 aparece
_ x _
mas não to conseguindo fazer isso acontecer.
max.analista
Meu amigo, primeiro, atribua a suas variaveis String do tabuleiro a forma padrão dele. Ou seja, para cada uma das 9 variaveis de posição que você criou, faça receber a string "_ ".
Aqui funcionou perfeitamente, no entanto, vejo a falta de um Loop para alternar entre jogador 1 e 2 e até que finalize o jogo, falta condições para verificar a situação do jogo(ganhou? perdeu? possui mais jogadas?).
max.analista
Lembrando também que, a função de imprimir está na classe Tabuleiro e não no jogo. Então tire a ideia de querer imprimir o Tabuleiro pela classe Jogo. A lógica é a seguinte: Dentro de cada CASE do Switch, você ao contrario de imprimir, você vai atribuir a sua posição do tabuleiro a string "x ".
Ex:
switch (x) {
case 1:
T.p1="x ";
//System.out.println("x" + T.p2 + T.p3);
break;
case 2 :
T.p2="x ";
//System.out.println(T.p1 + "x" + T.p3);
break;
case 3 :
T.p3="x ";
//System.out.println(T.p1 + T.p2 + "x");
break;
...
}
T.imprimir();
Caso nao tenha entendido, falaí Abraço
L
lucasstoffel
Entendi sim , eu acho…
Vou tentar fazer isso, qualquer dúvida eu posto aqui (:
L
lucasstoffel
Isso ta certo?
importjava.util.*;importjavax.swing.*;publicclassJogoVelha{publicstaticvoidmain(String[]args){JogoiniciaJogo=newJogo();System.out.println("***Jogo da Velha***");Stringa=JOptionPane.showInputDialog("Entre com o nome do jogador1: ");Stringb=JOptionPane.showInputDialog("Entre com o nome do jogador2: ");Stringjogador1=a;Stringjogador2=b;System.out.println("Jogador 1: "+a);System.out.println("Jogador 2: "+b);Tabuleiro.imprimir();classTabuleiro{Stringp1,p2,p3,p4,p5,p6,p7,p8,p9;voidimprimir(){System.out.println(p1+p2+p3);System.out.println(p4+p5+p6);System.out.println(p7+p8+p9);Stringp=JOptionPane.showInputDialog("Qual a sua posição? ");intx=Integer.parseInt(p);switch(x){case1:p1="x ";break;case2:p2="x ";break;case3:p3="x ";break;case4:p4="x ";break;case5:p5="x ";break;case6:p6="x ";break;case7:p7="x ";break;case8:p8="x ";break;case9:p9="x ";break;}}}classJogo{}classJogador{Stringnome;Stringsimb;Jogoj;}}}
Quando eu compilo a linha 29 não aparece na execução do programa.
max.analista
Você está declarando classe dentro de classe.
Feche as classes com o
}
e observe a classe JOGO.
Faça um comparativo do primeiro código apresentado aqui com este:
publicclassJogoVelha{publicstaticvoidmain(String[]args){JogoiniciaJogo=newJogo();System.out.println("***Jogo da Velha***");Stringa=JOptionPane.showInputDialog("Entre com o nome do jogador1: ");Stringb=JOptionPane.showInputDialog("Entre com o nome do jogador2: ");Stringjogador1=a;Stringjogador2=b;System.out.println("Jogador 1: "+a);System.out.println("Jogador 2: "+b);newTabuleiro().imprimir();iniciaJogo.jogar();}}classTabuleiro{Stringp1="_ ",p2="_ ",p3="_ ",p4="_ ",p5="_ ",p6="_ ",p7="_ ",p8="_ ",p9="_ ";publicvoidimprimir(){System.out.println(p1+p2+p3);System.out.println(p4+p5+p6);System.out.println(p7+p8+p9);}}classJogo{TabuleiroT=newTabuleiro();voidjogar(){for(inti=0;i<9;i++){Stringp=JOptionPane.showInputDialog("Qual a sua posição? ");//System.out.println("P = "+p);intx=Integer.parseInt(p);switch(x){case1:T.p1="x ";//System.out.println("x" + T.p2 + T.p3); break;case2:T.p2="x ";//System.out.println(T.p1 + "x" + T.p3); break;case3:T.p3="x ";//System.out.println(T.p1 + T.p2 + "x"); break;case4:T.p4="x ";//System.out.println("x" + T.p5 + T.p6); break;case5:T.p5="x ";//System.out.println(T.p4 + "x" + T.p6); break;case6:T.p6="x ";//System.out.println(T.p4 + T.p5 + "x"); break;case7:T.p7="x ";//System.out.println("x" + T.p8 + T.p9); break;case8:T.p8="x ";//System.out.println(T.p7 + "x" + T.p9); break;case9:T.p9="x ";//System.out.println(T.p7 + T.p8 + "x"); break;}T.imprimir();if(i<8){System.out.println("Aguardando jogada...");}}}}classJogador{Stringnome;Stringsimb;Jogoj;}
Se resolver, edite sua primeira postagem colocando [RESOLVIDO] no início :)
L
lucasstoffel
Ajudou bastante amigo, mas eu ainda preciso fazer o jogador 2 com o simbolo “O” e preciso criar uma condição
que defina um ganhador se houver “X” ou “O” completos
max.analista
lucasstoffel:
Ajudou bastante amigo, mas eu ainda preciso fazer o jogador 2 com o simbolo “O” e preciso criar uma condição
que defina um ganhador se houver “X” ou “O” completos
Agora a bola da vez está com você.
Vejamos o seguinte. Para alterar entre “X” e “O” você pode criar uma String que vai variar, a cada rodada(variação da variável ‘i’ instaciada no loop ‘for’). Sendo assim, você pode por exemplo, definir que quando o valor de ‘i’ for impar, a String passa a ser igual a “X”, e quando par passa a ser “0”.
A verificação caso alguém tenha ganhado é feita pelo comando IF e a condição você já sabe pois entende como o jogo funciona. Basta criá-la analisando as variaveis da classe Tabuleiro e suas respectivas posições na exibição no console.