2014-01-20 35 views
0

我不知道用java。當我開始我的jframe(記憶卡遊戲)時,我點擊兩個相同的瓷磚只有第一個顯示。例如:當我在 新OrangeTile,然後在其他新OrangeTile單擊只有第一個停留在tile.showface我想在java中點擊它們時顯示同一個類瓷磚

package control; 

import java.awt.Color; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 

import Tiles.*; 


public class Control extends JFrame { 

private static final long serialVersionUID = 1L; 
public static Control CurrentWindow = null; 

private final String title ="Remembory"; 

private Tile SelectedTile = null; 
private int points = 0; 

public Control() { 

    setSize(250,260); 
    setTitle(title); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setUpGame(); 

    setVisible(true); 

} 

private void setUpGame() 
{ 
    getContentPane().setLayout(new FlowLayout()); 
    getContentPane().add(new OrangeTile()); 
    getContentPane().add(new OrangeTile()); 
    getContentPane().add(new YellowTile()); 
    getContentPane().add(new YellowTile()); 
    getContentPane().add(new GreenTile()); 
    getContentPane().add(new GreenTile()); 
    getContentPane().add(new RedTile()); 
    getContentPane().add(new RedTile()); 
    getContentPane().add(new BlueTile()); 
    getContentPane().add(new BlueTile()); 
    getContentPane().add(new GrayTile()); 
    getContentPane().add(new GrayTile()); 
    getContentPane().add(new WhiteTile()); 
    getContentPane().add(new WhiteTile()); 
    getContentPane().add(new TurqTile()); 
    getContentPane().add(new TurqTile()); 

} 

private void AddPoint() { 
    points++; 
    System.out.println(" + " + points + "Points"); 

} 

public void TileClicked (Tile tile){ 
    if (SelectedTile == null) { 
     tile.showFace(); 
     SelectedTile = tile; 
     return; 
    } 
    if (SelectedTile == tile) { 
      tile.hideFace(); 
      SelectedTile = null; 
      return; 
    } 
    if (points == 7){ 
     System.exit(0); 
    } 
    if (SelectedTile.getFaceColor() == tile.getFaceColor()) { 
     AddPoint(); 
     getContentPane().remove(SelectedTile); 
     getContentPane().remove(tile); 
     SelectedTile = null; 
     return; 
    } 
    SelectedTile.hideFace(); 
    SelectedTile = null; 
} 


public static void main(String[] args){ 
    CurrentWindow = new Control(); 
} 

}

package Tiles; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JLabel; 

public class Tile extends JLabel implements MouseListener{ 

private static final long serialVersionUID = 1L; 

private Color faceColor = Color.BLACK; 
private final static Dimension size = new Dimension(50,50); 

public Tile() 
{ 
    setMinimumSize(size); 
    setMaximumSize(size); 
    setPreferredSize(size); 
    setOpaque(true); 
    setBackground(new Color(213,86,31)); 
    addMouseListener(this); 
} 



public void showFace() 
{ 
    setBackground(faceColor); 
} 
public void hideFace() 
{ 
    setBackground(new Color(213,86,31)); 

} 

protected void setFaceColor(Color c) 
{ 
    this.faceColor = c; 
} 

public Color getFaceColor() 
{ 
    return this.faceColor; 

} 


public void mouseClicked(MouseEvent arg0) { 
    control.Control.CurrentWindow.TileClicked(this); 
} 


public void mouseEntered(MouseEvent arg0) { 

} 


public void mouseExited(MouseEvent arg0) { 

} 


public void mousePressed(MouseEvent arg0) { 

} 


public void mouseReleased(MouseEvent arg0) { 


} 

}

+0

再次..因此您需要縮小生態區範圍。這是太多的代碼。嘗試縮小 – Coffee

+0

在你的解釋中不太容易理解基礎,但是你以錯誤的方式比較'SelectedTile == tile'..使用:'SelectedTile.equals(tile)'並確保實現equals方法在瓷磚中 – fmodos

回答

1

在公共無效TileClicked(Tile tile)你只能使用tileShowface一次SelectedTile == null 你輸入這個方法的第一次你設置SelectedTile = tile,這樣下一次你輸入這個方法的語句 if(Sel ectedTile == null)爲false,所以你不能調用tileShowface方法兩次 ,除非你將SelectedTile設置回null

也許你應該使用不同的計數器來知道這是玩家點擊的第一個tile還是第二。並在2次點擊不同的瓷磚後將此計數器設置爲零

相關問題