Как использовать рандомизацию, чтобы при нажатии кнопки вы попадали на случайный экран - PullRequest
0 голосов
/ 21 сентября 2018

Я искал ответ на этот вопрос, находясь в лаборатории компьютерных наук.Мы используем Android Studio для этого приложения.

То, что я хочу сделать, - это использовать рандомизацию, чтобы набор экранов был рандомизирован при нажатии кнопки.Мой дуэт работает над приложением для игры в кости, и у нас была идея сделать шесть разных экранов для каждой из сторон матрицы.По сути, когда мы нажимаем кнопку, чтобы «бросить кости», она на секунду задумывается, а затем приводит вас на случайную страницу с изображением числа на кубике, который вы получили.

Это невероятно странно, и я как минимум 3 часа искал решение этой проблемы, но безрезультатно.Если кому-то нужна дополнительная информация о проблеме (потому что я не знаю, как правильно ее сформулировать), просто спросите меня.

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Использование нескольких действий здесь не требуется (и значительно замедлит работу вашего приложения).Если вы хотите показать другое изображение на основе результата сгенерированного случайного числа, просто .setImageResource () для вашего просмотра изображений на основе результата этого случайного числа.

В приведенном ниже примере я отделил генерацию случайных чисел (метод generateRandomInt () , который хранит случайное целое число в переменной thisRoll ) и вызывал его только тогда, когда changeImageView () метод запускается по клику.

public void changeImageView(View view){
    generateRandomInt();

    if (thisRoll == 1) {
        mainImage.setImageResource(R.drawable.s1);
    } else if (thisRoll == 2) {
        mainImage.setImageResource(R.drawable.s2);
    } else if (thisRoll == 3) {
        mainImage.setImageResource(R.drawable.s3);
    } else if (thisRoll == 4) {
        mainImage.setImageResource(R.drawable.s4);
    } else if (thisRoll == 5) {
        mainImage.setImageResource(R.drawable.s5);
    } else {
        mainImage.setImageResource(R.drawable.s6);
    }
    Toast.makeText(DiceRollActivity.this, thisRoll + " ...But The House Always Wins!", Toast.LENGTH_SHORT).show();
}
0 голосов
/ 21 сентября 2018

Просто используйте Random.nextInt () , чтобы получить случайное число до 6, и используйте его, чтобы выбрать одно изображение из 6 для каждой стороны кристалла.Вам не нужно создавать 6 разных экранов, вам просто нужно 6 разных изображений, где число указывает, какое изображение использовать.Например:

// A list of drawables you've defined in /res/drawable folder for each die side
final int[] images = new int[6] {
    R.drawable.die_side_1,
    R.drawable.die_side_2,
    R.drawable.die_side_3,
    R.drawable.die_side_4,
    R.drawable.die_side_5,
    R.drawable.die_side_6
};

int random = Random.nextInt(6);       // Get random value, 0-5
int dieSideDrawable = images[random]; // Pick image to show based on random value
mDieImageView.setImageResource(dieSideDrawable); // Show image on an image view

Надеюсь, это поможет!

0 голосов
/ 21 сентября 2018

Я бы рекомендовал использовать Фрагменты для достижения этой цели.

создать список фрагментов

ArrayList<Fragment> fragmentList = new ArrayList<>();

Теперь используйте java-класс Random для генерации случайного числа.

Random rand = new Random();

int  n = rand.nextInt(fragmentList.size());

, тогда просто покажите этот фрагмент.

getSupportFragmentManager()
                .beginTransaction()
                .replace(containerViewId, fragmentList.get(n))
                .addToBackStack(null)
                .commit();
0 голосов
/ 21 сентября 2018

Самый простой способ сделать именно то, что вы хотите, это поместить действия в массив и выбрать, используя метод Random class 'nextInt, чтобы выбрать подходящее действие из массива.

При этом, скорее всего, вы хотите создать одно действие с двумя изображениями, и вместо того, чтобы выбрать действие или фрагмент для отображения, вы выбрали бы изображения, которые вы загружаете в действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...