Android:卡匹配游戏需要帮助吗?

时间:2010-08-26 15:04:44

标签: android

我有20张牌,其中有10张图片。播放器旨在找到每张卡片/图像的匹配。 问题是,如果玩家点击或点击每张卡两次,那么该卡会从剩余的卡中减少。我需要禁用ImageView的单击侦听器。怎么办?

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));

            }

    });

3 个答案:

答案 0 :(得分:2)

我在市场上有一个非常相似的记忆匹配游戏。我做的是创建一个代表卡片的类(带有图像和id属性),并为卡片和图像分配一个id(0-9),因为我将它们加载到只有10个图像对象的临时arraylist中。

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

然后我遍历列表两次,并将卡添加到我用于我的适配器的主要arraylist ...之后我使用Collections.shuffle来洗牌......现在......继续选择。如你所知,在记忆游戏中,你只需要随时翻转2张牌。我正在使用gridview来保存我的卡片...所以我所做的是使用gridview中的OnItemClickListener而不是imageview。其次,当点击一张卡片时,我将位置添加到另一个名为“selected”的arraylist,它从不包含超过2个项目...我们试图匹配的项目的位置...在OnItemClickListener中,当事件是解雇,我检查项目是否已经存在于“已选中”并返回,如果确实...实际上忽略了点击。

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

当“selected”包含2个项目时,我会忽略所有点击,直到处理程序完成检查匹配。

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

因此,当用户选择了2个项目时,我设置了一个处理程序来调用检查匹配项的runnable。如果匹配(通过比较我第一次加载图像时设置的id字段),我将两个位置添加到另一个仅包含匹配项的arraylist,并且该处理程序也清除“selected”,如果有匹配,我将图像更改为空白。当所有20张牌都匹配时,我会赢得一个胜利,它会完成所有胜利并重置游戏牌。

答案 1 :(得分:1)

您必须确保这些卡片具有相同的符号,但卡片不同。

所以你的行

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

必须看起来像

中的某些内容
if ((firstCard != secondCard) && (secondId == firstId) && (score != 0)) 

其中firstCardsecondCard识别桌面上的卡片(不是卡片上的符号)

答案 2 :(得分:0)

如果我理解你的话,你只需说view.setOnClickListener(null)这两个是否匹配?如果要同时禁用它们,只需存储一个映射以将ID链接到视图,然后清除“视图”的单击侦听器以及属于第二个ID的视图。