1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Java] Jogo da Memoria

Discussão em 'Programação' iniciada por Sky_Boy_, 16 de Maio de 2008. (Respostas: 9; Visualizações: 3821)

  1. Sky_Boy_

    Sky_Boy_ Power Member

    Boas pessoal....o prof de java sugeriu que elaborassemos o jogo da memoria como trabalho para a disciplina...mediante o codigo apresentado alguem me pode dar umas dicas pa melhorar isto?

    Friso que ainda n esta a funcionar :o

    Código:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.List;
    import java.util.Arrays;
    import java.util.Collections;
    import javax.swing.Timer;
     
     
     
    public class teste extends JFrame implements ActionListener {
    	
    	JButton restart;
    	JButton quit;	
    	JLabel score, blank;
    	JTextField userScore;
    	MyButton button[] = new MyButton [16] ;
    	int s = 0;
    	int index,a,b,current;
    	int counter = 0;
    	ImageIcon img;
    	ImageIcon cardBack  = new ImageIcon("cardback.jpg");
    	Timer t;
    	
    	
    	public static void main(String[] args) {
    		teste memoryGame = new teste();  
    	}
    
    	public teste() {
    		super();
    		
    		button[0] = new MyButton (new ImageIcon("car1.gif"), 0);
    		button[1] = new MyButton (new ImageIcon("car2.gif"), 1);
    		button[2] = new MyButton (new ImageIcon("car3.gif"), 2);
    		button[3] = new MyButton (new ImageIcon("car4.gif"), 3);
    		button[4] = new MyButton (new ImageIcon("car5.jpg"), 4);
    		button[5] = new MyButton (new ImageIcon("car6.bmp"), 5);
    		button[6] = new MyButton (new ImageIcon("car7.bmp"), 6);
    		button[7] = new MyButton (new ImageIcon("car8.jpg"), 7);
    		button[8] = new MyButton (new ImageIcon("car1.gif"), 0);
    		button[9] = new MyButton (new ImageIcon("car2.gif"), 1);
    		button[10] = new MyButton (new ImageIcon("car3.gif"), 2);
    		button[11] = new MyButton (new ImageIcon("car4.gif"), 3);
    		button[12] = new MyButton (new ImageIcon("car5.jpg"), 4);
    		button[13] = new MyButton (new ImageIcon("car6.bmp"), 5);
    		button[14] = new MyButton (new ImageIcon("car7.bmp"), 6);
    		button[15] = new MyButton (new ImageIcon("car8.jpg"), 7);
    		
    	
    		setTitle("Memory Game");  
    		setSize(600,600);
    		getContentPane().setLayout(new BorderLayout());
    		this.setBackground(Color.GRAY);
    		
    		/*for(int s = 0; s < 25; s++){
    			button = shuffleResultImages(button); 
    			s++;
    		}*/
    		
    		JPanel mainGrid = new JPanel (new GridLayout (4,4)); 
    		 
    		for(int i =0; i<button.length;i++){
    			
    			button[i].addActionListener(this);
    			mainGrid.add(button[i]);
    		}
    		
    		add(mainGrid, BorderLayout.CENTER);  
    		
    		JPanel userOptions = new JPanel (new GridLayout (8,2));
    		
    		userOptions.add(score = new JLabel("Your Score (Matches):"));
    		
    		userOptions.add(userScore = new JTextField(""));
    		userScore.addActionListener(this);
    		
    		userOptions.add(blank = new JLabel(" "));
    		userOptions.add(blank = new JLabel(" "));
    		userOptions.add(blank = new JLabel(" "));
    		
    		
    		
    		userOptions.add(restart = new JButton("Restart Game"));
    		restart.addActionListener(this);
    		
    		userOptions.add(quit = new JButton("Quit"));
    		quit.addActionListener(this);
    		
    		add(userOptions, BorderLayout.EAST);	
    		
    		
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
    		 
    		setVisible(true);
    		
    		}
    	
    	 
    	public void actionPerformed(ActionEvent e) {
    		
    		for(int j = 0 ; j<button.length; j++){
    			if (e.getSource() == button[j] && counter == 0){
    				    a = button[j].getIndex();							
    				    current = j;										
    					button[j].setFaceUp(true);					
    					repaint();
    					counter++;
    					break;										
    					
    			}
    			else if  (e.getSource() == button[j] && counter == 1){
    					b = button[j].getIndex(); 
    					if (a == b){									
    						 button[j].setFaceUp(true);
    						 repaint();
    						 counter = 0;
    						 break;
    					}
    					else{
    						button[j].setFaceUp(true);            
    						repaint();
    						flipPause(1);                              
    						button[current].setFaceUp(false);			
    						button[j].setFaceUp(false);				
    						repaint();	
    						counter = 0; 
    						break;										
    					}
    					
    			}
    				
    		}
    		if (e.getSource()==quit)								
    			System.exit(0);
    		/* if(e.getSource() == restart){
    			 for(int s = 0; s < 25; s++){
    					button = shuffleResultImages(button);  
    					s++;
    				}
    			 
    			 for(int i = 0; i<button.length;i++){
    						button[i].setFaceUp(false);
    					}
    					
    					
    			}*/
    		 
    		
    	
    	}
    	
    	public MyButton[] shuffleResultImages(MyButton[] button){
    		
    		List list = Arrays.asList(button);
    		Collections.shuffle(list);
    		button = (MyButton[]) list.toArray();
    		return button;
    		
    	}
    	public void flipPause(int seconds) {
            try {
     
                Thread.sleep(1000*seconds);
     
            } catch (Exception e) {
               
            }
     
        }
    	
    	
    	
    	
    }
    
    
    Botões

    Código:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
     
    public class MyButton extends JButton{
    	
    	int index;
    	ImageIcon img;
    	ImageIcon cardBack = new ImageIcon("cardback.jpg");
    	
    	public MyButton (ImageIcon theImg, int theIndex){
    		
    		img = theImg;
    		index = theIndex;
    		setIcon(cardBack);
    		setPreferredSize(new Dimension(150,150));
    	     
    	}
    	public int getIndex(){
    		return index;
    	}
    	public ImageIcon getCardImage(){
    		return img;
    	}
    	public void setFaceUp(boolean faceUp) {
    		   if (faceUp) {
    		      setIcon(img);
    		      setPreferredSize(new Dimension(150,150));
    		   }
    		   else {
    			  setIcon(cardBack);
    		      setPreferredSize(new Dimension(150,150));
    		   }
    		}
    }
    
    
    
    Cumps
     
  2. andrepadez

    andrepadez Power Member

    Convem dizeres onde é que ele faz Bum
     
  3. Sky_Boy_

    Sky_Boy_ Power Member

    Podes inserir o teu comentario no codigo?
    Onde e suposto fazer bump?

    Cumps
     
  4. andrepadez

    andrepadez Power Member

    Quando tu dizes: "frizo que ainda não está a funcionar",

    quer dizer que ele estoira em algum lado, dá erro, faz Bum...

    Que erro é que dá para não compilar?
     
  5. Sky_Boy_

    Sky_Boy_ Power Member

    nenhum.....ele compila tudo impecavel....o problema e k n csg associar as imagens aos botoes e n percebo pk..
     
  6. andrepadez

    andrepadez Power Member

    Nenhuma imagem funciona??

    Não tens de definir a path para onde estão as imagens????
     
  7. AliFromCairo

    AliFromCairo Power Member

    Boas, verifica se a directoria das imagens está incluída na classpath.
     
  8. Sky_Boy_

    Sky_Boy_ Power Member

    As imagens tao na pasta bin do workspace....que é exactamente onde deveriam estar :S:S:S
     
  9. Sky_Boy_

    Sky_Boy_ Power Member

    O programa esta a trabalhar mas agora estou com um problema....se acertarmos no par, tudo optimo, sem problemas....caso nao seja par, ele faz a comparação mas nao mostra a segunda parte....o pedaço de codigo referente a essa instrução é o seguinte:

    Código:
    for(int j = 0 ; j<button.length; j++){
    			if (e.getSource() == button[j] && counter == 0){
    				    a = button[j].getIndex();							
    				    current = j;										
    					button[j].setFaceUp(true);						
    					repaint();
    					counter++;
    					break;											
    					
    			}
    			else if  (e.getSource() == button[j] && counter == 1){
    					b = button[j].getIndex(); 
    					if (a == b){									
    						 button[j].setFaceUp(true);
    						 repaint();
    						 counter = 0;
    						 break;
    					}
    					else{
    						//button[j].setFaceUp(true);            // WRONG
    						//repaint();                            
    						button[current].setFaceUp(false);			
    						button[j].setFaceUp(false);				
    						repaint();	
    						counter = 0; 
    						break;										
    					}
    					
    			}
    				
    		}
    
    Alguem sabe como resolver o meu problema

    Cumps
     
  10. andrepadez

    andrepadez Power Member

    Boas, tive a ver o código.
    O que acontece é que as coisas acontecem demasiado rápidas, ou seja, o programa mostra a carta, mas sem parar esconde-a logo a seguir (isto se os comments das duas 1ªs linhas terem sido adicionados depois de testares).

    Código:
     
    //button[j].setFaceUp(true);            // WRONG
    //repaint();                            
    button[current].setFaceUp(false); 
    button[j].setFaceUp(false); 
    repaint(); 
    counter = 0; 
    break;   
    
    Deve haver um mecanismo de pausa como um pause(2000) ou delay(2000) para pausar dois segundos.

    Lê também o meu próximo post...

    ...Outra coisa que deves fazer, mas é um pouco secundário, é quando ele testa que é o 2º click, a segunda carta, mostrar logo a carta em vez de pôres o método para mostrar a carta nas duas condições, caso seja igual ou caso seja diferente.

    isto:
    Código:
     
    else if  (e.getSource() == button[j] && counter == 1){
    b = button[j].getIndex(); 
    if (a == b){ 
    button[j].setFaceUp(true);
    repaint();
    counter = 0;
    break;
    }
    else{
    //button[j].setFaceUp(true);            // WRONG
    //repaint();                            
    button[current].setFaceUp(false); 
    button[j].setFaceUp(false); 
    repaint(); 
    counter = 0; 
    break; 
    }
    
    }
    
    
    devia ficar qq coisa como isto:
    Código:
     
    else if  (e.getSource() == button[j] && counter == 1){
    b = button[j].getIndex(); 
    button[j].setFaceUp(true);//estas duas linhas aqui, não dependem da condição a seguir
    repaint();
    if (a == b){ 
    counter = 0;
    break;
    }
    else{
          pause(2000); //again, não sei se está correcto
    button[current].setFaceUp(false); 
    button[j].setFaceUp(false); 
    repaint(); 
    counter = 0; 
    break; 
    }
    
    }
    
    
     
    Última edição pelo moderador: 25 de Maio de 2008

Partilhar esta Página