package com.ntlab.irisserver.entities; import java.util.HashMap; import java.util.List; import java.util.Map; public class DrawingController { private int stage = 0; private int maxstage; private Game game; private Map<Member, List<Integer>> assignments; private List<Member> members; private IStateListener stateListener; //ニックネームからメンバーを特定するマップ private Map<String,Member> membersMap= new HashMap<>(); public DrawingController(IStateListener stateListener, List<Member> members, Game game) { this.members = members; this.stateListener = stateListener; this.game = game; assignments = game.getAssignments(); //16枚の絵をそろえるために必要なステージ数を計算 16/人数 端数切り上げ maxstage = (16 + members.size() - 1)/members.size(); for(Member mem :members) { String nick = mem.getNickname(); membersMap.put(nick,mem); } } //絵がアップロードされたときに、ステージを進めるか確認する public void update(){ boolean canUpdate = true; //参加者全員が絵を書き終わっているかを確認 for(Member mem :members) { int dno = getDno(mem.getNickname()); Drawing drawing = game.getDrawing(dno); //まだ描けていない絵があればステージ変更しない if(drawing == null){ canUpdate = false; } } //全員描き終わていれば、ステージを進める if(canUpdate) { stage += 1; //ゲームに必要な枚数がそろうと、roomのstateを「お絵描き中」から「ゲーム中」に変更 if(stage == maxstage){ stateListener.changeState(); } } } //pathパラメーターを引数にするので、memberではなくてString //nicknameから書いてほしいdnoを返す public int getDno(String nickname) { Member mem = membersMap.get(nickname); List<Integer> dnoList = assignments.get(mem); int dno = dnoList.get(stage); return dno; } }