按钮取决于'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;
        }

你必须明白,"OnCreate"方法只被调用一次。在你的代码中,你尝试在rebButton和blackButton上的不同行为之间切换,但是一旦在onCreate中调用了onClickListener,它就永远不会再被调用了。

你跟着我吗?

您需要在onClickListeners中调用一个方法,然后根据"order.getText((.contains(...("调整行为。

@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.
}

您的问题似乎是以下形式

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

我的第一个问题是,这是第一次猜测还是后续猜测重要吗?

例如,如果您在选择卡片后将其放回原处并洗牌,那么 if 显然无关紧要。

我的第二个问题是红色猜测和黑色猜测之间有什么区别吗?

如果颜色只是猜测的属性,那么就没有必要进行区分,只需将其作为这样的参数传入即可

guess(colour);

如果我的假设是正确的,那么你的问题可以分解成这样的东西

redClick()
{
    guess(red)
}
blackClick()
{
    guess(black)
}
guess(colour)
{
    // Pick a card
    if (card == colour)
    {
        // Have another go
    }
    else
    {
        // Start again
    }
}

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

最新更新