Ajuda-Urgente-----Jogo da Memoria

25 respostas
J
Olá Pessoal, eu sou novo em Java e queria uma ajuda;

Criar uma classe em JAva chamada Carta que represente uma carta do jogo da memoria. Esta carta pode virar para cima e para baixo e guardará consigo um numero identificador, o caminho da imagem a ser exibida, bem como o seu estado atual: virada ou desvirada;

Criar também uma classe chamada GAmeEngine a qual terá uma matriz do tipo Carta de tamanho 4x4. Essa classe precisará preencher a matriz com 16 objetos fixos do tipo Carta sendo que divididos aos pares por imagem (ou seja, os 16 objetos terão 8 imagens diferentes). A GameEngine terá ainda um metodo virarCarta que receberá as coordenadas (linha e coluna) da carta a ser viradfa, a partir dessas coordenadas ela deverá  pedir para o objeto carta correspondente da matriz se virar;

Por fim, criar uma JFrame (SWING) que instanciará um objeto do tipo GameEngine, e terá 2 JComboBoxes com 4 itens cada (valores: 1,2,3,4) e 1 botão. Tal botão chamará o metodo virarCarta do objeto GameEngine passando os valores selecionados dos JComboBoxes como coordenadas da matriz para simular jogadas do jogo da memoria.

Por FAvor, quem puder me ajudar desde já agradeço

25 Respostas

Z

e quais são as suas duvidas??

J

Como fazer

R

hm… trabalho de faculdade detectééééééd! hahahhaha

da 0 pra ele professor x)

J

heheheheheh
É uma atividade do curso

V

Você faz assim:

  1. Crie uma classe em Java chamada Carta que represente uma carta do jogo da memoria;
  2. Coloque nessa classe: um numero identificador, o caminho da imagem a ser exibida, bem como o seu estado atual: virada ou desvirada;
  3. Crie também uma classe chamada GAmeEngine a qual terá uma matriz do tipo Carta de tamanho 4x4
  4. Essa classe precisará preencher a matriz com 16 objetos fixos do tipo Carta sendo que divididos aos pares por imagem (ou seja, os 16 objetos terão 8 imagens diferentes);
  5. A GameEngine terá ainda um metodo virarCarta que receberá as coordenadas (linha e coluna) da carta a ser viradfa, a partir dessas coordenadas ela deverá pedir para o objeto carta correspondente da matriz se virar;
  6. Por fim, crie um JFrame (SWING) que instanciará um objeto do tipo GameEngine, e terá 2 JComboBoxes com 4 itens cada (valores: 1,2,3,4) e 1 botão;
  7. Tal botão chamará o metodo virarCarta do objeto GameEngine passando os valores selecionados dos JComboBoxes como coordenadas da matriz para simular jogadas do jogo da memoria;
O

Tá aí, dependendo de qual seja a matéria (ou seja, do que está sendo avaliado), não faria mal o professor passar um roteiro como este.

J

obrigado
vou tentar fazer
vlw mesmo

V

Tá aí, dependendo de qual seja a matéria (ou seja, do que está sendo avaliado), não faria mal o professor passar um roteiro como este.

Eu copiei do enunciado… só separei os tópicos.

Agora, Jo… vai fazendo e postando aqui cada etapa do processo. Se empacar, diga sua dúvida e a gente te ajuda.

J

package jogoDaMemoria;

public class Carta {
 String estado="Desvirada";
 String numeroIdentificação="1";
 String caminho="C:/Meus Documentos/Minhas Imagens";

      
    public String getNipe() {
        return numeroIdentificação;
    }

    public void setNipe(String nipe) {
        this.numeroIdentificação = nipe;
    }


    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getCaminho() {
        return caminho;
    }

    public void setCaminho(String caminho) {
        this.caminho = caminho;
    } 
}
J

package jogoDaMemoria;

public class GameEngine extends Carta {

Carta[][] Carta = new Carta[4][4];
Carta carta1 = new Carta();

Carta carta2 = new Carta();
Carta carta3 = new Carta();
Carta carta4 = new Carta();
Carta carta5 = new Carta();
Carta carta6 = new Carta();
Carta carta7 = new Carta();
Carta carta8 = new Carta();
Carta carta9 = new Carta();
Carta carta10 = new Carta();
Carta carta11 = new Carta();
Carta carta12 = new Carta();
Carta carta13 = new Carta();
Carta carta14 = new Carta();
Carta carta15 = new Carta();
Carta carta16 = new Carta();

public void Matriz() {
    Carta[0][0] = carta1;
    Carta[0][1] = carta1;
    Carta[0][2] = carta2;
    Carta[0][3] = carta2;
    Carta[1][0] = carta3;
    Carta[1][1] = carta3;
    Carta[1][2] = carta4;
    Carta[1][3] = carta4;
    Carta[2][0] = carta5;
    Carta[2][1] = carta5;
    Carta[2][2] = carta6;
    Carta[2][3] = carta6;
    Carta[3][0] = carta7;
    Carta[3][1] = carta7;
    Carta[3][2] = carta8;
    Carta[3][3] = carta8;




}

public String VirarCarta(int linha, int coluna) {
    if(estado.equals("Virada")){
        estado="Desvirada";

    }else{
        if(estado.equals("Desvirada")){
            estado="Virada";
        }
        
    }

  System.out.println ("Estado: " + estado);
    return estado;


}

}

O

Suspeitei desde o princípio.
Como ficou óbvio, não havia lido todo enunciado, mas foi até bom porque ao mostrar que havia lido o seu post mais simplificado, o meu destacou a importância da organização das idéias. Estruturado do jeito que você colocou parece outro problema. Vários exercícios básicos que de vez em quando aparecem por aqui podem ser resolvidos (ou ao menos entendidos) com o uso dessas técnicas simples, como o bom e velho teste de mesa.

J

package jogoDaMemoria;

public class Principal extends javax.swing.JFrame {

public Principal() {
    initComponents();
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jComboBoxLinha = new javax.swing.JComboBox();
    jComboBoxColuna = new javax.swing.JComboBox();
    botaoVirar = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jComboBoxLinha.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0", "1", "2", "3" }));
    jComboBoxLinha.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jComboBoxLinhaActionPerformed(evt);
        }
    });

    jComboBoxColuna.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0", "1", "2", "3" }));
    jComboBoxColuna.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jComboBoxColunaActionPerformed(evt);
        }
    });

    botaoVirar.setText("Virar");
    botaoVirar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            botaoVirarActionPerformed(evt);
        }
    });

    jLabel1.setText("Linha");

    jLabel2.setText("Coluna");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(38, 38, 38)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(botaoVirar)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jComboBoxColuna, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jComboBoxLinha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(34, 34, 34)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel2)
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))))
            .addContainerGap(230, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(57, 57, 57)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jComboBoxLinha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel1))
            .addGap(30, 30, 30)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jComboBoxColuna, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel2))
            .addGap(52, 52, 52)
            .addComponent(botaoVirar)
            .addContainerGap(98, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

private void jComboBoxLinhaActionPerformed(java.awt.event.ActionEvent evt) {                                               
jComboBoxLinha.getSelectedIndex();
    
}                                              

private void jComboBoxColunaActionPerformed(java.awt.event.ActionEvent evt) {

jComboBoxColuna.getSelectedIndex();

}                                               

private void botaoVirarActionPerformed(java.awt.event.ActionEvent evt) {
GameEngine game = new GameEngine();

game.Matriz();

game.VirarCarta(jComboBoxLinha.getSelectedIndex(),jComboBoxColuna.getSelectedIndex());

}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Principal().setVisible(true);
        }
    });
}

// Variables declaration - do not modify
private javax.swing.JButton botaoVirar;
private javax.swing.JComboBox jComboBoxColuna;
private javax.swing.JComboBox jComboBoxLinha;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
// End of variables declaration

GameEngine game= null;

}

J

fiz isso
agora nao sei se tah certo

T

Suspeitei desde o princípio.
Como ficou óbvio, não havia lido todo enunciado, mas foi até bom porque ao mostrar que havia lido o seu post mais simplificado, o meu destacou a importância da organização das idéias. Estruturado do jeito que você colocou parece outro problema. Vários exercícios básicos que de vez em quando aparecem por aqui podem ser resolvidos (ou ao menos entendidos) com o uso dessas técnicas simples, como o bom e velho teste de mesa.

É por isso que pedem naqueles concursos públicos o velho e bom “teste de interpretação de textos”. Muita gente não consegue nem dividir em tópicos um problema.

Como dizia o Jack o Estripador, “vamos em partes”. :stuck_out_tongue:

Eu antes tinha um pouco mais de paciência com isso e fazia o que o Vini fez, ou seja, simplesmente listar os pontos a serem feitos no problema.

J

Mas nao sei se tah certo

V

Não está totalmente certo, mas você está no caminho.
Vamos começar analisando sua classe carta. Você aprendeu em sua aula mais de um tipo de dado.

int - para números
boolean - para valores do tipo “sim/não”
double - para números fracionários
String - para texto.

O estado indica se a carta está ou não desvirada. Imagine isso na forma de uma pergunta:
“A carta está virada?”

Que tipo de resposta você obtém? Então, ao invés de String estado, não seria melhor o atributo:
boolean estaVirada = false; //Está virada?

O outro campo é o “número” de indentificação. Isso te diz alguma coisa?
Claro, seu dado é numérico. Portanto, o tipo de dado ou será int (caso não tenha parte fracionária), ou double. Corrija isso também.

Como estamos falando em jogo da memória, não creio que o número de identificação se refina a naipes. Provavelmente, as cartas terão desenhos como frutinhas, bichinhos, ou outra coisa cuti-cuti que esses jogos de memória tem. De qualquer forma, mesmo que seja o desenho de um baralho, o naipe teria pouca relevância nesse caso. Por isso, procure deixar os seus setters e getters com um nome mais significativo.

Finalmente, creio que o caminho aqui refira-se ao caminho completo da imagem. Algo como
“C:/Meus Documentos/Minhas Imagens/UrsinhoPooh.jpg”
“C:/Meus Documentos/Minhas Imagens/Tigrao.jpg”
“C:/Meus Documentos/Minhas Imagens/Leitao.jpg”

Corrige aí e posta a nova classe aqui. Ah, antes de colar o código, dá uma lida nesse tópico aqui:
http://www.guj.com.br/posts/list/50115.java

Ensina a deixar o código formatado, colorido e alinhado aqui no GUJ.

V

Na sua classe GameEngine. O problema pede uma matriz 8 por 8, não 4 por 4.

Entretanto, pense em como preencher a matriz usando um for.
Dica: não será necessário criar aquele monte de variáveis previamente. E você terá que usar um for dentro de outro for.

J

tou tentando
eu tava pensando nisso
mas nao conseguiu fazer

V

Ok. Comece arrumando sua classe de carta e coloque-a aqui.

J

package jogoDaMemoria;

public class Carta {

Boolean estado;

int numeroIdentificacao;

String caminho;
public int [b]getNipe[/b]() {
    return numeroIdentificacao;
}

public void [b]setNipe[/b](int numeroIdentificacao) {
    this.numeroIdentificacao = numeroIdentificacao;
}


public Boolean[b] getEstado[/b]() {
    return estado;
}

public void [b]setEstado[/b](Boolean estado) {
    this.estado = estado;
}

public String [b]getCaminho[/b]() {
    return caminho;
}

public void [b]setCaminho[/b](String caminho) {
    this.caminho = caminho;
}

}

V

Ok. Melhorou muito.

Agora, ao invés de estado, chame o atributo de virada (como se fosse uma pergunta "virada?")

Aí crie o método isVirada() e o método virar.
package jogoDaMemoria;

public class Carta {
   boolean virada = false;
   int naipe;
   String caminho;


   public int getNipe() {
      return naipe;
   }

   public void setNipe(int naipe) {
      this.naipe = naipe;
   }


   public Boolean isVirada() {
      return virada;
   }

   public void virar() {
      this.virada = !virada;
   }

   public String getCaminho() {
      return caminho;
   }

   public void setCaminho(String caminho) {
      this.caminho = caminho;
   }
}

Veja, funcionalmente as duas classes funcionam e são equivalentes. Porém, é muito importante ter consistência no seu código. Ajuste essa última versão da classe no seu programa, e vamos começar a pensar na GameState.

Ah, e no próximo, poste o código com as tags code, para ficar colorido, assim como fiz aqui em cima.

O

Jo, parabéns pelos esforços e bons estudos.

Resta a dúvida de onde é a raiz do problema? Alunos? Professores? Condição social? Ensino médio? Fundamental? Não mamou? Faltou farofa? Talvez a máxima “cada caso é um caso” se aplique, mas de qualquer forma, me pergunto não são os professores mesmos que já não passam o “pulo do gato” por não acharem tão importante quanto a tecnologia/filosofia/metodologia/liguagem/whatever do momento ou se, assim como outros profissionais, estes também estão indo para o mercado de trabalho despreparados ou ainda por simplesmente nem ligarem mesmo, afinal isso não faz parte do conteúdo programático. :roll:

V

Não sei se isso demonstra um problema.

Errar, não entender e se corrigir faz parte do processo de aprendizado. O problema só se torna real se, alguém com o mesmo grau de capacitação dele, concluir a faculdade e chegar ao mercado de trabalho.

E isso, infelizmente, acontece.

V
Quanto ao seu problema de criar as cartas através de um for:
public class GameEngine extends Carta {
   //Sempre marque suas propriedades internas como private
   //Dê sempre nomes minúsculos aos atributos
   //Procure dar nomes no plural para matrizes.

   private Carta[][] cartas = new Carta[8][8];

   public void Matriz() {
      for (int i = 0; i &lt; 8; i++) {
         for (int j = 0; j &lt; 8; j++) {
            cartas[i][j] = new Carta();     
         }
      }
    }

   public void VirarCarta(int linha, int coluna) {
      cartas[linha][coluna].virar();
   }
}
J

Obrigado pela força
eu nao estava respondendo
pq nao tinha entrado mas na net
vlw por tudo galera
abraços

Criado 21 de julho de 2009
Ultima resposta 23 de jul. de 2009
Respostas 25
Participantes 6