diff --git a/src/main/java/controls/AbstractGameState.java b/src/main/java/controls/AbstractGameState.java index 7a66e00..cd6b9d5 100644 --- a/src/main/java/controls/AbstractGameState.java +++ b/src/main/java/controls/AbstractGameState.java @@ -14,8 +14,11 @@ this.algo = algo; isATurn = algo.isATurn(); } + public abstract void setAttacker(int attacker); + public abstract void setTarget(int target); + public abstract void setGuess(int guess); + public abstract void attack(); - public abstract void attack(int guess, int attacker, int target); public List> getMyHands() { return algo.getHandsA(); diff --git a/src/main/java/controls/PhaseController.java b/src/main/java/controls/PhaseController.java index e40c0e1..4d07c70 100644 --- a/src/main/java/controls/PhaseController.java +++ b/src/main/java/controls/PhaseController.java @@ -6,10 +6,10 @@ public class PhaseController { IGameView iGameView; Phase currentPhase; - int guess; + /// guess; boolean isDecidedAttacker; - int attacker; - int target; + //int attacker; + /// int target; Algo algo; public AbstractGameState abstractGameState; TurnPlayer turnPlayer; @@ -57,26 +57,29 @@ break; case Selection: - this.attacker = params[0]; + //this.attacker = params[0]; + abstractGameState.setAttacker(params[0]); isDecidedAttacker = true; currentPhase = Phase.Target; - iGameView.onDecidedSelection(attacker); + iGameView.onDecidedSelection(params[0]); break; case Target: - this.target = params[0]; + abstractGameState.setTarget(params[0]); + //this.target = params[0]; currentPhase = phase; - iGameView.onDecidedTarget(target); + iGameView.onDecidedTarget(params[0]); currentPhase = Phase.Declaration; break; case Declaration: - this.guess = params[0]; - abstractGameState.attack(this.guess, this.attacker, this.target); + //this.guess = params[0]; + abstractGameState.setGuess(params[0]); + abstractGameState.attack(); currentPhase = Phase.StartBotTurn; boolean isSucceed = abstractGameState.isSucceedLatestAttack(); iGameView.repaintBoard(abstractGameState); - iGameView.onFinishedPlayerAttack(guess, isSucceed); + iGameView.onFinishedPlayerAttack(params[0], isSucceed); if (judgeGameOver()) return; changePhase(Phase.StartBotTurn, 0); break; @@ -90,8 +93,11 @@ break; case BotAttack: abstractGameState.updateTurn(); - abstractGameState.attack(params[0], params[1], params[2]); - iGameView.onFinishedBotAttack(params[0], abstractGameState.isSucceedLatestAttack()); + abstractGameState.setAttacker(params[0]); + abstractGameState.setTarget(params[1]); + abstractGameState.setGuess(params[2]); + abstractGameState.attack(); + iGameView.onFinishedBotAttack(params[2], abstractGameState.isSucceedLatestAttack()); if (judgeGameOver()) return; changePhase(Phase.StartPlayerTurn); break; @@ -104,7 +110,7 @@ } public void botAttack(int guess, int attacker, int target) { - changePhase(Phase.BotAttack, guess, attacker, target); + changePhase(Phase.BotAttack, attacker, target, guess); } diff --git a/src/main/java/controls/StepScheduler.java b/src/main/java/controls/StepScheduler.java index cef3b56..5302d65 100644 --- a/src/main/java/controls/StepScheduler.java +++ b/src/main/java/controls/StepScheduler.java @@ -21,18 +21,18 @@ public void attack(int guess, int attacker, int target) { if (isATurn) { if (isDeckLess()) { - algo.selectAndAttackA(attacker, target, guess); + //algo.selectAndAttackA(attacker, target, guess); isSucceedLatestAttack = algo.getResultBySelectingA().getKey(); } else { - algo.drawAndAttackA(target, guess); + // algo.drawAndAttackA(target, guess); isSucceedLatestAttack = algo.getResultByDrawingA().getKey(); } } else { if (isDeckLess()) { - algo.selectAndAttackB(attacker, target, guess); + // algo.selectAndAttackB(attacker, target, guess); isSucceedLatestAttack = algo.getResultBySelectingB().getKey(); } else { - algo.drawAndAttackB(target, guess); + // algo.drawAndAttackB(target, guess); isSucceedLatestAttack = algo.getResultByDrawingB().getKey(); } } diff --git a/src/main/java/controls/TurnBot.java b/src/main/java/controls/TurnBot.java index 2288124..40feb08 100644 --- a/src/main/java/controls/TurnBot.java +++ b/src/main/java/controls/TurnBot.java @@ -8,12 +8,27 @@ } @Override - public void attack(int guess, int attacker, int target) { + public void setAttacker(int attacker) { + algo.setAttackerB(attacker); + } + + @Override + public void setTarget(int target) { + algo.setTargetB(target); + } + + @Override + public void setGuess(int guess) { + algo.setGuessB(guess); + } + + @Override + public void attack() { if (isDeckLess()) { - algo.selectAndAttackB(attacker, target, guess); + algo.selectAndAttackB(); isSucceedLatestAttack = algo.getResultBySelectingB().getKey(); } else { - algo.drawAndAttackB(target, guess); + algo.drawAndAttackB(); isSucceedLatestAttack = algo.getResultByDrawingB().getKey(); } } diff --git a/src/main/java/controls/TurnPlayer.java b/src/main/java/controls/TurnPlayer.java index 6f8bc31..507ceac 100644 --- a/src/main/java/controls/TurnPlayer.java +++ b/src/main/java/controls/TurnPlayer.java @@ -8,12 +8,27 @@ } @Override - public void attack(int guess, int attacker, int target) { + public void setAttacker(int attacker) { + algo.setAttackerB(attacker); + } + + @Override + public void setTarget(int target) { + algo.setTargetA(target); + } + + @Override + public void setGuess(int guess) { + algo.setGuessA(guess); + } + + @Override + public void attack() { if (isDeckLess()) { - algo.selectAndAttackA(attacker, target, guess); + algo.selectAndAttackA(); isSucceedLatestAttack = algo.getResultBySelectingA().getKey(); } else { - algo.drawAndAttackA(target, guess); + algo.drawAndAttackA(); isSucceedLatestAttack = algo.getResultByDrawingA().getKey(); } } diff --git a/src/main/java/resources/Algo.java b/src/main/java/resources/Algo.java index f5e9ec3..21d8459 100644 --- a/src/main/java/resources/Algo.java +++ b/src/main/java/resources/Algo.java @@ -17,6 +17,15 @@ private ResultByDrawingB resultByDrawingB; private ResultBySelectingA resultBySelectingA; private ResultBySelectingB resultBySelectingB; + + private AttackerA attackerA; + private AttackerB attackerB; + private TargetA targetA; + private TargetB targetB; + private GuessA guessA; + private GuessB guessB; + + int turnCount = 0; boolean isATurn; @@ -27,30 +36,61 @@ loseA = new LoseA(); handsA = new HandsA(loseA); deck = new Deck(); - resultByDrawingA = new ResultByDrawingA(handsB, deck, handsA); - resultByDrawingB = new ResultByDrawingB(deck, handsB, handsA); - resultBySelectingA = new ResultBySelectingA(handsB, handsA); - resultBySelectingB = new ResultBySelectingB(handsA, handsB); + attackerA = new AttackerA(); + attackerB = new AttackerB(); + targetA = new TargetA(); + targetB = new TargetB(); + guessA = new GuessA(); + guessB = new GuessB(); + + resultByDrawingA = new ResultByDrawingA(handsB, deck, handsA, targetA, guessA); + resultByDrawingB = new ResultByDrawingB(deck, handsB, handsA, targetB, guessB); + resultBySelectingA = new ResultBySelectingA(handsB, handsA, attackerA, targetA, guessA); + resultBySelectingB = new ResultBySelectingB(handsA, handsB, attackerB, targetB, guessB); //追加分 isATurn = true; deck.init(DECK_COUNT); } - public void drawAndAttackA(int target, int guess) { - this.resultByDrawingA.drawAndAttackA(target, guess); + public void setAttackerA(int a) { + this.attackerA.setAttackerA(a); } - public void selectAndAttackA(int attacker, int target, int guess) { - this.resultBySelectingA.selectAndAttackA(attacker, target, guess); + public void setAttackerB(int b) { + this.attackerB.setAttackerB(b); } - public void drawAndAttackB(int target, int guess) { - this.resultByDrawingB.drawAndAttackB(target, guess); + public void setTargetA(int a) { + this.targetA.setTargetA(a); } - public void selectAndAttackB(int attacker, int target, int guess) { - this.resultBySelectingB.selectAndAttackB(attacker, target, guess); + public void setTargetB(int b) { + this.targetB.setTargetB(b); + } + + public void setGuessA(int a) { + this.guessA.setGuessA(a); + } + + public void setGuessB(int b) { + this.guessB.setGuessB(b); + } + + public void drawAndAttackA() { + this.resultByDrawingA.drawAndAttackA(); + } + + public void selectAndAttackA() { + this.resultBySelectingA.selectAndAttackA(); + } + + public void drawAndAttackB() { + this.resultByDrawingB.drawAndAttackB(); + } + + public void selectAndAttackB() { + this.resultBySelectingB.selectAndAttackB(); } public Map.Entry getResultByDrawingA() { diff --git a/src/main/java/resources/AttackerA.java b/src/main/java/resources/AttackerA.java new file mode 100644 index 0000000..6282c82 --- /dev/null +++ b/src/main/java/resources/AttackerA.java @@ -0,0 +1,13 @@ +package resources; + +public class AttackerA { + private int value; + + public void setAttackerA(int a) { + this.value = a; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/resources/AttackerB.java b/src/main/java/resources/AttackerB.java new file mode 100644 index 0000000..f5d485f --- /dev/null +++ b/src/main/java/resources/AttackerB.java @@ -0,0 +1,13 @@ +package resources; + +public class AttackerB { + private int value; + + public void setAttackerB(int b) { + this.value = b; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/resources/GuessA.java b/src/main/java/resources/GuessA.java new file mode 100644 index 0000000..60b02ad --- /dev/null +++ b/src/main/java/resources/GuessA.java @@ -0,0 +1,13 @@ +package resources; + +public class GuessA { + private int value; + + public void setGuessA(int a) { + this.value = a; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/resources/GuessB.java b/src/main/java/resources/GuessB.java new file mode 100644 index 0000000..407d056 --- /dev/null +++ b/src/main/java/resources/GuessB.java @@ -0,0 +1,13 @@ +package resources; + +public class GuessB { + private int value; + + public void setGuessB(int b) { + this.value = b; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/resources/ResultByDrawingA.java b/src/main/java/resources/ResultByDrawingA.java index 1977bd8..b4d0421 100644 --- a/src/main/java/resources/ResultByDrawingA.java +++ b/src/main/java/resources/ResultByDrawingA.java @@ -9,16 +9,20 @@ private HandsB handsB; private Deck deck; private HandsA handsA; + private TargetA targetA; + private GuessA guessA; private Map.Entry value; - public ResultByDrawingA(HandsB handsB, Deck deck, HandsA handsA) { + public ResultByDrawingA(HandsB handsB, Deck deck, HandsA handsA, TargetA targetA, GuessA guessA) { this.handsB = handsB; this.deck = deck; this.handsA = handsA; + this.targetA = targetA; + this.guessA = guessA; } - public void drawAndAttackA(int target, int guess) { - this.value = new AbstractMap.SimpleEntry<>((handsB.getValue().get(target).getKey() == guess), target); + public void drawAndAttackA() { + this.value = new AbstractMap.SimpleEntry<>((handsB.getValue().get(targetA.getValue()).getKey() == guessA.getValue()), targetA.getValue()); List deck = this.deck.getValue(); this.handsA.updateSucceedDrawA(value, deck); this.handsB.updateSucceedDrawA(value, deck); diff --git a/src/main/java/resources/ResultByDrawingB.java b/src/main/java/resources/ResultByDrawingB.java index 3fcbc91..416d363 100644 --- a/src/main/java/resources/ResultByDrawingB.java +++ b/src/main/java/resources/ResultByDrawingB.java @@ -8,16 +8,20 @@ private Deck deck; private HandsB handsB; private HandsA handsA; + private TargetB targetB; + private GuessB guessB; private Map.Entry value; - public ResultByDrawingB(Deck deck, HandsB handsB, HandsA handsA) { + public ResultByDrawingB(Deck deck, HandsB handsB, HandsA handsA, TargetB targetB, GuessB guessB) { this.deck = deck; this.handsB = handsB; this.handsA = handsA; + this.targetB = targetB; + this.guessB = guessB; } - public void drawAndAttackB(int target, int guess) { - this.value = new AbstractMap.SimpleEntry<>((handsA.getValue().get(target).getKey() == guess), target); + public void drawAndAttackB() { + this.value = new AbstractMap.SimpleEntry<>((handsA.getValue().get(targetB.getValue()).getKey() == guessB.getValue()), targetB.getValue()); List deck = this.deck.getValue(); this.handsB.updateSucceedDrawB(value, deck); diff --git a/src/main/java/resources/ResultBySelectingA.java b/src/main/java/resources/ResultBySelectingA.java index bed0714..c30c120 100644 --- a/src/main/java/resources/ResultBySelectingA.java +++ b/src/main/java/resources/ResultBySelectingA.java @@ -6,15 +6,23 @@ public class ResultBySelectingA { private HandsB handsB; private HandsA handsA; + + private AttackerA attackerA; + private TargetA targetA; + private GuessA guessA; + private Map.Entry> value; - public ResultBySelectingA(HandsB handsB, HandsA handsA) { + public ResultBySelectingA(HandsB handsB, HandsA handsA, AttackerA attackerA, TargetA targetA, GuessA guessA) { this.handsB = handsB; this.handsA = handsA; + this.attackerA = attackerA; + this.targetA = targetA; + this.guessA = guessA; } - public void selectAndAttackA(int attacker, int target, int guess) { - this.value = new AbstractMap.SimpleEntry<>((handsB.getValue().get(target).getKey() == guess), new AbstractMap.SimpleEntry<>(target, attacker)); + public void selectAndAttackA() { + this.value = new AbstractMap.SimpleEntry<>((handsB.getValue().get(targetA.getValue()).getKey() == guessA.getValue()), new AbstractMap.SimpleEntry<>(targetA.getValue(), attackerA.getValue())); this.handsA.updateSucceedSelectA(value); this.handsB.updateSucceedSelectA(value); } diff --git a/src/main/java/resources/ResultBySelectingB.java b/src/main/java/resources/ResultBySelectingB.java index 36adb18..4aec0f0 100644 --- a/src/main/java/resources/ResultBySelectingB.java +++ b/src/main/java/resources/ResultBySelectingB.java @@ -6,15 +6,21 @@ public class ResultBySelectingB { private HandsA handsA; private HandsB handsB; + private AttackerB attackerB; + private TargetB targetB; + private GuessB guessB; private Map.Entry> value; - public ResultBySelectingB(HandsA handsA, HandsB handsB) { + public ResultBySelectingB(HandsA handsA, HandsB handsB, AttackerB attackerB, TargetB targetB, GuessB guessB) { this.handsA = handsA; this.handsB = handsB; + this.attackerB = attackerB; + this.targetB = targetB; + this.guessB = guessB; } - public void selectAndAttackB(int attacker, int target, int guess) { - this.value = new AbstractMap.SimpleEntry<>((handsA.getValue().get(target).getKey() == guess), new AbstractMap.SimpleEntry<>(target, attacker)); + public void selectAndAttackB() { + this.value = new AbstractMap.SimpleEntry<>((handsA.getValue().get(targetB.getValue()).getKey() == guessB.getValue()), new AbstractMap.SimpleEntry<>(targetB.getValue(), attackerB.getValue())); this.handsB.updateSucceedSelectB(value); this.handsA.updateSucceedSelectB(value); } diff --git a/src/main/java/resources/TargetA.java b/src/main/java/resources/TargetA.java new file mode 100644 index 0000000..103b5b0 --- /dev/null +++ b/src/main/java/resources/TargetA.java @@ -0,0 +1,13 @@ +package resources; + +public class TargetA { + private int value; + + public void setTargetA(int a) { + this.value = a; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/resources/TargetB.java b/src/main/java/resources/TargetB.java new file mode 100644 index 0000000..a7c1c5c --- /dev/null +++ b/src/main/java/resources/TargetB.java @@ -0,0 +1,13 @@ +package resources; + +public class TargetB { + private int value; + + public void setTargetB(int b) { + this.value = b; + } + + public int getValue() { + return value; + } +} diff --git a/src/test/java/AlgoTest.java b/src/test/java/AlgoTest.java index b3d2aea..80b81f8 100644 --- a/src/test/java/AlgoTest.java +++ b/src/test/java/AlgoTest.java @@ -20,6 +20,7 @@ @Test void testInitialize() { Algo algo = new Algo(); + algo.distributeHands(); printAlgoState(algo); assertEquals(2, algo.getHandsA().size()); assertEquals(2, algo.getHandsB().size()); @@ -33,6 +34,7 @@ void testAttack() { //初期化 Algo algo = new Algo(); + algo.distributeHands(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 @@ -40,7 +42,9 @@ var target = 0; //テスト対象メソッド //algo.drawA(guess, target); - algo.drawAndAttackA(target, guess); + algo.setTargetA(target); + algo.setGuessA(guess); + algo.drawAndAttackA(); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか @@ -59,6 +63,7 @@ void tes() { //初期化 Algo algo = new Algo(); + algo.distributeHands(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解でないカードを選択させるための変数 @@ -67,7 +72,9 @@ var top = algo.getDeck().get(0); //テスト対象メソッド // algo.drawA(guess, target); - algo.drawAndAttackA(target, guess); + algo.setTargetA(target); + algo.setGuessA(guess); + algo.drawAndAttackA(); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えている @@ -88,6 +95,7 @@ void testAtk() { //初期化 Algo algo = new Algo(); + algo.distributeHands(); var iniHandsBNum = algo.getHandsB().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 @@ -95,7 +103,9 @@ var target = 0; //テスト対象メソッド // algo.drawB(guess, target); - algo.drawAndAttackB(target, guess); + algo.setTargetB(target); + algo.setGuessB(guess); + algo.drawAndAttackB(); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsBNum+1,algo.getHandsB().size()); @@ -112,7 +122,7 @@ void testAtk2() { //初期化 Algo algo = new Algo(); - + algo.distributeHands(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; @@ -120,7 +130,10 @@ //テスト対象メソッド //algo.selectA(guess, attacker, target); - algo.selectAndAttackA(attacker, target, guess); + algo.setAttackerA(attacker); + algo.setTargetA(target); + algo.setGuessA(guess); + algo.selectAndAttackA(); printAlgoState(algo); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(target).getValue()); @@ -135,14 +148,17 @@ void testAtk3() { //初期化 Algo algo = new Algo(); - + algo.distributeHands(); //間違いのカードを選択させるための変数 var target = 0; var attacker = 0; var guess = algo.getHandsB().get(target).getKey()+1; //テスト対象メソッド // algo.selectA(guess, attacker, target); - algo.selectAndAttackA(attacker, target, guess); + algo.setAttackerA(attacker); + algo.setTargetA(target); + algo.setGuessA(guess); + algo.selectAndAttackA(); printAlgoState(algo); //Aによってアタックを成功されたBのカードが表になっていないか assertEquals(false, algo.getHandsB().get(target).getValue()); @@ -171,13 +187,15 @@ printViewA(algo); //Aはカードを1枚引き,アタックを成功させる. //Bはアタックされたカードを表にする. - - algo.drawAndAttackA(target, guess); + algo.setTargetA(target); + algo.setGuessA(guess); + algo.drawAndAttackA(); printViewA(algo); //Bはカードを1枚引き,アタックが失敗する. //Bはアタックに使用したカードを表にする. - algo.drawAndAttackB(target, guess); + algo.setTargetB(target); + algo.setGuessB(guess); printViewA(algo); int tar=0, gue=0; @@ -190,8 +208,9 @@ } //Aはカードを1枚引き,アタックを成功させる. //Bは全てのカードが表になるので,ゲームが終了する - - algo.drawAndAttackA(tar, gue); + algo.setTargetA(tar); + algo.setGuessA(gue); + algo.drawAndAttackA(); printViewA(algo); } diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java index 4d6d42e..b94d707 100644 --- a/src/test/java/MainTest.java +++ b/src/test/java/MainTest.java @@ -13,7 +13,9 @@ printAlgoState(algo); //Aはカードを1枚引き、Bの0番目のカードに対して「1」を宣言する。 - algo.drawAndAttackA(0, 3); + algo.setTargetA(0); + algo.setGuessA(3); + algo.drawAndAttackA(); //アタックは失敗する。 assertEquals(false, algo.getResultByDrawingA().getKey()); @@ -22,7 +24,9 @@ assertEquals(false, algo.getLoseB()); //Bはカードを1枚引き、Aの2番目のカードに対して「2」を宣言する。 - algo.drawAndAttackB(2, 2); + algo.setTargetB(2); + algo.setGuessB(2); + algo.drawAndAttackB(); //アタックは失敗する。 assertEquals(false, algo.getResultByDrawingB().getKey()); @@ -31,7 +35,9 @@ assertEquals(false, algo.getLoseB()); //Aはカードを1枚引き、Bの1番目のカードに対して「3」を宣言する。 - algo.drawAndAttackA(1, 3); + algo.setTargetA(1); + algo.setGuessA(3); + algo.drawAndAttackA(); //アタックは成功する。 assertEquals(true, algo.getResultByDrawingA().getKey()); @@ -40,7 +46,9 @@ assertEquals(false, algo.getLoseB()); //Bはカードを1枚引き、Aの0番目のカードに対して「2」を宣言する。 - algo.drawAndAttackB(0, 2); + algo.setTargetB(0); + algo.setGuessB(2); + algo.drawAndAttackB(); //アタックは失敗する。 assertEquals(false, algo.getResultByDrawingB().getKey()); @@ -49,7 +57,10 @@ assertEquals(false, algo.getLoseB()); //Aは手札の0番目のカードアタックに使用し、Bの0番目のカードに対して「1」を宣言する。 - algo.selectAndAttackA(0, 0, 1); + algo.setAttackerA(0); + algo.setTargetA(0); + algo.setGuessA(1); + algo.selectAndAttackA(); //アタックは成功する。 assertEquals(true, algo.getResultBySelectingA().getKey()); diff --git a/src/test/java/controls/BotIntelligenceTest.java b/src/test/java/controls/BotIntelligenceTest.java index 72b8957..9b921b9 100644 --- a/src/test/java/controls/BotIntelligenceTest.java +++ b/src/test/java/controls/BotIntelligenceTest.java @@ -1,6 +1,7 @@ package controls; import org.junit.jupiter.api.Test; +import resources.Algo; import static controls.ConstantMethods.printAlgoState; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -13,11 +14,13 @@ */ @Test void testCalc() { - StepScheduler stepScheduler=new StepScheduler(); - var algo = stepScheduler.algo; + + var algo = new Algo(); + algo.distributeHands(); + BotIntelligence botIntelligence=new BotIntelligence(new TurnBot(algo)); - stepScheduler.isATurn = false; + var candidate=botIntelligence.calculateCandidate(); printAlgoState(algo); var s= "["; @@ -41,8 +44,9 @@ var guess = algo.getHandsB().get(0).getKey(); var target = 1; //テスト対象メソッド - - algo.drawAndAttackA(target, guess); + algo.setTargetA(target); + algo.setGuessA(guess); + algo.drawAndAttackA(); stepScheduler.isATurn = false; printAlgoState(algo);