package tv.dyndns.kishibe.qmaclone.client.game.shuffler; import java.util.List; import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; public class ShufflerSenmusubi implements Shuffleable { private final int maxNumberOfAnswers; public ShufflerSenmusubi(int maxNumberOfAnswers) { this.maxNumberOfAnswers = maxNumberOfAnswers; } @Override public void shuffle(PacketProblem problem, int[] answerOrder, int[] choiceOrder) { Preconditions.checkNotNull(answerOrder); Preconditions.checkNotNull(choiceOrder); if (answerOrder.length < 3 || choiceOrder.length < 3) { problem.shuffledAnswers = null; problem.shuffledChoices = null; return; } List<String> answers = Lists.newArrayList(); List<String> choices = Lists.newArrayList(); // 線結び・グループ分け共用のため特殊処理 int numberOfAnswers = Math.min(answerOrder.length, problem.numberOfDisplayedChoices == 3 ? 3 : maxNumberOfAnswers); for (int i = 0; i < numberOfAnswers; ++i) { answers.add(problem.answers[answerOrder[i]]); choices.add(problem.choices[answerOrder[i]]); } problem.shuffledAnswers = shuffle(answers, answerOrder); problem.shuffledChoices = shuffle(choices, choiceOrder); } private String[] shuffle(List<String> strings, int[] order) { List<String> result = Lists.newArrayList(); for (int index : order) { if (index < strings.size()) { result.add(strings.get(index)); } } return result.toArray(new String[0]); } }