title: Simple Memory Game Cards Android Studio
body: <p>It is a simple memory game cards .Its purpose is to find the same cards. the code counts tries.How my cards unflic for a specific time of 5 seconds before flipped again and game begins . Here is my code:</p>
  
  <pre><code>private static Object lock = new Object();
  
  int turns;
  private TableLayout mainTable;
  private UpdateCardsHandler handler;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  
  
  
      handler = new UpdateCardsHandler();
      loadImages();
      setContentView(R.layout.main);
  
  
     backImage =  getResources().getDrawable(R.drawable.icon);
  
     /*
     ((Button)findViewById(R.id.ButtonNew)).setOnClickListener(new OnClickListener() {
  
      @Override
      public void onClick(View v) {
          newGame();
  
      }
  
  
  });*/
  
     buttonListener = new ButtonListener();
  
      mainTable = (TableLayout)findViewById(R.id.TableLayout03);
  
  
      context  = mainTable.getContext();
  
       Spinner s = (Spinner) findViewById(R.id.Spinner01);
          ArrayAdapter adapter = ArrayAdapter.createFromResource(
                  this, R.array.type, android.R.layout.simple_spinner_item);
          adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          s.setAdapter(adapter);
  
  
          s.setOnItemSelectedListener(new OnItemSelectedListener(){
  
            @Override
            public void onItemSelected(
                    android.widget.AdapterView&lt;?&gt; arg0,
                    View arg1, int pos, long arg3){
  
                ((Spinner) findViewById(R.id.Spinner01)).setSelection(0);
  
              int x,y;
  
              switch (pos) {
              case 1:
                  x=3;y=4;
                  break;
  
              default:
                  return;
              }
              newGame(x,y);
  
          }
  
  
          @Override
          public void onNothingSelected(AdapterView&lt;?&gt; arg0) {
              // TODO Auto-generated method stub
  
          }
  
      });
  }
  
  private void newGame(int c, int r) {
      ROW_COUNT = r;
      COL_COUNT = c;
  
      cards = new int [COL_COUNT] [ROW_COUNT];
  
  
      mainTable.removeView(findViewById(R.id.TableRow01));
      mainTable.removeView(findViewById(R.id.TableRow02));
  
      TableRow tr = ((TableRow)findViewById(R.id.TableRow03));
      tr.removeAllViews();
  
      mainTable = new TableLayout(context);
      tr.addView(mainTable);
  
       for (int y = 0; y &lt; ROW_COUNT; y++) {
           mainTable.addView(createRow(y));
        }
  
       firstCard=null;
       loadCards();
  
       turns=0;
       ((TextView)findViewById(R.id.tv1)).setText("Tries: "+turns);
  
  
  }
  
  private void loadImages() {
      images = new ArrayList&lt;Drawable&gt;();
  
      images.add(getResources().getDrawable(R.drawable.card1));
      images.add(getResources().getDrawable(R.drawable.card2));
      images.add(getResources().getDrawable(R.drawable.card3));
      images.add(getResources().getDrawable(R.drawable.card4));
      images.add(getResources().getDrawable(R.drawable.card5));
      images.add(getResources().getDrawable(R.drawable.card6));
      images.add(getResources().getDrawable(R.drawable.card7));
      images.add(getResources().getDrawable(R.drawable.card8));
      images.add(getResources().getDrawable(R.drawable.card9));
      images.add(getResources().getDrawable(R.drawable.card10));
      images.add(getResources().getDrawable(R.drawable.card11));
      images.add(getResources().getDrawable(R.drawable.card12));
      images.add(getResources().getDrawable(R.drawable.card13));
      images.add(getResources().getDrawable(R.drawable.card14));
      images.add(getResources().getDrawable(R.drawable.card15));
      images.add(getResources().getDrawable(R.drawable.card16));
  
  
  }
  
  private void loadCards(){
      try{
          int size = ROW_COUNT*COL_COUNT;
  
          Log.i("loadCards()","size=" + size);
  
          ArrayList&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();
  
          for(int i=0;i&lt;size;i++){
              list.add(new Integer(i));
          }
  
  
          Random r = new Random();
  
          for(int i=size-1;i&gt;=0;i--){
              int t=0;
  
              if(i&gt;0){
                  t = r.nextInt(i);
              }
  
              t=list.remove(t).intValue();
              cards[i%COL_COUNT][i/COL_COUNT]=t%(size/2);
  
              Log.i("loadCards()", "card["+(i%COL_COUNT)+
                      "]["+(i/COL_COUNT)+"]=" + cards[i%COL_COUNT][i/COL_COUNT]);
          }
      }
      catch (Exception e) {
          Log.e("loadCards()", e+"");
      }
  
  }
  
  private TableRow createRow(int y){
       TableRow row = new TableRow(context);
       row.setHorizontalGravity(Gravity.CENTER);
  
       for (int x = 0; x &lt; COL_COUNT; x++) {
               row.addView(createImageButton(x,y));
       }
       return row;
  }
  
  private View createImageButton(int x, int y){
      Button button = new Button(context);
      button.setBackgroundDrawable(backImage);
      button.setId(100*x+y);
      button.setOnClickListener(buttonListener);
      return button;
  }
  
  class ButtonListener implements OnClickListener {
  
      @Override
      public void onClick(View v) {
  
          synchronized (lock) {
              if(firstCard!=null &amp;&amp; seconedCard != null){
                  return;
              }
              int id = v.getId();
              int x = id/100;
              int y = id%100;
              turnCard((Button)v,x,y);
          }
  
      }
  
      private void turnCard(Button button,int x, int y) {
          button.setBackgroundDrawable(images.get(cards[x][y]));
  
          if(firstCard==null){
              firstCard = new Card(button,x,y);
          }
          else{
  
              if(firstCard.x == x &amp;&amp; firstCard.y == y){
                  //the user pressed the same card
                  Toast.makeText(getApplicationContext(), "CORRECT :D", Toast.LENGTH_SHORT).show();
                  return;
              }
  
  
              seconedCard = new Card(button,x,y);
  
              turns++;
              ((TextView)findViewById(R.id.tv1)).setText("Tries: "+turns);
  
  
              TimerTask tt = new TimerTask() {
  
                  @Override
                  public void run() {
                      try{
                          synchronized (lock) {
                            handler.sendEmptyMessage(0);
                          }
                      }
                      catch (Exception e) {
                          Log.e("E1", e.getMessage());
                      }
                  }
              };
  
                Timer t = new Timer(false);
                  t.schedule(tt, 1300);
          }
  
  
         }
  
  
  }
  
  class UpdateCardsHandler extends Handler{
  
      @Override
      public void handleMessage(Message msg) {
          synchronized (lock) {
              checkCards();
          }
      }
       public void checkCards(){
              if(cards[seconedCard.x][seconedCard.y] == cards[firstCard.x][firstCard.y]){
                  firstCard.button.setVisibility(View.INVISIBLE);
                  seconedCard.button.setVisibility(View.INVISIBLE);
              }
              else {
                  seconedCard.button.setBackgroundDrawable(backImage);
                  firstCard.button.setBackgroundDrawable(backImage);
              }
  
              firstCard=null;
              seconedCard=null;
          }
  }
  </code></pre>