diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 17e02ce..dc21aea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,13 @@ + android:screenOrientation="landscape" > + + + + + + - - - - - - + android:screenOrientation="landscape" /> drawingList; // private List map; //cno順にdnoを管理(要するに絵の並び) private List colorList; //cno順にr,g,b,dを管理:カードごとの色 + private List nowOpenList; // コンストラクタ @@ -81,6 +82,27 @@ resources = getResources(); View view = inflater.inflate(R.layout.fragment_card_drawing, container, false); + // 現在のopenListを記録 + nowOpenList = new ArrayList(){ + { + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + add(false); + } + }; // ImageButton16個の型を使いまわしやすいように配列で使用 imageButtons = new ImageButton[] { @@ -138,6 +160,17 @@ } ); + gameViewModel.getEndStateLiveData().observe ( + getViewLifecycleOwner(), + endStateObserver -> { + System.out.println("kota: " + endStateObserver); + if(endStateObserver == 0) { + System.out.println("kota: ゲームが終了!!:" + endStateObserver); + finishGameAlertMake(myTeam, nowTurn); + } + } + ); + gameViewModel.getTurnsLiveData().observe ( getViewLifecycleOwner(), turnsObserver -> { @@ -325,8 +358,9 @@ * Observeして変更加わった度に呼ばれる **/ private void setOpen(List openList) { + for(int i=0; i< openList.size(); i++) { - if (openList.get(i) == true) { + if (openList.get(i) == true && nowOpenList.get(i) == false) { // オープンだったときの描画 if (colorList.get(i).contains("r")) { backColors[i].setBackground(resources.getDrawable(R.drawable.red_image)); @@ -341,9 +375,10 @@ backColors[i].setBackground(resources.getDrawable(R.drawable.black_image)); imageButtons[i].setVisibility(View.INVISIBLE); gameViewModel.sendEndState(); - finishGameAlertMake(i, myTeam, nowTurn); + //finishGameAlertMake(myTeam, nowTurn); } setAnime(i); + nowOpenList.set(i, true); } } } @@ -368,30 +403,10 @@ } /** - * アラートから呼ばれる、リアルタイムに裏返す処理 + * アラートから呼ばれる、裏返す通信処理 **/ private void setOpenRealTime(int cno, boolean isOK) { - // 裏返す処理 - if(isOK) { - if (colorList.get(cno).contains("r")) { - backColors[cno].setBackground(resources.getDrawable(R.drawable.red_image)); - imageButtons[cno].setVisibility(View.INVISIBLE); - } else if (colorList.get(cno).contains("b")) { - backColors[cno].setBackground(resources.getDrawable(R.drawable.blue_image)); - imageButtons[cno].setVisibility(View.INVISIBLE); - } else if (colorList.get(cno).contains("g")) { - backColors[cno].setBackground(resources.getDrawable(R.drawable.gray_image)); - imageButtons[cno].setVisibility(View.INVISIBLE); - } else if (colorList.get(cno).contains("d")) { - backColors[cno].setBackground(resources.getDrawable(R.drawable.black_image)); - imageButtons[cno].setVisibility(View.INVISIBLE); - finishGameAlertMake(cno, myTeam, nowTurn); - } - setAnime(cno); - } - gameViewModel.sendOpenList(cno); - } /** @@ -478,9 +493,11 @@ /** * 黒いカードがひかれて、ゲームが終わったときに呼ばれるアラート */ - private void finishGameAlertMake(int cno, String myTeam, String nowTurn) { + private void finishGameAlertMake(String myTeam, String nowTurn) { String strTitle; String strMessage; + System.out.println("ゲームが終わった時のmyTeam:" + myTeam); + System.out.println("ゲームが終わった時のmyTurn:" + nowTurn); if (myTeam == nowTurn) { strTitle = "Your Lose..."; diff --git a/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java b/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java index 8a352ff..8dfea6f 100644 --- a/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java @@ -85,7 +85,7 @@ } }); - gameViewModel.getmaxLiveData().observe(this, new Observer() { + gameViewModel.getMaxLiveData().observe(this, new Observer() { @Override public void onChanged(Integer new_HintMax) { hintMax = new_HintMax; 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 cf2eaba..b43e732 100644 --- a/app/src/main/java/org/ntlab/irisclient/models/Turn.java +++ b/app/src/main/java/org/ntlab/irisclient/models/Turn.java @@ -9,7 +9,7 @@ private String team; private int max; private int turnstate; //turn内でスパイマスターと諜報員の操作の切り替えに使用(0:スパイマスター, 1:諜報員) - private int gamestate; //0:turn継続, 1:turn終了, 2:game終了 + private int gamestate; //0:turn継続, 1:game終了 private List openlist = new ArrayList<>(); //--------------------------------------------------------- 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 6c22ade..0b72284 100644 --- a/app/src/main/java/org/ntlab/irisclient/resources/GameRest.java +++ b/app/src/main/java/org/ntlab/irisclient/resources/GameRest.java @@ -107,7 +107,7 @@ //----------------------------------------------- @GET("rooms/{rid}/game/turns/{tno}/Endstate") - Call getEndstate( + Call getEndState( @Path("rid") String rid, @Path("tno") Integer tno ); 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 edfbb91..873a44c 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java @@ -32,6 +32,7 @@ final private MutableLiveData maxMutableLiveData; final private MutableLiveData turnNumberMutableLiveData; final private MutableLiveData turnStateMutableLiveData; + final private MutableLiveData endStateMutableLiveData; final private MutableLiveData> colorMutableLiveData; final private MutableLiveData> opensMutableLiveData; final private MutableLiveData> mapMutableLiveData; @@ -49,6 +50,7 @@ private Integer maxPreData = null; private Integer turnNumberPreData = null; private Integer turnStatePreData = null; + private Integer endStatePreData = null; private List opensPreData = null; private Boolean[] QPreData = null; @@ -62,6 +64,7 @@ this.maxMutableLiveData = new MutableLiveData<>(); this.turnNumberMutableLiveData = new MutableLiveData<>(); this.turnStateMutableLiveData = new MutableLiveData<>(); + this.endStateMutableLiveData = new MutableLiveData<>(); this.mapMutableLiveData = new MutableLiveData<>(); this.colorMutableLiveData = new MutableLiveData<>(); this.opensMutableLiveData = new MutableLiveData<>(); @@ -81,7 +84,6 @@ public void setRid(String rid) { this.rid = rid; //初期値呼び出し - updateTurnNumber(); testGame(); // 通信をして game に値をセットさせる関数 startColor(); startMap(); @@ -96,13 +98,16 @@ public LiveData getTurnStateLiveData() { return this.turnStateMutableLiveData; } + public LiveData getEndStateLiveData() { + return this.endStateMutableLiveData; + } public LiveData getHintLiveData() { return this.hintMutableLiveData; } public LiveData> getOpenListLiveData() { return this.openListMutableLiveData; } - public LiveData getmaxLiveData() { + public LiveData getMaxLiveData() { return this.maxMutableLiveData; } public LiveData> getOpenLiveData() { @@ -292,7 +297,6 @@ //r,bの取得(今どちらのチームかの判別) public void updateTurns() { - final GameRest gameRest = retrofit.create(GameRest.class); Call call = gameRest.getTeam(rid); call.enqueue(new Callback() { @@ -303,18 +307,20 @@ //初回代入 try { turnsMutableLiveData.setValue(response.body().string()); - turnsPreData = response.body().string(); + + turnsPreData = turnsMutableLiveData.getValue(); + System.out.println("現在のチームは" + turnsPreData + "です"); } catch (IOException e) { e.printStackTrace(); } - System.out.println("現在のチームは" + turnsPreData + "です"); - }else if(response.body().equals(turnsPreData)){ + + }else if(turnsMutableLiveData.getValue().equals(turnsPreData)){ //値が一緒なら書き換えない }else{ //値が異なるときのみライブデータを上書き try { turnsMutableLiveData.setValue(response.body().string()); - turnsPreData = response.body().string(); + turnsPreData = turnsMutableLiveData.getValue(); } catch (IOException e) { e.printStackTrace(); } @@ -327,7 +333,6 @@ @Override public void onFailure(Call call, Throwable t) { System.out.println("通信失敗:updateTurns " + turnsPreData + "です"); - System.out.println(t); } }); } @@ -521,6 +526,35 @@ }); } + //EndStateの更新 + public void updateEndState() { + Call call = gameRest.getEndState(rid, tno); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()){ + if(endStatePreData == null){ + //初回代入 + endStateMutableLiveData.setValue(response.body()); + endStatePreData = response.body(); + }else if(response.body().equals(endStatePreData)){ + //値が一緒なら書き換えない + }else{ + //値が異なるときのみライブデータを上書き + endStateMutableLiveData.setValue(response.body()); + endStatePreData = response.body(); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:updateEndState"); + } + }); + } + //現在開いているすべてのカードを取得([tffftffffftttff]みたいなリストを逐一更新する、マスが開くたびに更新) public void updateOpens() {