嗨,我是编程的新手,我知道可能有一些简单的答案,但不能到达那里。
所以基本上我想知道两个按钮的背景图像是否匹配,以及它们是否禁用它们(或其他一些功能)。继承了我的代码,目前我专注于Button1和Button2。
看看结束方法,我知道如果不能工作,但那就是我想要做的事情。感谢。
package com.example.pairsgame;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);}
public final static int Button_Count = 12;
private Button[] Buttons = new Button[Button_Count];
{
Buttons[0] = (Button) findViewById(R.id.Button1);
Buttons[1] = (Button) findViewById(R.id.Button2);
Buttons[2] = (Button) findViewById(R.id.Button3);
Buttons[3] = (Button) findViewById(R.id.Button4);
Buttons[4] = (Button) findViewById(R.id.Button5);
Buttons[5] = (Button) findViewById(R.id.Button6);
Buttons[6] = (Button) findViewById(R.id.Button7);
Buttons[7] = (Button) findViewById(R.id.Button8);
Buttons[8] = (Button) findViewById(R.id.Button9);
Buttons[9] = (Button) findViewById(R.id.Button10);
Buttons[10] = (Button) findViewById(R.id.Button11);
Buttons[11] = (Button) findViewById(R.id.Button12);
Buttons[0].setOnClickListener(this);
Buttons[1].setOnClickListener(this);
Buttons[2].setOnClickListener(this);
Buttons[3].setOnClickListener(this);
Buttons[4].setOnClickListener(this);
Buttons[5].setOnClickListener(this);
Buttons[6].setOnClickListener(this);
Buttons[7].setOnClickListener(this);
Buttons[8].setOnClickListener(this);
Buttons[9].setOnClickListener(this);
Buttons[10].setOnClickListener(this);
Buttons[11].setOnClickListener(this);
}
public static int Background_Total = 8;
public final static int[] Backgrounds = { R.drawable.ic_launcher };
public final static int[] Game_Board = {
0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };
@Override
public void onClick(View v) {
for (final int but = 0; but < Button_Count; but++) {
if (v == Buttons[but]) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
Buttons[but].setBackgroundResource(Backgrounds[Game_Board[but]]);
}
public void onFinish() {
Buttons[but].setBackgroundResource(android.R.drawable.btn_default);
}
}.start();
if (Game_Board[0] == Game_Board[2])
Buttons[0].setEnabled(false);
Buttons[2].setEnabled(false);
}
}
}
}
答案 0 :(得分:2)
您通常希望将数据与其表示分开。这有许多明显的好处,其中一个是简单的数据测试,而不必关心数据的可视化表示。
首先,您需要将按钮存储在数组中,如下所示:
public final static int BUTTON_COUNT = 12;
private Button[] buttons = new Button[BUTTON_COUNT];
Button[0] = (Button)findViewById( R.id.Button1 ); // Button 1
Button[1] = (Button)findViewById( R.id.Button2 ); // Button 2
Button[2] = (Button)findViewById( R.id.Button3 ); // Button 3
Button[3] = (Button)findViewById( R.id.Button4 ); // Button 4
Button[4] = (Button)findViewById( R.id.Button5 ); // Button 5
Button[5] = (Button)findViewById( R.id.Button6 ); // Button 6
Button[6] = (Button)findViewById( R.id.Button7 ); // Button 7
Button[7] = (Button)findViewById( R.id.Button8 ); // Button 8
Button[8] = (Button)findViewById( R.id.Button9 ); // Button 9
Button[9] = (Button)findViewById( R.id.Button10 ); // Button 10
Button[10] = (Button)findViewById( R.id.Button11 ); // Button 11
Button[11] = (Button)findViewById( R.id.Button12 ); // Button 12
这将大大增强您使用它们的方式,正如您将在onClick()中看到的那样。
接下来,您需要定义所需的独特背景数量,以及代表每个背景的图像:
public final static int BACKGROUND_TOTAL = 8;
public final static int[] BACKGROUNDS = {
R.drawable.ic_launcher, // Image 0
R.drawable.ic_launcher2, // Image 1
R.drawable.ic_launcher3, // Image 2
R.drawable.ic_launcher4, // Image 3
R.drawable.ic_launcher5, // Image 4
R.drawable.ic_launcher6, // Image 5
R.drawable.ic_launcher7, // Image 6
R.drawable.ic_launcher8 // Image 7
};
您还需要定义“游戏板”的外观。这将是一个图像与每个按钮“关联”。这可以通过百万种不同的方式完成,但作为一个例子,让我们使用一个固定的数组。请注意,每个条目都与您的一个按钮匹配:
public final static int[] GAME_BOARD = {
0, // Button 1
0, // Button 2
1, // Button 3
1, // Button 4
2, // Button 5
2, // Button 6
3, // Button 7
3, // Button 8
4, // Button 9
4, // Button 10
5, // Button 11
5, // Button 12
};
这里的每个值都是BACKGROUNDS数组中的“索引”。因此所有值必须介于0和(BACKGROUND_TOTAL-1)之间。请注意,我刚刚添加了连续对,但显然对于真实游戏,您需要在此处生成随机值。在上面的例子中,按钮3将使用图像1,按钮9将使用图像4,依此类推。
有了所有这些信息,这就是你的onClick的样子:
@Override
public void onClick(View v) {
if ( v == buttons[0] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[0].setBackgroundResource( BACKGROUNDS[GAME_BOARD[0]] );
}
public void onFinish() {
buttons[0].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[1] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[1].setBackgroundResource( BACKGROUNDS[GAME_BOARD[1]] );
}
public void onFinish() {
buttons[1].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[2] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[2].setBackgroundResource( BACKGROUNDS[GAME_BOARD[2]] );
}
public void onFinish() {
buttons[2].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[3] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[3].setBackgroundResource( BACKGROUNDS[GAME_BOARD[0]] );
}
public void onFinish() {
buttons[3].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[4] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[4].setBackgroundResource( BACKGROUNDS[GAME_BOARD[4]] );
}
public void onFinish() {
buttons[4].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[5] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[5].setBackgroundResource( BACKGROUNDS[GAME_BOARD[5]] );
}
public void onFinish() {
buttons[5].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[6] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[6].setBackgroundResource( BACKGROUNDS[GAME_BOARD[6]] );
}
public void onFinish() {
buttons[6].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[7] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[7].setBackgroundResource( BACKGROUNDS[GAME_BOARD[7]] );
}
public void onFinish() {
buttons[7].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[8] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[8].setBackgroundResource( BACKGROUNDS[GAME_BOARD[8]] );
}
public void onFinish() {
buttons[8].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[9] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[9].setBackgroundResource( BACKGROUNDS[GAME_BOARD[9]] );
}
public void onFinish() {
buttons[9].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[10] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[10].setBackgroundResource( BACKGROUNDS[GAME_BOARD[10]] );
}
public void onFinish() {
buttons[10].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[11] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[11].setBackgroundResource( BACKGROUNDS[GAME_BOARD[11]] );
}
public void onFinish() {
buttons[11].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[12] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[12].setBackgroundResource( BACKGROUNDS[GAME_BOARD[12]] );
}
public void onFinish() {
buttons[12].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
}
最后,您可以简单地使用以下内容来测试两个图像,而不是匹配图像 按钮具有相同的背景:
if ( GAME_BOARD[button1] == GAME_BOARD[button2] )
// disable both buttons
在这种情况下,button1和button2应该是其数组中按钮的索引值。
虽然这是一个粗略的例子,但它应该让你以一种不同的,更恰当的方式思考问题。祝你好运!
答案 1 :(得分:0)
你的逻辑可能不应该依赖于按钮的背景图像,它们是UI元素,它们应该与游戏的逻辑分离(关注点分离)。
我要做的是保留在内存中(可能在Application
中?)一个“知道”哪个图像被设置为每个按钮的背景的结构,并使用它来比较和驱动禁用链接按钮:您可以使用您编写的方法来比较两个图像对象(可能来自某种ID?),然后相应地设置按钮,而不是尝试比较两个UI元素,而不是尝试比较两个UI元素。
除了其他好处(关注点分离,更清晰的设计等),这将使您的逻辑可测试。