>这里的假人。我想做一个纸牌游戏,你猜第一张牌是红色或黑色。如果你做对了,你就可以猜到第二张牌......等等。我在触发第二张卡时遇到问题。介意看看吗?这应该很容易,而且必须有比我尝试过的愚蠢,不成功的方法更简单的方法。
@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 方法处理猜测并将其与结果进行比较,然后提示您再次猜测或重新开始。