diff --git a/src/main/java/controls/BotIntelligence.java b/src/main/java/controls/BotIntelligence.java new file mode 100644 index 0000000..903b489 --- /dev/null +++ b/src/main/java/controls/BotIntelligence.java @@ -0,0 +1,114 @@ +package controls; + +import interfaces.IAttack; +import interfaces.IBotBehavior; + +import java.util.*; + +import static views.Constants.DECK_COUNT; + +public class BotIntelligence implements IBotBehavior { + + public BotIntelligence(){ + + } + /** + 未確定の数字を列挙する + */ + List calculateCandidate(IAttack iAttack){ + //候補の初期化 + var candidates = new ArrayList(); + for(int i=0;i x.getKey()).toList()); + candidates.removeAll(iAttack.getMyHands().stream().filter(x -> x.getValue()).map(x -> x.getKey()).toList()); + + return candidates; + } + + /** + * 相手の手札に対して、候補となる数字を割り当てる + * @param iAttack + * @return 候補のリスト + */ + List assignCandidateNumberEachHand(IAttack iAttack){ + var myHands=iAttack.getMyHands(); + var result=new ArrayList(); + + for(var card:myHands){//ユーザーの手札を左から見ていく + var index=myHands.indexOf(card);//左からindex番目に + var candidateList = calculateCandidate(iAttack);//確認するカード + + + if(card.getValue()) { + candidateList.clear(); + }else{ //裏の場合 + + //そのカードから右隣のカードを確認していく + for(int i=0;i x > currentCard.getKey());//その確認したカードの数字より大きい数字を除外する。 + for(int j=1;j x x).toArray()); + } + return result; + } + + //公開されていないカードのインデックスを選ぶ(カードにかかれている番号ではない) + @Override + public int selectAttacker(IAttack iAttack) { + var botHands = iAttack.getOpponentHands(); + + for(var i:botHands){//小さいものから選択 + if(!i.getValue())return botHands.indexOf(i); + } + return 0; + } + + @Override + public int selectTarget(IAttack iAttack) { + var candidate= assignCandidateNumberEachHand(iAttack); + int result=0; + int min=DECK_COUNT; + for(var i:candidate){ + if(i.length