package tv.dyndns.kishibe.qmaclone.client.game.judge; import java.util.logging.Level; import java.util.logging.Logger; import tv.dyndns.kishibe.qmaclone.client.game.left.AnswerPopup; import tv.dyndns.kishibe.qmaclone.client.geom.Point; import tv.dyndns.kishibe.qmaclone.client.geom.Polygon; import tv.dyndns.kishibe.qmaclone.client.geom.PolygonException; import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; public class JudgeClick implements Judge { private static final Logger logger = Logger.getLogger(JudgeClick.class.toString()); private static final ImmutableSet<String> INVALID_ANSWER = ImmutableSet.of( AnswerPopup.LABEL_ANSWERED, AnswerPopup.LABEL_NO_ANSWER, AnswerPopup.LABEL_TIME_UP); @Override public boolean judge(PacketProblem problem, String playerAnswer) { if (Strings.isNullOrEmpty(playerAnswer) || INVALID_ANSWER.contains(playerAnswer)) { return false; } Point point = Point.fromString(playerAnswer); // 無回答の場合に画面表示でエラーが発生するバグへの対処 // BugTrack-QMAClone/382 - QMAClone wiki // http://kishibe.dyndns.tv/qmaclone/wiki/wiki.cgi?page=BugTrack%2DQMAClone%2F382 if (point == null) { return false; } for (String answer : problem.getShuffledAnswerList()) { Polygon polygon; try { polygon = Preconditions.checkNotNull(Polygon.fromString(answer)); } catch (PolygonException e) { logger.log(Level.WARNING, "ポリゴンデータが不正です", e); continue; } if (polygon.contains(point)) { return true; } } return false; } }