2014-07-25 40 views
1

我想下面的功能添加到我的遊戲:安卓:這activty變化時遊戲結束添加功能

- 當遊戲完成(沒有更多的卡顯示在屏幕上),然後移動到新活動

我知道如何使用意圖轉移到另一個活動,但我不知道如何在這種情況下實現功能。

I.e.在移動到下一個活動之前,我可以使用什麼變量/信息來確保遊戲完成?

僅供參考,遊戲的基礎是this open source game遊戲的圖像顯示在這裏給出一個想法。

當前代碼:

public class Manager extends Activity { 
    private static int ROW_COUNT = -1; 
    private static int COL_COUNT = -1; 
    private Context context; 
    private Drawable backImage; 
    private int [] [] cards; 
    private List<Drawable> images; 
    private Card firstCard; 
    private Card seconedCard; 
    private ButtonListener buttonListener; 

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

     TextView url = ((TextView)findViewById(R.id.myWebSite)); 
     Linkify.addLinks(url, Linkify.WEB_URLS); 

     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<?> arg0, 
         View arg1, int pos, long arg3){ 

        ((Spinner) findViewById(R.id.Spinner01)).setSelection(0); 

       int x,y; 

       switch (pos) { 
       case 1: 
        x=4;y=4; 
        break; 
       case 2: 
        x=4;y=5; 
        break; 
       case 3: 
        x=4;y=6; 
        break; 
       case 4: 
        x=5;y=6; 
        break; 
       case 5: 
        x=6;y=6; 
        break; 
       default: 
        return; 
       } 
       newGame(x,y); 

      } 


      @Override 
      public void onNothingSelected(AdapterView<?> 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 < 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<Drawable>(); 

     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)); 
     images.add(getResources().getDrawable(R.drawable.card17)); 
     images.add(getResources().getDrawable(R.drawable.card18)); 
     images.add(getResources().getDrawable(R.drawable.card19)); 
     images.add(getResources().getDrawable(R.drawable.card20)); 
     images.add(getResources().getDrawable(R.drawable.card21)); 

    } 

    private void loadCards(){ 
     try{ 
      int size = ROW_COUNT*COL_COUNT; 

      Log.i("loadCards()","size=" + size); 

      ArrayList<Integer> list = new ArrayList<Integer>(); 

      for(int i=0;i<size;i++){ 
       list.add(new Integer(i)); 
      } 


      Random r = new Random(); 

      for(int i=size-1;i>=0;i--){ 
       int t=0; 

       if(i>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 < 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 && 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 && firstCard.y == y){ 
        return; //the user pressed the same card 
       } 

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




} 

回答

0

要做到這一點最簡單的方法是檢查與if語句取勝的條件。這應該在方法中實現,我們假設在turnCard()方法中實際發生了轉彎。

if (winConditionMet) { 
    displayWinningScreen(); 
} else if (lossConditionMet) { 
    displayLosingScreen(); 
} 

如果滿足條件,則調用一個方法來處理該屏幕,然後啓動一個新的活動。例如,你可以用任何你想要的文本在屏幕上添加一個按鈕,當被按下時,會將用戶帶到下一個屏幕,比如你的分數屏幕,重放屏幕,主菜單或者你有什麼。

編輯:好的,因爲這是一個內存遊戲,你可以在每一回合結束時迭代卡片,並檢查是否有任何卡仍然有圖像設置爲backImage。如果沒有設置爲backImage,則可以使用if語句中的代碼結束遊戲。或者,不使用ArrayList,您可以使用某種形式的Map來跟蹤每張卡片是否已永久啓用或未使用布爾值。