2010-08-26 1 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) и назначает идентификатор (0-9) на карты и изображение, когда я загрузил их во временный arraylist всего из 10 объектов изображения.

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

Тогда я итерация по списку дважды и добавил карты к основному ArrayList, который я использую для моего адаптера ... после чего я использовал Collections.shuffle перетасовать карты ... Теперь ... на к выбору. Как вы знаете, в игре с памятью вам нужно только 2 карты перевернуться в любое время. Я использую gridview для хранения своих карт ... так что я сделал, это использовать OnItemClickListener из gridview, а не изображение. Во-вторых, когда клика кликается, я добавляю позицию другому arraylist под названием «selected», который никогда не содержит более двух элементов ... позиция элементов, которые мы пытаемся сопоставить ... В OnItemClickListener, когда событие я проверяю, есть ли элемент уже в «выбранном» и возвращает, если он ... фактически игнорирует щелчок.

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

Когда «selected» содержит 2 элемента, я игнорирую все клики, пока обработчик не завершит проверку на совпадение.

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

Поэтому, когда пользователь выбрал 2 объекта, я установил обработчик для вызова runnable, который проверяет соответствие. Если выполняется совпадение (сравнивая поля id, которые я установил при первом загрузке изображений), я добавляю две позиции к другому arraylist, который содержит только согласованные элементы, и этот обработчик также очищает «выбранный» и, если есть совпадения, я измените изображения на пробелы. Когда все 20 карт были сопоставлены, я запускаю выигрыш, который делает все выигрыш и сбрасывает игровой план.

0

Если я понимаю, что вы правы, вам просто нужно сказать view.setOnClickListener(null), если те два матча? Если вы хотите отключить их оба, вы просто сохраните карту, чтобы связать ID с представлением, а затем очистите прослушиватель кликов как для «просмотра», так и для любого вида, относящегося ко второму идентификатору.

1

Вы должны убедиться, что эти карты имеют один и тот же символ, но не являются одинаковой картой.

Так что ваша линия

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

должен скорее выглядеть как-то в линиях

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

где firstCard и secondCard идентифицировать карту на столе (а не символ на карте)

+0

Должен ли я создать свой собственный класс для карт? Это то, что вы имеете в виду? –

+1

Кажется хорошей идеей для меня. –

Смежные вопросы