Как перебрать циклом массив для поиска совпадений?

291
07 января 2018, 06:32

Пишу свою первую игру по типу три в ряд! В процессе создания игры сделал следующее:

  • добавил GridView;
  • с помощью класса ImageAdapter разместил массив изображений на GridView;

Вот код класса ImageAdapter:

public class ImageAdapter extends BaseAdapter {
private Context mContext;
   public ImageAdapter(Context c) {
       mContext = c;
}
   public int getCount() {
       return mThumbIds.length;
}
   public Object getItem(int position) {
       return mThumbIds[position];
}
   public long getItemId(int position) {
       return position;
}
   public View getView(int position, View convertView, ViewGroup parent) {
       ImageView imageView;
            if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(60, 60));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(2, 2, 2, 2);
          } else {
        imageView = (ImageView) convertView;
        }
        imageView.setImageResource(mThumbIds[position]);
    return imageView;
}
   public Integer[] mThumbIds = {
        R.drawable.gem1, R.drawable.gem1, R.drawable.gem2, R.drawable.gem1, R.drawable.gem5, R.drawable.gem3, R.drawable.gem1, R.drawable.gem5, R.drawable.gem4, R.drawable.gem2,
        R.drawable.gem2, R.drawable.gem5, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2, R.drawable.gem1, R.drawable.gem4, R.drawable.gem2, R.drawable.gem4,
        R.drawable.gem3, R.drawable.gem4, R.drawable.gem2, R.drawable.gem1, R.drawable.gem4, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2, R.drawable.gem3,
        R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2, R.drawable.gem2, R.drawable.gem2, R.drawable.gem1, R.drawable.gem4,
        R.drawable.gem5, R.drawable.gem2, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2, R.drawable.gem2, R.drawable.gem2, R.drawable.gem4, R.drawable.gem2,
        R.drawable.gem5, R.drawable.gem2, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2, R.drawable.gem1, R.drawable.gem4, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4,
        R.drawable.gem4, R.drawable.gem5, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem1, R.drawable.gem4, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4,
        R.drawable.gem3, R.drawable.gem1, R.drawable.gem3, R.drawable.gem3, R.drawable.gem4, R.drawable.gem1, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2,
        R.drawable.gem2, R.drawable.gem3, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem4, R.drawable.gem4, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4,
        R.drawable.gem1, R.drawable.gem4, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem1, R.drawable.gem4, R.drawable.gem3, R.drawable.gem4, R.drawable.gem2
   };

   }

Это xml код GridView :

<GridView
        android:id="@+id/grid_view"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="34dp"
        android:background="@drawable/grid"
        android:columnWidth="30dp"
        android:gravity="center"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth">
</GridView>

Это код класса GameActivity:

 public class GameActivity extends AppCompatActivity implements View.OnClickListener{
 private Button btn;

{
    this.btn = btn;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);
    final GridView gridView = (GridView) findViewById(R.id.grid_view);
    btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(this);
    gridView.setAdapter(new ImageAdapter(this));
    final ImageAdapter ia = new ImageAdapter(this);
    final AdapterView.OnItemClickListener itemListener = new 
 AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            if (true) {
                btn.setText("РАБОТАЕТ");
                switch (v.getId()) {
                    case R.drawable.gem1:
                       // parent.getItemAtPosition(position);
                       //  parent.getSelectedView();
                       //  parent.getOnItemClickListener();
                        break;
                }
            }
            }
    };
    gridView.setOnItemClickListener(itemListener); 
}
@Override
public void onClick(View v) {
}

Button я добавил для проверки реагирует ли изображение на нажатие. Когда нажимаю на камень на игровом поле – меняется надпись на кнопке. Вся моя проблема в том, что я не знаю как пройтись циклом по массиву mThumbIds чтобы проверять на совпадения элементы массива. Я так понимаю что проверку на совпадения нужно делать по горизонтали и вертикали и что за меня никто этот код писать не будет. Мои познания еще малы, поэтому прошу опытных разработчиков помочь мне понять как это работает!

Хочу сделать стандартную логику три в ряд, а именно:

  • чтобы камни передвигались и контактировали друг с другом (если рядом камень не того типа нужно чтобы первый камень вернулся назад );
  • если 3 одинаковых камня - они исчезают, на их место падают новые ;
  • если 4 од. камня - то появляется камень другого типа , который уничтожает ряд по вертикали или горизонтали;
  • если 5 од. камней - появляется камень, который уничтожает все камни выбранного типа на игровом поле.

Реализовать я хочу все сам. Мне просто нужен толчек хотя-бы по первым двум пунктам. Дальше я сам. Искренне Вас прошу помочь новичку.

READ ALSO
Js + Java EE(Ajax добавление данных в таблицу)

Js + Java EE(Ajax добавление данных в таблицу)

Здравствуйте, есть приложение, в котором находится комната администратораТам есть таблица в которой находятся группы студентов, и есть кнопочка...

250
Android обработка касаний для игры

Android обработка касаний для игры

ЗдравствуйтеПодскажите как реализовать задержку между событиями касаний и с мультитачем, пожалуйста

225
приложение вылетает android studio

приложение вылетает android studio

Почему вылетает приложение при отладке на девайсе? Просто не запускается

256
Вылазит NullPointerException [дубликат]

Вылазит NullPointerException [дубликат]

На данный вопрос уже ответили:

244