diff --git a/.idea/misc.xml b/.idea/misc.xml index a4db526..3b4f6d8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,14 +5,6 @@ - - - - - - - - @@ -21,6 +13,8 @@ + + @@ -30,6 +24,9 @@ + + + diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java index 1d31151..b2c9f43 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java @@ -24,13 +24,11 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_drawing); - //drawingCanvas = (DrawingCanvas) findViewById(R.id.canvas); - //Irisから必要な情報を取得 Iris iris = (Iris) this.getApplication(); String rid = iris.getRid(); String nickName = iris.getNickname(); - Boolean isMaster = iris.isMaster(); + Boolean bMaster = iris.isMaster(); drawingStateViewModel= new ViewModelProvider(this).get(DrawingStateViewModel.class); //viewModelに必用な情報をセット @@ -38,7 +36,10 @@ drawingStateViewModel.setNickName(nickName); findViewById(R.id.okButtton).setOnClickListener(this);//お絵描き終了ボタン + findViewById(R.id.clearButton).setOnClickListener(this);//画面クリアボタン + TextView textKeyword =(TextView)findViewById(R.id.textKeyword);//keywordのTextView + drawingCanvas = (DrawingCanvas) findViewById(R.id.drawingCanvas); //getKeywords //List keywords = drawingStateViewModel.getKeywords(rid); @@ -57,8 +58,8 @@ @Override public void onChanged(Integer state) { Class nextActivity = GameMemberActivity.class; - if(isMaster) nextActivity = GameMasterActivity.class;//自分がMasterならMaster用のGame画面へ遷移 - + if(bMaster) nextActivity = GameMasterActivity.class;//自分がMasterならMaster用のGame画面へ遷移 + //stateが変わったらゲーム画面へ遷移 if(state == 3) { Intent intent = new Intent(DrawingActivity.this, nextActivity); diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java b/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java index 9c11905..484798d 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java @@ -23,7 +23,7 @@ path = new Path();//線を引いたり、図形を描いたり、要するにグラフィック paint = new Paint();//筆の種類 - paint.setColor(Color.RED);//色の指定 + paint.setColor(Color.BLACK);//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく paint.setStrokeWidth(20);//幅 } diff --git a/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java b/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java index e3b1f00..9bbf1cc 100644 --- a/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java @@ -1,35 +1,71 @@ package org.ntlab.irisclient; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; +import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; +import org.ntlab.irisclient.entities.TurnJson; +import org.ntlab.irisclient.models.Game; +import org.ntlab.irisclient.viewmodels.DrawingStateViewModel; import org.ntlab.irisclient.viewmodels.GameViewModel; public class GameMasterActivity extends AppCompatActivity{ - //MemberRoomActivityが一番見やすいと思う + private GameViewModel gameViewModel; + //操作可能かどうかを記録。これがfalseの時は何のボタンを押すこともできない。 + //時間があればゲームに干渉できないだけで、オフラインの動作はできるようにしたい。 + private boolean IsActive = false; + + //Irisから必要な情報を取得 + Iris iris = (Iris) this.getApplication(); + private String myTeam = iris.getTeam(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game_master); + //Irisから必要な情報を取得 + Iris iris = (Iris) this.getApplication(); + String rid = iris.getRid(); + String nickName = iris.getNickname(); + + //viewModelに必用な情報をセット + gameViewModel= new ViewModelProvider(this).get(GameViewModel.class); + gameViewModel.setRid(rid); + //ここでカードとかメンバーを表示する - - - //↓自分のチームかつ、ヒント入力画面の場合のみボタンプロセスを読み込む。それ以外の時は何もできないようにする。if文を描きたいけどまだ確認ができない + //ボタンの情報を入力 buttonProcesses(); + //自分が赤チームマスターの場合はヒントが入力可能 + if(myTeam.equals("r")){ + IsActive = true; + } + //タイマースタート呼び出し + gameViewModel.start(500); + gameViewModel.getTurnLiveData().observe(this, new Observer() { + @Override + public void onChanged(TurnJson turnJson) { + //turnJsonから情報を貰ってきて、操作できるのかどうかとかを判断する。 + IsActive = CheckActivity(turnJson); + + //時間があれば何をしてほしいのかのアナウンスを入れる + //時間があれば背景の色を変える + + } + }); } public void buttonProcesses(){ @@ -38,6 +74,7 @@ SendHintButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + EditText Hint = findViewById(R.id.GameHint); EditText HintMax = findViewById(R.id.GameHintMax); @@ -52,24 +89,28 @@ HintMax.setError("数字が入力されていません"); } else { //ビューモデルにhintとhintMaxを送信する。まとめて送信できるようになるかも知れないので、いったん放置 - + gameViewModel.putHint(hint,hintMax); //マスターブランチに修正が入ったらコメントアウトを外す } + } }); } - //操作可能かどうかを調べる関数(いらない?) クリックされる度にチェックするのではなく、masterとかturnをオブザーブしておいて、変更があれば反映する。 - public boolean CheckActivity(){ + //操作可能かどうかを調べる関数。masterとかturnをオブザーブしておいて、変更があれば反映する。 + public boolean CheckActivity(TurnJson turnjson){ - boolean MasterActivity = false; + IsActive = false; - //今は自分のチームのターンかどうかを確認 - //今はヒント入力時間かどうかを確認 - //ライブデータを監視する - GameViewModel gameViewModel = new ViewModelProvider(this).get(GameViewModel.class); - //String team = gameViewModel.getTurnLiveData(). + //最新のゲームの状況を取得 + String CurrentTeam = turnjson.getTeam(); + int turnState = turnjson.getTurnstate(); - return MasterActivity; + //自分のチームのターンで、かつ「ヒント入力」時間の場合は行動可能 + if(CurrentTeam.equals(myTeam) && turnState == 0){ + IsActive = true; + } + + return IsActive; } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java b/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java index d5ce1d4..8cc4463 100644 --- a/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java @@ -8,12 +8,29 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import org.ntlab.irisclient.resources.GameRest; +import org.ntlab.irisclient.resources.RoomsRest; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + public class TestDrawingActivity extends AppCompatActivity { + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_activity_draw); + //サーバーとの通信を初期化 + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/iris/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final RoomsRest roomRest = retrofit.create(RoomsRest.class); + //上の表示を削除 ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -24,6 +41,24 @@ Button ownerButton = findViewById(R.id.ownerdraw); ownerButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { + //(ownerのみ)drawtestを更新 : は動かない + /* + final RoomsRest roomsRest = retrofit.create(RoomsRest.class); + Call call = roomsRest.putTestRoom(); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()){ + System.out.println("通信成功:createDrawTest"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:createDrawTest"); + System.out.println(t); + } + }); + */ ((Iris) getApplication()).setRid("drawtest"); ((Iris) getApplication()).setNickname("owner"); Intent intent = new Intent(TestDrawingActivity.this,DrawingActivity.class); 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 10f2116..d1da638 100644 --- a/app/src/main/java/org/ntlab/irisclient/entities/TurnJson.java +++ b/app/src/main/java/org/ntlab/irisclient/entities/TurnJson.java @@ -6,15 +6,62 @@ import java.util.List; public class TurnJson { - private String hint; private String team; private int max; - private int turnstate; + private int turnstate; //turn内でスパイマスターと諜報員の操作の切り替えに使用(0:スパイマスター, 1:諜報員) private List openlist = new ArrayList<>(); - //コンストラクタ - public TurnJson() { + //--------------------------------------------------------- + //ゲッター + + public String getHint() { + return hint; } + public String getTeam() { + return team; + } + + public int getMax() { + return max; + } + + public int getTurnstate() {return turnstate;} + + public List getOpenListAll() {return openlist;} //リストそのものを返す。 + + //--------------------------------------------------------- + //セッター + + public void setHint(String hint) { + this.hint = hint; + } + + public void setTeam(String team) { + this.team = team; + } + + public void setMax(int max) { + this.max = max; + } + + public void setTurnstate(int turnstate) {this.turnstate = turnstate;} + + public void putHint(String rid, int tno){ + this.hint = hint; + this.max = max; + } + + //--------------------------------------------------------- + //openlist操作 + + public Integer getOpenListSolo(int num){return openlist.get(num);} + + public void addOpenList(Integer cno){openlist.add(cno);} + + public void delieteOpenList(int num){openlist.remove(num);} + + public int sizeOpenList(){return openlist.size();} + } 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 381c08f..18ee92e 100644 --- a/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java +++ b/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java @@ -113,4 +113,12 @@ @Field("nickname") String nickname, @Field("state") Integer state ); + + //----------------------------------------------- + //test部屋の更新(主にdrawtest) + @FormUrlEncoded + @PUT("rooms/test") + Call putTestRoom( + ); + } 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 a28aed9..9794cca 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java @@ -47,7 +47,7 @@ this.rid = rid; } - public void putHint(String rid, int tno, String hint, int max) { + public void putHint(String hint, int max) { this.hint = hint; this.max = max; } @@ -61,6 +61,9 @@ public LiveData getTurnLiveData() { return this.turnMutableLiveData; } + public Integer getTurnNumber(){ + return tno; + } // public Integer getTurnNumber(String rid) { // return tno; // } @@ -73,7 +76,7 @@ updateTurn(rid); } - //ターン数の取得(赤か青のターンの判別) + //r,bの取得(今どちらのチームかの判別) public void updateTurns(String rid) { final GameRest gameRest = retrofit.create(GameRest.class); Call call = gameRest.getTeam(rid); diff --git a/app/src/main/res/drawable/border.xml b/app/src/main/res/drawable/border.xml new file mode 100644 index 0000000..f7ee6d5 --- /dev/null +++ b/app/src/main/res/drawable/border.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_drawing.xml b/app/src/main/res/layout/activity_drawing.xml index 55763c7..8850c50 100644 --- a/app/src/main/res/layout/activity_drawing.xml +++ b/app/src/main/res/layout/activity_drawing.xml @@ -6,6 +6,18 @@ android:layout_height="match_parent" tools:context=".DrawingActivity"> + +