diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java index 1d1fd44..7057807 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java @@ -10,8 +10,10 @@ import android.view.View; import android.widget.TextView; +import org.ntlab.irisclient.models.Member; import org.ntlab.irisclient.viewmodels.DrawingStateViewModel; +import java.io.ByteArrayOutputStream; import java.util.List; public class DrawingActivity extends AppCompatActivity implements View.OnClickListener { @@ -20,6 +22,8 @@ private DrawingStateViewModel drawingStateViewModel; private List keywordList; + private Integer drawingNum; + private Integer drawingNow = 0; @Override protected void onCreate(Bundle savedInstanceState) { @@ -31,6 +35,7 @@ String rid = iris.getRid(); String nickName = iris.getNickname(); Boolean bMaster = iris.isMaster(); + List memberList = iris.getMemberList(); drawingStateViewModel= new ViewModelProvider(this).get(DrawingStateViewModel.class); //viewModelに必用な情報をセット @@ -42,10 +47,15 @@ findViewById(R.id.eraserButton).setOnClickListener(this);//消しゴムボタン TextView textKeyword =(TextView)findViewById(R.id.textKeyword);//keywordのTextView + TextView textMemberNum = (TextView)findViewById(R.id.drawingNowText);//残りのイラスト枚数のTextView drawingCanvas = (DrawingCanvas) findViewById(R.id.drawingCanvas); - //getKeywords + //残りのイラスト枚数の表示 + drawingNum = 16 / 2; // 一人あたりが描く枚数(テスト部屋用,部屋作成からスタートする場合はこの行をコメントアウトして ↓ ふたつのコメントを解除) + //drawingNum = 16 / memberList.size(); // 一人あたりが描く枚数 + //if (16 % memberList.size() != 0) drawingNum++; // 余りが出た場合プラス1枚 + //getKeywords drawingStateViewModel.getKeywords().observe(this, new Observer>(){ @Override public void onChanged(List keywords) { @@ -59,6 +69,8 @@ public void onChanged(Integer dno) { String keyword = keywordList.get(dno); textKeyword.setText("Dno: " + dno + ", Keyword: " + keyword); + drawingNow++; + textMemberNum.setText(""+drawingNow+"/"+drawingNum); } }); @@ -80,7 +92,7 @@ //getKeywordの呼び出し drawingStateViewModel.init(); //タイマースタート呼び出し - drawingStateViewModel.start(500,iris); + drawingStateViewModel.start(500,(Iris)getApplication()); } @Override diff --git a/app/src/main/java/org/ntlab/irisclient/MemberListAdapter.java b/app/src/main/java/org/ntlab/irisclient/MemberListAdapter.java index 2a5a125..95078ed 100644 --- a/app/src/main/java/org/ntlab/irisclient/MemberListAdapter.java +++ b/app/src/main/java/org/ntlab/irisclient/MemberListAdapter.java @@ -10,6 +10,7 @@ import org.ntlab.irisclient.models.Member; +import java.util.ArrayList; import java.util.List; public class MemberListAdapter extends ArrayAdapter { @@ -21,6 +22,9 @@ private final int itemLayoutId; private final List memberList; private final List dcList; + private List redTeam = new ArrayList<>(); + private List blueTeam = new ArrayList<>(); + private List grayTeam = new ArrayList<>(); final int redColor = Color.rgb(172, 32,32); final int blueColor = Color.rgb(32, 32, 172); @@ -51,21 +55,30 @@ convertView.setTag(holder); + // 背景色を変える convertView.setBackgroundColor(grayColor); - /*for(int i = 0 ; i < dcList.size();i++){ + redTeam.clear(); + blueTeam.clear(); + grayTeam.clear(); + for(int i = 0 ; i < dcList.size();i++){ if(dcList.get(i).getBelongs().equals("r")) { - convertView.setBackgroundColor(redColor); + redTeam.add(i); + }else if(dcList.get(i).getBelongs().equals("b")) { + blueTeam.add(i); + }else{ + grayTeam.add(i); } - }*/ + } + if (redTeam.contains(position)) { + convertView.setBackgroundColor(redColor); + }else if(blueTeam.contains(position)){ + convertView.setBackgroundColor(blueColor); + } else{ + convertView.setBackgroundColor(grayColor); + } - /*if (position == 0) { - // 背景色を変える - convertView.setBackgroundColor(Color.rgb(255, 127, 255)); - }else{ - convertView.setBackgroundColor(Color.rgb(0, 125, 0)); - }*/ } else { holder = (ViewHolder) convertView.getTag(); diff --git a/app/src/main/java/org/ntlab/irisclient/entities/TurnJson.java b/app/src/main/java/org/ntlab/irisclient/entities/TurnJson.java index d1da638..f11b88e 100644 --- a/app/src/main/java/org/ntlab/irisclient/entities/TurnJson.java +++ b/app/src/main/java/org/ntlab/irisclient/entities/TurnJson.java @@ -10,6 +10,7 @@ private String team; private int max; private int turnstate; //turn内でスパイマスターと諜報員の操作の切り替えに使用(0:スパイマスター, 1:諜報員) + private int gamestate; //0:turn継続, 1:turn終了, 2:game終了 private List openlist = new ArrayList<>(); //--------------------------------------------------------- @@ -29,6 +30,8 @@ public int getTurnstate() {return turnstate;} + public int getGamestate() {return gamestate;} + public List getOpenListAll() {return openlist;} //リストそのものを返す。 //--------------------------------------------------------- @@ -48,6 +51,8 @@ public void setTurnstate(int turnstate) {this.turnstate = turnstate;} + public void setGamestate(int gamestate) {this.gamestate = gamestate;} + public void putHint(String rid, int tno){ this.hint = hint; this.max = max; diff --git a/app/src/main/java/org/ntlab/irisclient/models/Game.java b/app/src/main/java/org/ntlab/irisclient/models/Game.java index b41fdcc..7c5bd9a 100644 --- a/app/src/main/java/org/ntlab/irisclient/models/Game.java +++ b/app/src/main/java/org/ntlab/irisclient/models/Game.java @@ -12,7 +12,7 @@ private Map cellList = new HashMap<>();// private List map = new ArrayList<>();//cno順にdnoを管理 private List colorList = new ArrayList<>();//cno順にr,g,b,dを管理 - private int gamestate = 0; //引いたカードによって値が変化 (0:turn継続、1:turn終了、2:game終了) *ライブデータのほうがいい? + private int gamestate = 0; //引いたカードによって値が変化 (0:turn継続、1:turn終了、2:game終了) *GameViewModelでLiveDateで監視中 //ゲッター public Map getDrawingList() {return drawingList;} diff --git a/app/src/main/java/org/ntlab/irisclient/models/Turn.java b/app/src/main/java/org/ntlab/irisclient/models/Turn.java index 7995657..4863a96 100644 --- a/app/src/main/java/org/ntlab/irisclient/models/Turn.java +++ b/app/src/main/java/org/ntlab/irisclient/models/Turn.java @@ -9,6 +9,7 @@ private String team; private int max; private int turnstate; //turn内でスパイマスターと諜報員の操作の切り替えに使用(0:スパイマスター, 1:諜報員) + private int gamestate; //0:turn継続, 1:turn終了, 2:game終了 private List openlist = new ArrayList<>(); //--------------------------------------------------------- @@ -28,6 +29,8 @@ public int getTurnstate() {return turnstate;} + public int getGamestate() {return gamestate;} + public List getOpenListAll() {return openlist;} //リストそのものを返す。 //--------------------------------------------------------- @@ -47,6 +50,8 @@ public void setTurnstate(int turnstate) {this.turnstate = turnstate;} + public void setGamestate(int gamestate) {this.gamestate = gamestate;} + //--------------------------------------------------------- //openlist操作 diff --git a/app/src/main/java/org/ntlab/irisclient/resources/GameRest.java b/app/src/main/java/org/ntlab/irisclient/resources/GameRest.java index d76203f..dd1d4a8 100644 --- a/app/src/main/java/org/ntlab/irisclient/resources/GameRest.java +++ b/app/src/main/java/org/ntlab/irisclient/resources/GameRest.java @@ -2,6 +2,7 @@ import com.squareup.moshi.Json; +import org.ntlab.irisclient.entities.GameJson; import org.ntlab.irisclient.entities.RoomJson; import org.ntlab.irisclient.entities.TurnJson; @@ -17,7 +18,14 @@ public interface GameRest { - //-------------------------------------- + //----------------------------------------------- + //Gameの開始に必要な情報を取得する。 + @GET("/{rid}/game") + Call getGame( + @Path("rid") String rid + ); + + //----------------------------------------------- // 今回のゲームで使われる16個のお題をdno順のリストで取得するメソッド @GET("/{rid}/game/keywords") Call getkeywords( @@ -34,7 +42,7 @@ //----------------------------------------------- // カードの色を取得するメソッド @GET("/{rid}/game/color") - Call> getColor( + Call> getColorList( @Path("rid") String rid ); diff --git a/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java b/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java index 18ee92e..aaa7c08 100644 --- a/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java +++ b/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java @@ -71,7 +71,7 @@ //-------------------------------------------------- //退出するメソッド @DELETE("rooms/{rid}/members/{nickname}") - Call deleteMember( + Call deleteMember( @Path("rid") String rid, @Path("nickname") String nickname ); diff --git a/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java b/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java index fc27d90..1138b61 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java @@ -1,7 +1,7 @@ package org.ntlab.irisclient.viewmodels; +import org.ntlab.irisclient.entities.GameJson; import org.ntlab.irisclient.entities.TurnJson; -import org.ntlab.irisclient.models.Game; import org.ntlab.irisclient.resources.GameRest; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -19,7 +19,8 @@ //フィールド private String rid; - private int tno; + private Integer tno; + private Integer cno; private String team; private String hint; private Integer max; @@ -28,13 +29,16 @@ final private MutableLiveData turnsMutableLiveData; final private MutableLiveData turnMutableLiveData; final private MutableLiveData> colorMutableLiveData; + final private MutableLiveData> opensMutableLiveData; final private MutableLiveData> mapMutableLiveData; - final private Game game = new Game(); + final private MutableLiveData imageMutableLiveData; + final private GameJson game = new GameJson(); final private Retrofit retrofit; //更新比較用フィールド private String turnsPreData = null; private TurnJson turnPreData = null; + private List opensPreData = null; //------------------------------------------------------------------ //コンストラクタ @@ -42,7 +46,9 @@ this.turnsMutableLiveData = new MutableLiveData<>(); this.turnMutableLiveData = new MutableLiveData<>(); this.colorMutableLiveData = new MutableLiveData<>(); + this.opensMutableLiveData = new MutableLiveData<>(); this.mapMutableLiveData = new MutableLiveData<>(); + this.imageMutableLiveData = new MutableLiveData<>(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/iris/") .addConverterFactory(JacksonConverterFactory.create()) @@ -54,6 +60,9 @@ public void setRid(String rid) { this.rid = rid; } +// public void setCno(Integer cno) { +// this.cno = cno; +// } public void putHint(String hint, int max) { this.hint = hint; @@ -72,26 +81,33 @@ public LiveData> getColorLiveData() { return this.colorMutableLiveData; } + public LiveData> getOpenLiveData() { + return this.opensMutableLiveData; + } public LiveData> getMapLiveData() { return this.mapMutableLiveData; } - public void getGame() { - return; + public LiveData getImageLiveData() { + return this.imageMutableLiveData; } -// public Integer getTurnNumber(){ -// return tno; -// } + public GameJson getGame() { + return game; + } + //----------------------------------------------------------------------------- // updates public void init() { updateColor(rid); updateMap(rid); + updateImage(rid); } + @Override public void update() { updateTurns(rid); updateTurn(rid); + updateOpens(rid); } //r,bの取得(今どちらのチームかの判別) @@ -157,9 +173,9 @@ } //カードのカラー(r,b,g,d)の取得 - public void updateColor(String rid) { + private void updateColor(String rid) { final GameRest gameRest = retrofit.create(GameRest.class); - Call> call = gameRest.getColor(rid); + Call> call = gameRest.getColorList(rid); call.enqueue(new Callback>() { @Override @@ -177,8 +193,39 @@ }); } + //現在開いているすべてのカードを取得 + public void updateOpens(String rid) { + final GameRest gameRest = retrofit.create(GameRest.class); + Call> call = gameRest.getOpens(rid); + + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()){ + if(opensPreData == null){ + //初回代入 + opensMutableLiveData.setValue(response.body()); + opensPreData = response.body(); + }if(response.body().equals(turnPreData)){ + //値が一緒なら書き換えない + }else{ + //値が異なるときのみライブデータを上書き + opensMutableLiveData.setValue(response.body()); + opensPreData = response.body(); + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + System.out.println("通信失敗:changeBelongsAndMaster"); + System.out.println(t); + } + }); + } + //カードの並び順の取得 - public void updateMap(String rid) { + private void updateMap(String rid) { final GameRest gameRest = retrofit.create(GameRest.class); Call> call = gameRest.getMap(rid); @@ -198,4 +245,25 @@ }); } + //カード(画像)の取得 + private void updateImage(String rid) { + final GameRest gameRest = retrofit.create(GameRest.class); + Call call = gameRest.getGame(rid); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + imageMutableLiveData.setValue(response.body()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:changeBelongsAndMaster"); + System.out.println(t); + } + }); + } + } diff --git a/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java b/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java index 0290baa..2f1b834 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java @@ -23,10 +23,12 @@ //フィールド private String rid; + private boolean roomExist; + final private Retrofit retrofit; + final private RoomsRest roomsRest; final private MutableLiveData> membersLiveData; final private MutableLiveData settingsMutableLiveData; final private MutableLiveData stateLiveData; - final private Retrofit retrofit; //更新比較用フィールド private List sortedMembersList; @@ -43,6 +45,8 @@ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/iris/") .addConverterFactory(JacksonConverterFactory.create()) .build(); + this.roomsRest = retrofit.create(RoomsRest.class); + setRoomExist(true); } //----------------------------------------------------------------- @@ -50,6 +54,10 @@ public void setRid(String rid){ this.rid = rid; } + private void setRoomExist(boolean bool) { + this.roomExist = bool; + } + // getter public LiveData> getMembersLiveData() { return this.membersLiveData; @@ -60,7 +68,9 @@ public LiveData getStateLiveData() { return this.stateLiveData; } - + public boolean getRoomExist(){ + return this.roomExist; + } private boolean compareMembers(List a, List b) { int i; @@ -83,7 +93,6 @@ //全ての要素が一緒ならtrueを返す return true; } - private List sortMembersList(List oldMembers) { List sortedMembers = new ArrayList<>(); List> priorityInteger = new ArrayList<>(5); @@ -140,8 +149,6 @@ priorityInteger.get(i).forEach(num -> sortedMembers.add(oldMembers.get(num))); } - //System.out.println(sortedMembers); - //sortedMembers.forEach(k -> System.out.println(k.getNickname() + " " + k.getBelongs() + " " + k.isMaster())); return sortedMembers; } @@ -149,7 +156,7 @@ //各Activityでのボタン処理 //チーム&マスター変更 public void changeBelongsAndMaster(String rid, String nickname, String belongs, Boolean isMaster) { - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); + //final RoomsRest roomsRest = retrofit.create(RoomsRest.class); Call call = roomsRest.putMember(rid, nickname, belongs, isMaster); call.enqueue(new Callback() { @@ -167,15 +174,48 @@ }); } - //メンバー削除 + //メンバー削除(MemberActivityのみ) public void deleteMember(String rid, String nickname) { - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); - Call call = roomsRest.deleteMember(rid, nickname); + //final RoomsRest roomsRest = retrofit.create(RoomsRest.class); + Call call = roomsRest.deleteMember(rid, nickname); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()){ + System.out.println("通信成功:退出しました"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:"); + System.out.println(t); + } + }); + + } + + //部屋の削除(OwnerActivityのみ) + public void deleteRoom(String rid){ + Call call = roomsRest.deleteRooms(rid); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + setRoomExist(false); + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:deleteRoom"); + System.out.println(t); + } + }); } //スタートボタンの処理(OwnerActivityのみ) public void startDrawing(String rid, String nickname) { - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); + //final RoomsRest roomsRest = retrofit.create(RoomsRest.class); Call call = roomsRest.putState(rid,nickname,2); call.enqueue(new Callback() { @@ -193,9 +233,26 @@ }); } + //ランダムボタンの処理(OwnerActivityのみ) + public void randomTeam(String rid, String nickname) { + Call call = roomsRest.putMembers(rid, nickname); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + System.out.println("ランダムにチーム変更へ"); + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:randomTeam"); + System.out.println(t); + } + }); + } + //設定情報の変更処理(OwnerActivityのみ) public void changeSettings(String rid, boolean dTimer, int dTimerTimes, boolean gTimer, int gTimerTimes, int gTimerFTTimes) { - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); Call call = roomsRest.putSettings(rid, dTimer, dTimerTimes, gTimer, gTimerTimes, gTimerFTTimes); call.enqueue(new Callback() { @@ -223,8 +280,6 @@ //部屋の情報の更新(List) public void updateMembers(String rid) { - - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); Call> call = roomsRest.getRoomMember(rid); call.enqueue(new Callback>() { @@ -274,27 +329,16 @@ //設定情報の更新(Settings) public void updateSettings(String rid) { - - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); Call call = roomsRest.getSettings(rid); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()){ - + settingsMutableLiveData.setValue(response.body()); settingsPreData = response.body(); - /* - if(response.body().equals(settingsPreData)){ - //値が一緒なら書き換えない - }else{ - //値が異なるときのみライブデータを上書き - settingsMutableLiveData.setValue(response.body()); - settingsPreData = response.body(); - }*/ - } } @@ -306,7 +350,6 @@ //部屋の状態情報の更新(Integer) public void updateState(String rid) { - final RoomsRest roomsRest = retrofit.create(RoomsRest.class); Call call = roomsRest.getState(rid); call.enqueue(new Callback() { diff --git a/app/src/main/res/layout/activity_drawing.xml b/app/src/main/res/layout/activity_drawing.xml index 84e2276..265f6ac 100644 --- a/app/src/main/res/layout/activity_drawing.xml +++ b/app/src/main/res/layout/activity_drawing.xml @@ -39,7 +39,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.121" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/testText" + app:layout_constraintTop_toBottomOf="@+id/drawingNowText" app:layout_constraintVertical_bias="1.0" />