diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java b/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java index e21c183..bb5199a 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java @@ -1,5 +1,6 @@ package org.ntlab.irisclient; import static android.os.Looper.getMainLooper; +import static android.view.View.INVISIBLE; import android.app.AlertDialog; import android.app.Dialog; @@ -64,6 +65,7 @@ private List map; //cno順にdnoを管理(要するに絵の並び) private List colorList; //cno順にr,g,b,dを管理:カードごとの色 private List nowOpenList; + private List nowQList; // コンストラクタ @@ -109,6 +111,28 @@ } }; + // 現在のQListを記録 + nowQList = 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[] { (ImageButton) view.findViewById(R.id.imageButton0), @@ -168,6 +192,16 @@ } ); + // 疑われた画像ををObserveして、Viewに反映 + gameViewModel.getQLiveData().observe ( + getViewLifecycleOwner(), + QObserver -> { + System.out.println("kota: 疑われた。 疑われた配列: " + QObserver); + setQ(QObserver); + } + ); + + gameViewModel.getEndStateLiveData().observe ( getViewLifecycleOwner(), endStateObserver -> { @@ -393,16 +427,16 @@ // オープンだったときの描画 if (colorList.get(i).contains("r")) { backColors[i].setBackground(resources.getDrawable(R.drawable.red_image)); - imageButtons[i].setVisibility(View.INVISIBLE); + imageButtons[i].setVisibility(INVISIBLE); } else if (colorList.get(i).contains("b")) { backColors[i].setBackground(resources.getDrawable(R.drawable.blue_image)); - imageButtons[i].setVisibility(View.INVISIBLE); + imageButtons[i].setVisibility(INVISIBLE); } else if (colorList.get(i).contains("g")) { backColors[i].setBackground(resources.getDrawable(R.drawable.gray_image)); - imageButtons[i].setVisibility(View.INVISIBLE); + imageButtons[i].setVisibility(INVISIBLE); } else if (colorList.get(i).contains("d")) { backColors[i].setBackground(resources.getDrawable(R.drawable.black_image)); - imageButtons[i].setVisibility(View.INVISIBLE); + imageButtons[i].setVisibility(INVISIBLE); gameViewModel.sendEndState(); finishGameAlertMake(myTeam, nowTurn); } @@ -436,23 +470,19 @@ **/ private void setOpenRealTime(int cno, boolean isOK) { if(isOK == true) { + + nowQList.set(cno, false);//疑い関係 gameViewModel.sendOpenList(cno); if( colorList.get(cno).equals("d") ){ + //Game終了 gameViewModel.sendEndState(); - } else if ( colorList.get(cno).equals(myTeam) ){ -// System.out.println("チームと同じなのでまだ引けます"); - } else { - if( myTeam.equals("r") ){ - nowTurn = "b"; - } else if( myTeam.equals("b") ){ - nowTurn = "r"; - } + } else if ( !colorList.get(cno).equals(myTeam) ){ //ターン切り替え gameViewModel.addTurns(); } - //青と赤のカードが何枚めくれているか + //赤のカードが何枚めくれているか(6枚めくれていたら勝利) if( colorList.get(cno).equals("r") ){ OpenRedCard = 0; nowOpenList.set(cno, true); @@ -462,14 +492,12 @@ } } nowOpenList.set(cno, false); - System.out.println("OpenRedCard:" + OpenRedCard); - - if( OpenRedCard >= 6 ){ + if( OpenRedCard == 6 ){ nowTurn = "b"; finishGameAlertMake(myTeam, nowTurn); } - } + //青のカードが何枚めくれているか(5枚めくれていたら勝利) if( colorList.get(cno).equals("b") ){ OpenBlueCard = 0; nowOpenList.set(cno, true); @@ -479,10 +507,7 @@ } } nowOpenList.set(cno, false); - - System.out.println("OpenBlueCard: " + OpenBlueCard); - - if( OpenBlueCard >= 5 ){ + if( OpenBlueCard == 5 ){ nowTurn = "r"; finishGameAlertMake(myTeam, nowTurn); } @@ -508,8 +533,9 @@ iv.setAdjustViewBounds(true); builder.setView(iv); + builder.setNegativeButton("疑わない", (dialog, id) -> setDoubt(cno, false)); builder.setPositiveButton("疑う", (dialog, id) -> setDoubt(cno, true)); - builder.setNegativeButton("キャンセル", (dialog, id) -> setDoubt(cno, false)); + builder.setNeutralButton("閉じる", (dialog, id) -> setNone(cno, true)); builder.create(); builder.show(); } @@ -519,10 +545,31 @@ **/ private void setDoubt(int cno, boolean isOK) { // 疑う処理 - // 実はまだViewは書けてない - gameViewModel.sendQ(cno); + if( nowQList.get(cno) == false && isOK == true ){ + gameViewModel.sendQ(cno); + } else if( nowQList.get(cno) == true && isOK == false ){ + gameViewModel.sendQ(cno); + } } + //疑われたら枠の色をチームの色に変更(諜報員のみ) + private void setQ(List QList) { + for(int i = 0; i < QList.size(); i++) { + if ( QList.get(i) == true && nowQList.get(i) == false && isMaster.equals(false) ) { + if( nowTurn.equals("r") ){ + backColors[i].setBackground(resources.getDrawable(R.drawable.red_image)); + } else { + backColors[i].setBackground(resources.getDrawable(R.drawable.blue_image)); + } + nowQList.set(i, true); + } else if ( QList.get(i) == false && nowQList.get(i) == true && isMaster.equals(false)){ + backColors[i].setBackground(resources.getDrawable(R.drawable.skin_image)); + nowQList.set(i, false); + } + } + } + + /** * 相手のターンのときに、 * 画像だけ確認できるアラートを表示させるコード