diff --git a/src/main/java/controls/StepScheduler.java b/src/main/java/controls/StepScheduler.java index c20ee49..fa20250 100644 --- a/src/main/java/controls/StepScheduler.java +++ b/src/main/java/controls/StepScheduler.java @@ -78,4 +78,14 @@ public boolean isATurn(){ return isATurn; } + + @Override + public boolean isALose() { + return algo.getLoseA(); + } + + @Override + public boolean isBLose() { + return algo.getLoseB(); + } } diff --git a/src/main/java/interfaces/IAttack.java b/src/main/java/interfaces/IAttack.java index fbc06f1..84f9eda 100644 --- a/src/main/java/interfaces/IAttack.java +++ b/src/main/java/interfaces/IAttack.java @@ -19,4 +19,6 @@ boolean isSucceedLatestAttack(); boolean shiftTurn(); boolean isATurn(); + boolean isALose(); + boolean isBLose(); } diff --git a/src/main/java/views/MainPanel.java b/src/main/java/views/MainPanel.java index efa9839..60015c8 100644 --- a/src/main/java/views/MainPanel.java +++ b/src/main/java/views/MainPanel.java @@ -1,18 +1,14 @@ package views; import controls.BotIntelligence; -import controls.ConstantMethods; import controls.StepScheduler; import interfaces.IAttack; import javax.swing.*; -import javax.swing.border.LineBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import static java.lang.Integer.parseInt; @@ -120,6 +116,10 @@ JOptionPane.showMessageDialog(null,resultMessage); repaintField(iAttack); + if(isGameOver(iAttack)){ + finishGame(iAttack); + return; + } iAttack.shiftTurn(); playerBehave(iAttack); } @@ -169,6 +169,7 @@ for (var i : myHands) { var cardButton = new CardButton(i.getKey().toString()); cardButton.setStatus(i.getValue()? CardButton.Status.OPEN: CardButton.Status.MY_CLOSED); + myHandButtons.add(cardButton); myHandButtonsPanel.add(cardButton, BorderLayout.WEST); @@ -198,7 +199,6 @@ indexForOpponent=0; for (var i : opponentHands) { var cardButton = new CardButton(i.getValue() ? i.getKey().toString() :CLOSED_SYMBOL); - cardButton.setStatus(i.getValue()? CardButton.Status.OPEN: CardButton.Status.CLOSED); cardButton.setEnabled(!i.getValue()); cardButton.addActionListener(new ActionListener() { @@ -240,11 +240,6 @@ String resultMessage="Your Attack Was "; resultMessage+=isSucceed?"Succeed.":"Failed."; JOptionPane.showMessageDialog(null,resultMessage); - - //次の画面に遷移する処理 - //repaintField(iAttack); - - }else{ setStep(Step.SelectOpponentHands); return; @@ -256,7 +251,10 @@ } cardButton.setEnabledSelection(false); repaintField(iAttack); - + if(isGameOver(iAttack)){ + finishGame(iAttack); + return; + } botBehave(iAttack); } }); @@ -264,9 +262,6 @@ opponentButtonsPanel.add(cardButton, 0);//見た目の順序が逆になるように,0番目に挿入 indexForOpponent++; } - - - //ここまでが相手のカードに関する処理 validate(); repaint(); @@ -289,4 +284,68 @@ if(!iAttack.isDeckLess())JOptionPane.showMessageDialog(null,"Select Card from Opponent`s Hands."); } + + /** + * ゲームが終了しているか + * @param iAttack + */ + boolean isGameOver(IAttack iAttack){ + + if(iAttack.isALose()){ + return true; + }else if(iAttack.isBLose()){ + return true; + } + + return false; + } + void finishGame(IAttack iAttack){ + var myHands = iAttack.getMyHands(); + var opponentHands = iAttack.getOpponentHands(); + + /** + * 初期化処理(する必要があるのかどうかは知らない) + */ + isDecidedAttacker=false; + myHandButtonsPanel.removeAll();// + myHandButtons.clear(); + opponentButtonsPanel.removeAll();// + opponentHandButtons.clear(); + /** + * 自分の手札に関する処理 + */ + indexForMyHands=0; + for (var i : myHands) { + var cardButton = new CardButton(i.getKey().toString()); + cardButton.setStatus(i.getValue()? CardButton.Status.OPEN: CardButton.Status.MY_CLOSED); + myHandButtons.add(cardButton); + myHandButtonsPanel.add(cardButton, BorderLayout.WEST); + + final var a=indexForMyHands;//actionPerformedの中に書くと、クリックされて初めて、回しきったindexForMyHandsを参照してしまうため、ここで一時変数に格納する + indexForMyHands++; + } + //ここまでが自分のカードに関する処理 + + /** + *相手のカードに関する処理 + */ + indexForOpponent=0; + for (var i : opponentHands) { + var cardButton = new CardButton(i.getValue() ? i.getKey().toString() :CLOSED_SYMBOL); + cardButton.setStatus(i.getValue()? CardButton.Status.OPEN: CardButton.Status.CLOSED); + cardButton.setEnabled(!i.getValue()); + opponentHandButtons.add(cardButton); + opponentButtonsPanel.add(cardButton, 0);//見た目の順序が逆になるように,0番目に挿入 + indexForOpponent++; + } + //ここまでが相手のカードに関する処理 + validate(); + repaint(); + if(iAttack.isALose()){ + JOptionPane.showMessageDialog(null,"Bot Win."); + }else if(iAttack.isBLose()){ + JOptionPane.showMessageDialog(null,"You Win."); + } + + } }