diff --git a/src/main/java/controls/BotIntelligence.java b/src/main/java/controls/BotIntelligence.java index e01c2ca..e672d8e 100644 --- a/src/main/java/controls/BotIntelligence.java +++ b/src/main/java/controls/BotIntelligence.java @@ -3,16 +3,13 @@ import interfaces.IAttack; import interfaces.IBotBehavior; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import static views.Constants.DECK_COUNT; public class BotIntelligence implements IBotBehavior { - BotIntelligence(){ + public BotIntelligence(){ } /** @@ -30,10 +27,12 @@ /** * 相手の手札に対して、候補となる数字を割り当てる + * @param iAttack + * @return 候補のリスト */ - void assignCandidateNumberEachHand(IAttack iAttack){ + List assignCandidateNumberEachHand(IAttack iAttack){ var opponentsHands=iAttack.getOpponentHands(); - var targetList=new ArrayList<>(); + var result=new ArrayList(); for(var card:opponentsHands){//ユーザーの手札を左から見ていく var index=opponentsHands.indexOf(card);//左からindex番目に @@ -44,7 +43,6 @@ candidateList.clear(); }else{ //裏の場合 - //そのカードから右隣のカードを確認していく for(int i=0;i x).toArray()); } + return result; } //公開されていないカードのインデックスを選ぶ(カードにかかれている番号ではない) @Override public int selectAttacker(IAttack iAttack) { - var botsHands = iAttack.getMyHands(); + var botHands = iAttack.getMyHands(); - for(var i:botsHands){ - if(!i.getValue())return botsHands.indexOf(i); + for(var i:botHands){//小さいものから選択 + if(!i.getValue())return botHands.indexOf(i); } return 0; } @Override public int selectTarget(IAttack iAttack) { - - return 0; + var candidate= assignCandidateNumberEachHand(iAttack); + int result=0; + int min=DECK_COUNT; + for(var i:candidate){ + if(i.length(); - for(int i=0;i getTopCard(); boolean isDeckLess(); boolean isSucceedLatestAttack(); + boolean shiftTurn(); } diff --git a/src/main/java/interfaces/IBotBehavior.java b/src/main/java/interfaces/IBotBehavior.java index f111e10..7000961 100644 --- a/src/main/java/interfaces/IBotBehavior.java +++ b/src/main/java/interfaces/IBotBehavior.java @@ -3,5 +3,5 @@ public interface IBotBehavior { int selectAttacker(IAttack iAttack); int selectTarget(IAttack iAttack); - int declareNumber(IAttack iAttack); + int declareNumber(IAttack iAttack, int target); } diff --git a/src/main/java/views/MainPanel.java b/src/main/java/views/MainPanel.java index c7c7ae1..d16788a 100644 --- a/src/main/java/views/MainPanel.java +++ b/src/main/java/views/MainPanel.java @@ -1,5 +1,6 @@ package views; +import controls.BotIntelligence; import controls.StepScheduler; import interfaces.IAttack; @@ -155,11 +156,17 @@ //次の画面に遷移する処理 update(stepScheduler); + + }else{ setStep(Step.SelectOpponentHands); } + } cardButton.setEnabledSelection(false); + Timer timer = new Timer(1000, this); + timer.setDelay(6000); + botBehave(stepScheduler); } }); opponentHandButtons.add(cardButton); @@ -204,6 +211,37 @@ break; } } + void botBehave(IAttack iAttack){ + iAttack.shiftTurn(); + var bot = new BotIntelligence(); + + JOptionPane.showMessageDialog(null,"Bot`s Turn."); + var selectText = ""; + var atk =0; + if(iAttack.isDeckLess()){ + selectText = "Bot drew."; + }else{ + atk= bot.selectAttacker(iAttack); + selectText = "Bot selected "+atk; + } + JOptionPane.showMessageDialog(null,selectText); + + var targetText = ""; + var tar = bot.selectTarget(iAttack); + JOptionPane.showMessageDialog(null,"Bot targeted this."); + + + var dec = bot.declareNumber(iAttack, tar); + JOptionPane.showMessageDialog(null,"Bot declared "+ dec +"."); + + iAttack.Attack(dec, atk, tar); + boolean isSucceed=iAttack.isSucceedLatestAttack(); + + String resultMessage="Bot`s Attack Was "; + resultMessage+=isSucceed?"Succeed.":"Failed."; + JOptionPane.showMessageDialog(null,resultMessage); + //update(iAttack); + } void update(IAttack iAttack){ myHandButtonsPanel.removeAll(); //選択可能な自分のカードのキーを取得