2010-08-26 59 views
2

我有20張卡片,其中有10對圖像。玩家是爲了找到每張卡片/圖像的匹配。 問題是,如果玩家點擊或點擊每張卡片兩次,那麼該卡片會從剩餘卡片中遞減。我需要禁用ImageView的點擊偵聽器。怎麼可以做到這一點?Android:卡匹配遊戲需要幫助嗎?

ivOne = (ImageView)findViewById(R.id.ivOne); 
ivOne.setId(a[0]); 
//final ImageView ivOne = (ImageView)findViewById(R.id.ivOne); 
//ivOne.setEnabled(false); 
ivOne.setOnClickListener(new View.OnClickListener() { 


      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       ivOne.setBackgroundResource(images[a[0]]); 
       Log.e("r[0]:", Integer.toString(a[0])); 
       if (firstTap) 
       { 
        firstId = v.getId(); 
        firstTap = false; 

       } 
       else 
       { 
        //ivOne.setEnabled(false); 
        int secondId = v.getId(); 
        Log.e("secondId", Integer.toString(secondId)); 
        if ((secondId == firstId) && (score != 0)) 
        { 
         //ivOne.setEnabled(false); 
         if (ivOneScored == false)  
         { 
         score--; 
         ivOneScored = true; 
         } 
        } 

        firstTap = true; 
       } 


       tvScore.setText("Remaining:" + Integer.toString(score)); 

      } 

    }); 

回答

2

我有一個在市場上的工作非常相似的內存匹配遊戲。我所做的是製作一張代表卡片(具有圖像和ID屬性)的類併爲卡片和圖像分配一個id(0-9),因爲我將它們加載到10個圖像對象的臨時數組列表中。

public class GameTile { 
    public int id; 
    public Drawable image; 
} 

然後我遍歷列表兩次,增加了卡片給我用我的適配器主要ArrayList中......之後我用Collections.shuffle到洗牌...現在...上到選擇。如你所知,在記憶遊戲中,你只需要隨時翻動2張卡片。我正在使用gridview來保存我的卡片......所以我所做的就是使用gridview中的OnItemClickListener而不是imageview。其次,當點擊卡片時,我將位置添加到另一個名爲「selected」的數組列表中,該列表從不包含多於2個項目...我們試圖匹配的項目的位置...在OnItemClickListener中,當事件是被解僱,我檢查是否該項目已經存在於「選定」,並返回,如果它......實際上忽略了點擊。

if (selected.contains(position)) { 
    return; 
} 

當「選定」包含2個項目時,我會忽略所有點擊,直到處理程序完成檢查匹配。

if (selected.size() > 1) { 
    return; 
} 

因此,當用戶選擇了2個項目時,我設置了一個處理函數來調用一個檢查匹配的runnable。如果匹配成功(通過比較我第一次加載圖像時設置的id字段),我將這兩個位置添加到僅包含匹配項目的另一個數組列表,並且該處理程序也會清除「已選擇」,如果匹配,我將圖像更改爲空白。當所有20張牌都匹配後,我就開始贏得所有勝利並重新設置遊戲盤。

0

如果我理解你的權利,你只需要說view.setOnClickListener(null)如果這兩個比賽?如果你想禁用它們,你只需要存儲一個地圖來鏈接一個ID到一個視圖,然後清除點擊監聽器的「視圖」和任何屬於第二個ID的視圖。

1

您必須確保這些卡具有相同的符號,但不是相同的卡。

所以你行

if ((secondId == firstId) && (score != 0)) 

必須,而像在

if ((firstCard != secondCard) && (secondId == firstId) && (score != 0)) 

線的東西在那裏firstCardsecondCard確定在桌子上(而不是卡上的符號)

+0

我應該爲自己的班級製作卡片嗎?這是你的意思嗎? – 2010-08-26 15:36:50

+1

對我來說似乎是個好主意。 – 2010-08-26 18:51:07