diff --git a/src/main/java/resources/Algo.java b/src/main/java/resources/Algo.java index 96012b4..8d371e0 100644 --- a/src/main/java/resources/Algo.java +++ b/src/main/java/resources/Algo.java @@ -5,6 +5,7 @@ import java.util.Map; import static views.Constants.DECK_COUNT; +import static views.Constants.HAND_COUNT; public class Algo { private LoseB loseB; @@ -32,13 +33,8 @@ succeedSelectB = new SucceedSelectB(handsA, handsB); //追加分 isATurn = true; - deck.reset(DECK_COUNT); - for (int i = 0; i < 2; i++) { - handsA.getValue().add(deck.head()); - handsB.getValue().add(deck.head()); - } - getHandsA().sort(Comparator.comparing(Map.Entry::getKey)); - getHandsB().sort(Comparator.comparing(Map.Entry::getKey)); + deck.init(DECK_COUNT); + } public void inputSelectA(int guess, int attacker, int target) { @@ -94,11 +90,25 @@ } //追加分 + /** + * 各プレイヤーに手札を配るメソッド + */ + public void distributeHands(){ + for (int i = 0; i < HAND_COUNT; i++) { + handsA.getValue().add(deck.head()); + handsB.getValue().add(deck.head()); + } + getHandsA().sort(Comparator.comparing(Map.Entry::getKey)); + getHandsB().sort(Comparator.comparing(Map.Entry::getKey)); + } + public void setDeck(int... param){ + deck.setValue(param); + } public boolean isATurn() { return isATurn; } public void updateTurn() { - isATurn = isATurn ? false : true; + isATurn = !isATurn; } } \ No newline at end of file diff --git a/src/main/java/resources/Deck.java b/src/main/java/resources/Deck.java index 5d8cfd1..0b443a0 100644 --- a/src/main/java/resources/Deck.java +++ b/src/main/java/resources/Deck.java @@ -8,13 +8,19 @@ private List> value = new ArrayList<>(); //added - public void reset(int num) { + public void init(int num) { for (int i = 0; i < num; i++) { this.value.add(new AbstractMap.SimpleEntry<>(i, false)); } Collections.shuffle(this.value); } + public void setValue(int... params){ + this.value.clear(); + for (int i = 0; i < params.length; i++){ + this.value.add(new AbstractMap.SimpleEntry<>(i, false)); + } + } //added public Map.Entry head() { Map.Entry card = getValue().get(0); diff --git a/src/main/java/views/Constants.java b/src/main/java/views/Constants.java index a91b22c..291f0f9 100644 --- a/src/main/java/views/Constants.java +++ b/src/main/java/views/Constants.java @@ -7,6 +7,7 @@ public static final int CARD_HEIGHT = 75; public static String CLOSED_SYMBOL = "?"; public static int DECK_COUNT = 12; + public static int HAND_COUNT = 2; public static Color SELECTED_COLOR = Color.CYAN; public static Color ATTACKER_COLOR = Color.RED; public static Color UNSELECTED_COLOR = Color.BLACK; diff --git a/src/main/java/views/MainFrame.java b/src/main/java/views/MainFrame.java index 7b6607c..acaf0e4 100644 --- a/src/main/java/views/MainFrame.java +++ b/src/main/java/views/MainFrame.java @@ -13,6 +13,7 @@ public MainFrame() { super("Algolike"); Algo algo = new Algo(); + algo.distributeHands(); MainPanel mainPanel = new MainPanel(algo); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); diff --git a/src/test/java/AlgoTest.java b/src/test/java/AlgoTest.java index 636248d..66619a0 100644 --- a/src/test/java/AlgoTest.java +++ b/src/test/java/AlgoTest.java @@ -1,6 +1,8 @@ import resources.Algo; import org.junit.jupiter.api.Test; +import resources.Deck; +import java.lang.reflect.Field; import java.util.AbstractMap; import static controls.ConstantMethods.printAlgoState; @@ -9,7 +11,16 @@ public class AlgoTest { @Test - void ゲーム開始時0から10のカードで構成されたデッキとそこから2枚引いて構成された各プレイヤーの手札が存在する() { + void testAlgo(){ + Algo algo = new Algo(); + + } + + /** + * ゲーム開始時0から10のカードで構成されたデッキとそこから2枚引いて構成された各プレイヤーの手札が存在する + */ + @Test + void testInitialize() { Algo algo = new Algo(); printAlgoState(algo); assertEquals(2, algo.getHandsA().size()); @@ -17,8 +28,11 @@ } + /** + * Aはデッキから引いたカードでアタックが成功してBのカードが1枚表になる + */ @Test - void Aはデッキから引いたカードでアタックが成功してBのカードが1枚表になる() { + void testAttack() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); @@ -39,8 +53,12 @@ assertEquals(initDeckNum-1,algo.getDeck().size()); } + + /** + * Aはデッキから引いたカードでアタックが失敗してAのデッキに表のカードが追加される + */ @Test - void Aはデッキから引いたカードでアタックが失敗してAのデッキに表のカードが追加される() { + void tes() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); @@ -64,8 +82,12 @@ assertEquals(initDeckNum-1,algo.getDeck().size()); } + + /** + * Bはデッキから引いたカードでアタックが成功してAのカードが1枚表になる + */ @Test - void Bはデッキから引いたカードでアタックが成功してAのカードが1枚表になる() { + void testAtk() { //初期化 Algo algo = new Algo(); var iniHandsBNum = algo.getHandsB().size(); @@ -84,8 +106,12 @@ //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } + + /** + * Aは手札から選んだカードでアタックが成功してBのカードが1枚表になる + */ @Test - void Aは手札から選んだカードでアタックが成功してBのカードが1枚表になる() { + void testAtk2() { //初期化 Algo algo = new Algo(); @@ -103,8 +129,12 @@ //Aのアタックを成功しているので,使用したカードが表になっていないか assertEquals(false, algo.getHandsA().get(attacker).getValue()); } + + /** + * Aは手札から選んだカードでのアタックが失敗し選んだカードが表になる + */ @Test - void Aは手札から選んだカードでのアタックが失敗し選んだカードが表になる() { + void testAtk3() { //初期化 Algo algo = new Algo(); @@ -121,10 +151,21 @@ //Aのアタックが失敗しているので,使用したカードが表になっているか assertEquals(true, algo.getHandsA().get(attacker).getValue()); } + @Test - void playA(){ + void playB() { Algo algo = new Algo(); - //正解のカードを選択させるための変数 + algo.setDeck(0, 1, 2, 3, 4, 5, 6); + algo.distributeHands(); + + + + printAlgoState(algo); + } + @Test + void playA() { + Algo algo = new Algo(); + algo.distributeHands(); var guess = algo.getHandsB().get(0).getKey(); var target = 0; var attacker = 0; diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java new file mode 100644 index 0000000..c9da560 --- /dev/null +++ b/src/test/java/MainTest.java @@ -0,0 +1,63 @@ +import org.junit.jupiter.api.Test; +import resources.Algo; + +import static controls.ConstantMethods.printAlgoState; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MainTest { + @Test + void test(){ + Algo algo = new Algo(); + algo.setDeck(0, 1, 2, 3, 4, 5, 6, 7); + algo.distributeHands(); + printAlgoState(algo); + + //Aはカードを1枚引き、Bの0番目のカードに対して「1」を宣言する。 + algo.inputDrawA(3, 0); + + //アタックは失敗する。 + assertEquals(false, algo.getSucceedDrawA().getKey()); + + assertEquals(false, algo.getLoseA()); + assertEquals(false, algo.getLoseB()); + + //Bはカードを1枚引き、Aの2番目のカードに対して「2」を宣言する。 + algo.inputDrawB(2,2); + + //アタックは失敗する。 + assertEquals(false, algo.getSucceedDrawB().getKey()); + + assertEquals(false, algo.getLoseA()); + assertEquals(false, algo.getLoseB()); + + //Aはカードを1枚引き、Bの1番目のカードに対して「3」を宣言する。 + algo.inputDrawA(3, 1); + + //アタックは成功する。 + assertEquals(true, algo.getSucceedDrawA().getKey()); + + assertEquals(false, algo.getLoseA()); + assertEquals(false, algo.getLoseB()); + + //Bはカードを1枚引き、Aの0番目のカードに対して「2」を宣言する。 + algo.inputDrawB(2,0); + + //アタックは失敗する。 + assertEquals(false, algo.getSucceedDrawB().getKey()); + + assertEquals(false, algo.getLoseA()); + assertEquals(false, algo.getLoseB()); + + //Aは手札の0番目のカードアタックに使用し、Bの0番目のカードに対して「1」を宣言する。 + algo.inputSelectA(1, 0, 0); + + //アタックは成功する。 + assertEquals(true, algo.getSucceedSelectA().getKey()); + + //Bの手札が全て表になったので、Bは敗北する。 + assertEquals(false, algo.getLoseA()); + assertEquals(true, algo.getLoseB()); + + printAlgoState(algo); + } +} diff --git a/src/test/java/controls/BotIntelligenceTest.java b/src/test/java/controls/BotIntelligenceTest.java index aa18c35..81f11b2 100644 --- a/src/test/java/controls/BotIntelligenceTest.java +++ b/src/test/java/controls/BotIntelligenceTest.java @@ -8,8 +8,11 @@ class BotIntelligenceTest { + /** + * 正しく未確定数字を計算ができる + */ @Test - void 正しく未確定数字を計算ができる() { + void testCalc() { StepScheduler stepScheduler=new StepScheduler(); var algo = stepScheduler.algo; @@ -22,8 +25,12 @@ s+="]"; System.out.println(s); } + + /** + * 各手札のカードに対して候補を算出できる + */ @Test - void 各手札のカードに対して候補を算出できる(){ + void calc(){ StepScheduler stepScheduler=new StepScheduler(); var algo = stepScheduler.algo;