package com.novoda.simonsays.game; import android.view.View; import java.util.ArrayList; import java.util.List; import java.util.Random; import static android.view.KeyEvent.*; class RoundCreator { private static final int[] KEYS = {KEYCODE_BUTTON_Y, KEYCODE_BUTTON_X, KEYCODE_BUTTON_B, KEYCODE_BUTTON_A}; private static final List<Integer> SEQUENCE = new ArrayList<>(); private final Random random = new Random(); private final List<View> views; RoundCreator(List<View> views) { this.views = views; } public Round createRound(int roundNumber) { incrementSequence(roundNumber); return resumeRound(roundNumber); } public Round resumeRound(int roundNumber) { List<View> orderedViews = new ArrayList<>(); List<Integer> orderedKeys = new ArrayList<>(); for (Integer position : SEQUENCE) { orderedViews.add(this.views.get(position)); orderedKeys.add(KEYS[position]); } Round.ViewSequence viewSequence = new Round.ViewSequence(orderedViews); Round.KeySequence keySequence = new Round.KeySequence(orderedKeys); return new Round(roundNumber, viewSequence, keySequence, getSpeedInMillis(roundNumber)); } private void incrementSequence(int roundNumber) { if (roundNumber == 1) { SEQUENCE.clear(); } int randomPosition = random.nextInt(this.views.size()); SEQUENCE.add(randomPosition); } private long getSpeedInMillis(int roundNumber) { return (long) (3000 / roundNumber); } }