2017-06-15 50 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 
    } 
} 

你有一个红色和黑色按钮的事件处理程序,但他们都调用相同的猜测方法。猜测方法处理猜测并将其与结果进行比较,然后提示您再次猜测或重新开始。