Jogo da Memória

Olá Pessoal,

Estou fazendo um jogo da memória com operações matemáticas…

Tenho dois diretórios, uma com as operações e a outra com os resultados.

Os pares devem ser tipo:

2+2 par com 4…

só que as vezes ele tá pegando 2+2 duas vezes… repetindo os botoes da mesma pasta e eu não quero isso…

será que alguém pode me ajudar???

Esse é parte do código…

public class Botoes 
{
    ArrayList<JButton> botoes = new ArrayList<>();
    ArrayList<Integer> numList = new ArrayList<>();
   
    public Teste ini;
    
    public GerenciaJogo gerenciaJogo = new GerenciaJogo();
    private int acertos;
    private int tentativas;
    public int opcao=0;
    public int somar = 0 ;
    
    public int Soma(){
        
        return somar;
    }
       
          
    public Botoes(Teste ini) 
    {
        this.ini = ini;
    }

    Login seleciona = new Login();
    
    Pessoa sel = seleciona.getCombo();   
    
    
    public Botoes() 
    {
        
    }
    
    public ArrayList<JButton> getListaDeBotoes() 
    {

        for (int i = 0; i < Constantes.QUANTIDADE_BOTOES_TELA; i++) {
            botoes.add(this.criaBotao(i));
        }
        return botoes;
    }
    public JButton criaBotao(int num) 
    {
        String randomStr = "button";

        int numAleatorio = -1;
        numAleatorio = numeroAleatório();

        if (num < 10) {
            randomStr = randomStr + "0" + num;
        } else {
            randomStr = randomStr + num;
        }
        
        
        JButton b = new JButton();

        b.setBackground(Color.LIGHT_GRAY);
        b.setBorder(BorderFactory.createRaisedBevelBorder());

        b.setIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png"))); // imagem 
        
                
        String diretorio = "";
        
        if(gera1ou2()) {
            diretorio = "res";
        } else {
            diretorio = "som";
        }
        

       b.setRolloverSelectedIcon(new ImageIcon(getClass().getResource("/img/" + diretorio + "/" + numAleatorio + ".png")));
       b.setDisabledIcon(new ImageIcon(getClass().getResource("/img/" + diretorio + "/" + numAleatorio + ".png")));
       b.setDisabledSelectedIcon(new ImageIcon(getClass().getResource("/img/" + diretorio + "/" + numAleatorio + ".png")));

       b.setPressedIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png")));
       b.setRolloverIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png")));
       b.setSelectedIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png")));

        b.setName("" + numAleatorio);

       b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                captaBotao(e);

            }
        });
        return b;
    }
    public void captaBotao(ActionEvent ev) {
        JButton botao = (JButton) ev.getSource();
        botao.setEnabled(false);

        JButton btnsArray[] = gerenciaJogo.getBotoes();

        if (btnsArray[0] == null) {
            btnsArray[0] = botao;
        } else {
            btnsArray[1] = botao;

            if (gerenciaJogo.comparaBotoesClicados(btnsArray)) {

                acertos++;
                
           } else {
               JOptionPane.showMessageDialog(null, "Tente novamente!");
               
               tentativas++;
               
             gerenciaJogo.tentativaErrada(btnsArray);
            }
            
            if(tentativas <= 5){
                
                somar = somar+50;
                
            } 
                if ((tentativas > 5) && (tentativas <=10)){
                
                    somar = somar+30;
                    
                }
                    else {
                    
                somar = somar+10;
                
            }
            
                somar ++;
            
            if (acertos == 10) {
                
                                                
                JOptionPane.showMessageDialog(null, "PARABÉNS" + sel + "VC FEZ " + somar + " PONTOS");
                
                int opcao = JOptionPane.showConfirmDialog(null, "Jogar Novamente?", " ", JOptionPane.YES_NO_OPTION);

                if (opcao == 0) {
                   
                    ini.dispose();
                    new Teste().setVisible(true);
                                       
                } else {
                                   
                    ini.dispose();
                }
            }
            //Thread.currentThread().sleep(10000);
 
        gerenciaJogo.limpaBotoesClicados();
            
          }
    }
    
    private int numeroAleatório() {
        
        double sorte = Math.random() * (10);
               
        if (numList.size() < 2) 
        {
            numList.add((int) sorte);
            return (int) sorte;
        } else {
            if (numList.contains((int) sorte)) {
                if (numList.indexOf((int) sorte) == numList.lastIndexOf((int) sorte)) 
                {
                    numList.add((int) sorte);
                    return (int) sorte;
                } else {
                    sorte = this.numeroAleatório();
                }
            } else {
                numList.add((int) sorte);
                //return (int) sorte;
            }
            return (int) sorte;
        }
        
    }
      
    
    
   
        
        private boolean gera1ou2() {
        
            
            
        Random gerador = new Random();
        boolean resultado = gerador.nextBoolean();
 
        //System.out.println(resultado);
        
       return resultado;

    }

    
}

:cry: Gente se puderem me ajudar…

Preciso só saber como comparar imagens em pasta pra que não pegue a mesma imagem na mesma pasta… pleaseeeee…

Você pode postar só o código onde você carrega as imagens?

Oi Vini…

Segue a parte que carrega as imagens

JButton b = new JButton();  
  
        b.setBackground(Color.LIGHT_GRAY);  
        b.setBorder(BorderFactory.createRaisedBevelBorder());  
  
        b.setIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png"))); // imagem   
          
                  
        String diretorio = "";  
          
        if(gera1ou2()) {  
            diretorio = "res";  
        } else {  
            diretorio = "som";  
        }  
          
  
       b.setRolloverSelectedIcon(new ImageIcon(getClass().getResource("/img/" + diretorio + "/" + numAleatorio + ".png")));  
       b.setDisabledIcon(new ImageIcon(getClass().getResource("/img/" + diretorio + "/" + numAleatorio + ".png")));  
       b.setDisabledSelectedIcon(new ImageIcon(getClass().getResource("/img/" + diretorio + "/" + numAleatorio + ".png")));  
  
       b.setPressedIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png")));  
       b.setRolloverIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png")));  
       b.setSelectedIcon(new ImageIcon(getClass().getResource("/img/res/" + 10 + ".png")));  
  
        b.setName("" + numAleatorio);  
  
       b.addActionListener(new ActionListener() {  
  
            @Override  
            public void actionPerformed(ActionEvent e) {  
                captaBotao(e);  
  
            }  
        });  
        return b;  

Essa parte é o método pra pegar as duas pastas

private boolean gera1ou2() {
                   
        Random gerador = new Random();
        boolean resultado = gerador.nextBoolean();
 
        //System.out.println(resultado);
        
      return resultado;

Obrigada…

Se você quer gerar um conjunto aleatório sem repetição, o ideal é fazer o seguinte:

a) Preencha uma lista com todas as possibilidades possíveis (no seu caso, seriam as cartas):

List&lt;Integer&gt; possibilidades = new ArrayList&lt;&gt;(); for (int i = 1; i &lt;= 60; i++) { possibilidades.add(i); }

b) Use o método Collections.shuffle para embaralhar a lista.

Collections.shuffle(possibilidades);

A lista agora está embaralhada. Seria como pegar todas as cartas do jogo da memória e embaralhar na mão. Agora, basta distribuí-las pela tela em ordem:

//Observe que tudo está embaralhado, sem repetições for (Integer valor : possibilidades) { System.out.println(valor); }

Usar random nesse caso não serve, pois o Random não dá garantias de que os números sorteados serão únicos.

Bom dia Vini…

O problema é que eu tenho duas pastas… e dessa forma ele pega somente as imagens de uma pasta só…

Ou eu estou fazendo algo errado??

 private boolean gera1ou2() {
            
            ArrayList<Integer> possibilidades = new ArrayList<>();{   
        for (int i = 1; i <= 60; i++) {   
   possibilidades.add(i);   
}  
Collections.shuffle(possibilidades);  
for (Integer valor : possibilidades) {   
    System.out.println(valor);   
}  
                   
      
   }
        return false;
        
        }
String diretorio = "";
        
        if(gera1ou2()) {
                  
           diretorio = "res";
       } else {
            diretorio = "som";
  }

Vini…

Please…

Ainda não consegui…

Desculpa… é que sou iniciante…

Alguém???