2017-06-15 51 views
0

這裏是虛擬的。我想做一個紙牌遊戲,你猜第一張牌是紅色還是黑色。如果你得到了正確的結果,你就可以猜出第二張牌......等等。我無法讓第二張牌觸發。介意看看?這應該很容易,而且我必須有一種比我嘗試的愚蠢,不成功的方式更簡單的方法。取決於'If'功能的按鈕

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    redButton = (Button) findViewById(R.id.redbutton); 
    blackButton = (Button) findViewById(R.id.blackbutton); 

    card1 = (ImageView) findViewById(R.id.card1); 
    card2 = (ImageView) findViewById(R.id.card2); 

    int value1 = randomValue(); 
    TextView order = (TextView) findViewById(R.id.order); 

//Card 1, does work 
    if (order.getText().toString().contains("Guess to Start!")||order.getText().toString().contains("Drink!")) { 

     redButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       TextView order = (TextView) findViewById(R.id.order); 
       int value1 = randomValue(); 

       if (value1 == 1) { 
        int res1 = getResources().getIdentifier("red", "drawable", "com.pjproductions.speedbump"); 
        card1.setImageResource(res1); 
        order.setText("Correct!"); 
       } else { 
        int res2 = getResources().getIdentifier("black", "drawable", "com.pjproductions.speedbump"); 
        card1.setImageResource(res2); 
        order.setText("Drink!"); 
       }}}); 


     blackButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       int value1 = randomValue(); 
       TextView order = (TextView) findViewById(R.id.order); 

       if (value1 == 1) { 
        int res1 = getResources().getIdentifier("red", "drawable", "com.pjproductions.speedbump"); 
        card1.setImageResource(res1); 
        order.setText("Drink!"); 
       } else { 
        int res2 = getResources().getIdentifier("black", "drawable", "com.pjproductions.speedbump"); 
        card1.setImageResource(res2); 
        order.setText("Correct!"); 
       }}}); 
    } 


//Card 2 starts here; doesn't work 
    if (order.getText().toString().contains("Correct!")) { 

     redButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       TextView order = (TextView) findViewById(R.id.order); 
       int value1 = randomValue(); 

       if (value1 == 1) { 
        int res1 = getResources().getIdentifier("red", "drawable", "com.pjproductions.speedbump"); 
        card2.setImageResource(res1); 
        order.setText("Correct!"); 
       } else { 
        int res2 = getResources().getIdentifier("black", "drawable", "com.pjproductions.speedbump"); 
        card2.setImageResource(res2); 
        order.setText("Drink!"); 
       }}}); 


     blackButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       int value1 = randomValue(); 
       TextView order = (TextView) findViewById(R.id.order); 

       if (value1 == 1) { 
        int res1 = getResources().getIdentifier("red", "drawable", "com.pjproductions.speedbump"); 
        card2.setImageResource(res1); 
        order.setText("Drink!"); 
       } else { 
        int res2 = getResources().getIdentifier("black", "drawable", "com.pjproductions.speedbump"); 
        card2.setImageResource(res2); 
        order.setText("Correct!"); 
       }}}); 


    } 

} 


     public static int randomValue() { 
      return RANDOM.nextInt(2) + 1; 
     } 
+0

生成下一張卡並處理點擊應該以遞歸方式調用成功 –

回答

0

你必須明白「OnCreate」方法只被調用一次。在你的代碼中,你試圖在rebButton的不同行爲之間進行切換,但是一旦在onCreate中調用了onClickListener,它將永遠不會被再次調用。

你跟着我嗎?

您需要調用一個方法在您的onClickListeners,並從那裏,調整基礎上的行爲「order.getText()。包括(......)」

0
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    redButton = (Button) findViewById(R.id.redbutton); 
    blackButton = (Button) findViewById(R.id.blackbutton); 

    card1 = (ImageView) findViewById(R.id.card1); 
    card2 = (ImageView) findViewById(R.id.card2); 

    int value1 = randomValue(); 
    TextView order = (TextView) findViewById(R.id.order); 

    redButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      redButonClick(); 
     }}); 


    blackButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      blackButonClick(); 
     }}); 
} 

private void redButtonClick(){ 
    //Which state am i in?!? Deal with it. 
} 

private void blackButtonClick(){ 
    //Which state am i in?!? Deal with it. 
} 
0

你的問題似乎是的以下形式

// Have a guess 
if (right) // Have another guess 
else // Do something else and start again 

我的第一個問題是,它是否重要,如果它是第一次猜測或後續猜測?

例如,如果您在選擇並刷洗卡片後重新放回卡片,則顯然無關緊要。

我的第二個問題是紅色猜測和黑色猜測之間有什麼不同嗎?

如果顏色只是一個猜測的屬性,則沒有必要區分,簡單地把它作爲像這樣

guess(colour); 

參數。如果我的假設是正確的,那麼你的問題可以分解成像這樣的東西

redClick() 
{ 
    guess(red) 
} 

blackClick() 
{ 
    guess(black) 
} 

guess(colour) 
{ 
    // Pick a card 

    if (card == colour) 
    { 
     // Have another go 
    } 
    else 
    { 
     // Start again 
    } 
} 

你有一個紅色和黑色按鈕的事件處理程序,但他們都調用相同的猜測方法。猜測方法處理猜測並將其與結果進行比較,然後提示您再次猜測或重新開始。