Duvida no código

11 respostas
L

estou com uma dúvida neste código

import java.util.*;
import javax.swing.*;

public class JogoVelha {
  public static void main(String[] args) { 

    Jogo iniciaJogo = new Jogo();
    
    System.out.println("***Jogo da Velha***");
   
    String a = JOptionPane.showInputDialog("Entre com o nome do jogador1: ");
    String b = JOptionPane.showInputDialog("Entre com o nome do jogador2: ");
    String jogador1 = a;
    String jogador2 = b;
    
    System.out.println("Jogador 1: " + a);
    System.out.println("Jogador 2: " + b);
       Tabuleiro.imprimir();
         iniciaJogo.jogar();

class Tabuleiro {
String p1, p2, p3, p4, p5, p6, p7, p8, p9;
void imprimir() {
   System.out.println(p1 + p2 + p3);
   System.out.println(p4 + p5 + p6);
   System.out.println(p7 + p8 + p9); 
     }
   }

class Jogo {
Tabuleiro T = new Tabuleiro();
void jogar() { 
 String p = JOptionPane.showInputDialog("Qual a sua posição? "); 
int x = Integer.parseInt(p);
switch (x) {
     case 1:
         System.out.println("x" + T.p2 + T.p3);
         break;   
       case 2 :   
         System.out.println(T.p1 + "x" + T.p3);  
         break;   
      case 3 :  
         System.out.println(T.p1 + T.p2 + "x");  
         break;   
      case 4 :   
         System.out.println("x" + T.p5 + T.p6);   
         break;   
      case 5 :   
         System.out.println(T.p4 + "x" + T.p6);   
         break;   
      case 6 :   
         System.out.println(T.p4 + T.p5 + "x");   
         break;   
      case 7 :   
         System.out.println("x" + T.p8 + T.p9);   
         break;   
      case 8 :   
         System.out.println(T.p7 + "x" + T.p9);   
         break;   
      case 9 :   
         System.out.println(T.p7 + T.p8 + "x");   
         break;   
      }  
   }
}

class Jogador {
 String nome;
 String simb;
 Jogo j;
      } 
   }
}

compila normal, mais meu switch na linha 35 não imprime o que eu to pedindo..

11 Respostas

E

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

Entendi mais ou menos, mas o que eu devo fazer pra por o valor em p1?

E

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

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í :slight_smile: Abraço

L

Entendi sim :smiley: , eu acho…
Vou tentar fazer isso, qualquer dúvida eu posto aqui (:

L

Isso ta certo?

import java.util.*;
import javax.swing.*;

public class JogoVelha {
  public static void main(String[] args) { 

    Jogo iniciaJogo = new Jogo();
    
    System.out.println("***Jogo da Velha***");
   
    String a = JOptionPane.showInputDialog("Entre com o nome do jogador1: ");
    String b = JOptionPane.showInputDialog("Entre com o nome do jogador2: ");
    String jogador1 = a;
    String jogador2 = b;
    
    System.out.println("Jogador 1: " + a);
    System.out.println("Jogador 2: " + b);
       Tabuleiro.imprimir();

class Tabuleiro {
String p1, p2, p3, p4, p5, p6, p7, p8, p9;

void imprimir() {

   System.out.println(p1 + p2 + p3);
   System.out.println(p4 + p5 + p6);
   System.out.println(p7 + p8 + p9); 

   String p = JOptionPane.showInputDialog("Qual a sua posição? "); 
int x = Integer.parseInt(p);
 switch (x) {
     case 1:
        p1 = "x ";
         break;   
       case 2 :   
        p2 = "x ";
         break;   
      case 3 :  
        p3 = "x ";
         break;   
      case 4 :   
        p4 = "x "; 
         break;   
      case 5 :   
        p5 = "x "; 
         break;   
      case 6 :   
        p6 = "x ";
         break;   
      case 7 :   
        p7 = "x ";  
         break;   
      case 8 :   
        p8 = "x ";  
         break;   
      case 9 :   
        p9 = "x ";
         break;   
      }  
   }
}



class Jogo {

}

class Jogador {
 String nome;
 String simb;
 Jogo j;
      } 
   }
}

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:

public class JogoVelha {  
  public static void main(String[] args) {  
    Jogo iniciaJogo = new Jogo();  
      
    System.out.println("***Jogo da Velha***");  
     
    String a = JOptionPane.showInputDialog("Entre com o nome do jogador1: ");  
    String b = JOptionPane.showInputDialog("Entre com o nome do jogador2: ");  
    String jogador1 = a;  
    String jogador2 = b;  
      
    System.out.println("Jogador 1: " + a);  
    System.out.println("Jogador 2: " + b);  
    new Tabuleiro().imprimir();  
         iniciaJogo.jogar();  
  }
}
  
class Tabuleiro {  
    String p1="_ ", p2="_ ", p3="_ ", p4="_ ", p5="_ ", p6="_ ", p7="_ ", p8="_ ", p9="_ ";  
    public void imprimir() {  
       System.out.println(p1 + p2 + p3);  
       System.out.println(p4 + p5 + p6);  
       System.out.println(p7 + p8 + p9);   
    }  
}  
  
class Jogo {  
    Tabuleiro T=new Tabuleiro();
    void jogar() {   
        for(int i=0;i<9;i++){
            String p = JOptionPane.showInputDialog("Qual a sua posição? ");   
            //System.out.println("P = "+p);
            int x = Integer.parseInt(p);  
            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;     
                  case 4 :    
                      T.p4="x ";
                     //System.out.println("x" + T.p5 + T.p6);     
                     break;     
                  case 5 :
                      T.p5="x ";
                     //System.out.println(T.p4 + "x" + T.p6);     
                     break;     
                  case 6 :
                      T.p6="x ";
                     //System.out.println(T.p4 + T.p5 + "x");     
                     break;     
                  case 7 :
                      T.p7="x ";
                     //System.out.println("x" + T.p8 + T.p9);     
                     break;     
                  case 8 :
                      T.p8="x ";
                     //System.out.println(T.p7 + "x" + T.p9);     
                     break;     
                  case 9 :
                      T.p9="x ";
                     //System.out.println(T.p7 + T.p8 + "x");     
                     break;     
            }
            T.imprimir();
            if(i<8){
                System.out.println("Aguardando jogada...");
            }
        }
   }  
}  
  
class Jogador {  
    String nome;  
    String simb;  
    Jogo j;  
}

Se resolver, edite sua primeira postagem colocando [RESOLVIDO] no início :)

L

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.

Criado 21 de março de 2013
Ultima resposta 21 de mar. de 2013
Respostas 11
Participantes 3