Я создал игру LightsOut для Java-курса и в качестве способа изучения Android я пытаюсь перестроить ее как приложение.
Основная деятельность состоит из сетки переключателей.Когда кнопка «проверена», она и ее соседние кнопки переключаются.Когда все кнопки выключены, игра выигрывается.Я заставил его работать до этого момента, но код ужасен.
Я хотел бы очистить код, создав двумерный массив кнопок-переключателей.Как у меня это на данный момент я просто объявляю каждую кнопку индивидуально.Это делает для больших блоков избыточного кода и без простого способа масштабирования.
Первоначально, в Java, я сделал это:
buttons = new LightButton[xCor][xCor];
for (int x = 0; x < xCor; x++) {
for (int y = 0; y < xCor; y++) {
buttons[x][y] = new LightButton(this, x, y);
panel.add(buttons[x][y]);
}
}
Где xCor был основан на пользовательском вводе до созданияигровое поле.Это облегчило инициализацию и проверку статуса игры путем обхода массива.Я просто не нашел способ сделать это с Android.
Итак, есть ли способ создать массив / список кнопок переключения на основе ввода пользователя?
Вот действие:
открытый класс LightsOutActivity расширяет Activity, реализует OnClickListener {
protected ToggleButton[][] buttonArray;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
buttonArray = new ToggleButton[4][4];
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
buttonArray[x][y] = new ToggleButton(this);
LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1.0f);
buttonArray[x][y].setLayoutParams(params);
((ViewGroup) findViewById(R.layout.main)).addView(buttonArray[x][y]);
}
}
setContentView(findViewById(R.layout.main));
}
Немедленно приводит к принудительному закрытию.Единственное представление в R.layout.main - это линейное расположение.На данный момент я жестко закодировал размер массива.