- package com.ntlab.irisserver.entities;
-
- import com.ntlab.irisserver.models.KeywordManager;
-
- import java.util.*;
-
- public class Game {
-
- private Map<Member, List<Integer>> assignments = new HashMap<>();//<Member, List<dno>>
- private Map<Integer, Drawing> drawingList = new HashMap<>();//<dno,Drawing>
- private Map<Integer, String> keywordList = new HashMap<>();//<dno, keyword>
- private Map<Integer, Cell> cellList = new HashMap<>();//<cno, Cell>
-
- private List<Integer> map = new ArrayList<>();//cno順にdnoを管理
- private List<String> color = new ArrayList<>();//cno順にr,g,b,dを管理
- private List<Turn> turnList = new ArrayList<>();
-
- private Turn nowTurn = null;//現在のターン
- private DrawingController drawingController = null;
- private Settings settings = null;
-
- public Game(Room room, String[] keywords) {
-
- room.setGame(this);
- this.settings = room.getSettings();
- drawingController = new DrawingController(room, room.getMembers(), this);
-
- List<Member> memberList = room.getMembers();
- int num = 16/memberList.size();//一人あたりが確実に採用されるイラスト枚数
- int cnt = 0;
- for(int i=0; i<memberList.size(); i++){
- List<Integer> dnoList = new ArrayList<>();//一人が描くイラストのdnoリスト
- for(int j=0; j<num; j++){
- dnoList.add(cnt);
- cnt++;
- }
- assignments.put(memberList.get(i), dnoList);
- }
- int remainder = 0;//残りの割り当て枚数
- if(16%memberList.size()!=0) remainder = ((num+1)* memberList.size()) - cnt;
-
- for(int i=0; i<remainder; i++){
- List<Integer> dnoList = assignments.get(memberList.get(i));
- dnoList.add(cnt);
- cnt++;
- assignments.put(memberList.get(i), dnoList);
- }
-
- for(int i=0; i<16; i++) map.add(i);
- Collections.shuffle(map);//0~15のdnoをランダムにマップに割り振る
- System.out.println(map);
- //r:6 b:5 g:4 d:1
- for(int i=0; i<6; i++) color.add("r");
- for(int i=0; i<5; i++) color.add("b");
- for(int i=0; i<4; i++) color.add("g");
- color.add("d");
- Collections.shuffle(color);//r,b,g,dをランダムにマップに割り振る
-
- List<String> randKeys = Arrays.asList(keywords);//コンストラクタの引数で受け取ったキーワードをリストに変換
- Collections.shuffle(randKeys);//キーワードをシャッフル
-
- //Cellのインスタンス作成
- for(int i=0; i<16; i++){
- Cell c = new Cell();
- cellList.put(i, c);
- c.setCno(i);
- c.setColor(color.get(i));
- c.setDno(map.get(i));
-
- //今回のゲームで使用するキーワードを追加
- keywordList.put(i, randKeys.get(i));//(dno, キーワード)
- }
- }
-
- public DrawingController getDrawingController() {
- return drawingController;
- }
-
- public Drawing getDrawing(int dno) {
- Drawing d = drawingList.get(dno);
- return d;
- }
-
- public Map<Integer, Drawing> getDrawings(){
- return drawingList;
- }
-
- public Drawing putDrawing(int dno, Drawing drawing) {
- Drawing d = drawingList.put(dno, drawing);
- drawingController.update();
- return d;
- }
-
- public String getKeyword(int dno) {
- String keyword = keywordList.get(dno);
- return keyword;
- }
-
- public List<String> getKeywords() {
- List<String> keywords = new ArrayList<>();
- for(int i=0; i<16; i++){
- keywords.add(keywordList.get(map.get(i)));
- }
- return keywords;
- }
-
- public List<Boolean> getOpens(){
- List<Boolean> opens= new ArrayList<>();
- for(int i=0; i<16; i++){
- Cell cell = cellList.get(i);
- boolean isOpen = cell.getIsOpen();
- opens.add(isOpen);
- }
- return opens;
- }
-
- public Map<Member, List<Integer>> getAssignments(){
- return assignments;
- }
-
- public List<Integer> getMap(){
- return map;
- }
- public List<String> getColor(){
- return color;
- }
-
- public Settings getSettings(){
- return this.settings;
- }
-
- public void createTurn(){
- nowTurn = new Turn();
- if(turnList.size()%2==0){//偶数ターンなら青い色,奇数ターンは赤色
- nowTurn.setTeam("b");
- }else{
- nowTurn.setTeam("r");
- }
- this.turnList.add(nowTurn);
- }
-
- public Turn getTurn(Integer num){
- return turnList.get(num);
- }
-
- public Integer getNowTurn(){//現在何ターン目か取得
- return turnList.size()-1;
- }
-
- public Cell getCell(Integer cno){
- return cellList.get(cno);
- }
- }