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; import static org.junit.jupiter.api.Assertions.*; public class AlgoTest { @Test void testAlgo(){ Algo algo = new Algo(); } /** * ゲーム開始時0から10のカードで構成されたデッキとそこから2枚引いて構成された各プレイヤーの手札が存在する */ @Test void testInitialize() { Algo algo = new Algo(); printAlgoState(algo); assertEquals(2, algo.getHandsA().size()); assertEquals(2, algo.getHandsB().size()); } /** * Aはデッキから引いたカードでアタックが成功してBのカードが1枚表になる */ @Test void testAttack() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; //テスト対象メソッド //algo.drawA(guess, target); algo.inputDrawA(guess,target); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsANum+1,algo.getHandsA().size()); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(0).getValue()); //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } /** * Aはデッキから引いたカードでアタックが失敗してAのデッキに表のカードが追加される */ @Test void tes() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解でないカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey()+1; var target = 0; var top = algo.getDeck().get(0); //テスト対象メソッド // algo.drawA(guess, target); algo.inputDrawA(guess, target); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えている assertEquals(iniHandsANum+1,algo.getHandsA().size()); //アタックの失敗でBのカードが表になっていない assertEquals(false, algo.getHandsB().get(0).getValue()); //アタックが失敗したので,使用したカードが表になっている assertTrue(algo.getHandsA().contains(new AbstractMap.SimpleEntry<>(top.getKey(),true))); //Aがデッキから引いているので,デッキの枚数が1枚減っている assertEquals(initDeckNum-1,algo.getDeck().size()); } /** * Bはデッキから引いたカードでアタックが成功してAのカードが1枚表になる */ @Test void testAtk() { //初期化 Algo algo = new Algo(); var iniHandsBNum = algo.getHandsB().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 var guess = algo.getHandsA().get(0).getKey(); var target = 0; //テスト対象メソッド // algo.drawB(guess, target); algo.inputDrawB(guess, target); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsBNum+1,algo.getHandsB().size()); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsA().get(0).getValue()); //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } /** * Aは手札から選んだカードでアタックが成功してBのカードが1枚表になる */ @Test void testAtk2() { //初期化 Algo algo = new Algo(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; var attacker = 0; //テスト対象メソッド //algo.selectA(guess, attacker, target); algo.inputSelectA(guess, attacker, target); printAlgoState(algo); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(target).getValue()); //Aのアタックを成功しているので,使用したカードが表になっていないか assertEquals(false, algo.getHandsA().get(attacker).getValue()); } /** * Aは手札から選んだカードでのアタックが失敗し選んだカードが表になる */ @Test void testAtk3() { //初期化 Algo algo = new Algo(); //間違いのカードを選択させるための変数 var target = 0; var attacker = 0; var guess = algo.getHandsB().get(target).getKey()+1; //テスト対象メソッド // algo.selectA(guess, attacker, target); algo.inputSelectA(guess, attacker, target); printAlgoState(algo); //Aによってアタックを成功されたBのカードが表になっていないか assertEquals(false, algo.getHandsB().get(target).getValue()); //Aのアタックが失敗しているので,使用したカードが表になっているか assertEquals(true, algo.getHandsA().get(attacker).getValue()); } @Test 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; printViewA(algo); //Aはカードを1枚引き,アタックを成功させる. //Bはアタックされたカードを表にする. algo.inputDrawA(guess, target); printViewA(algo); //Bはカードを1枚引き,アタックが失敗する. //Bはアタックに使用したカードを表にする. algo.inputDrawB(guess,target); printViewA(algo); int tar=0, gue=0; for(int i=0;i<algo.getHandsB().size();i++){ if(algo.getHandsB().get(i).getValue()==false){ tar=i; gue=algo.getHandsB().get(i).getKey(); break; } } //Aはカードを1枚引き,アタックを成功させる. //Bは全てのカードが表になるので,ゲームが終了する algo.inputDrawA(gue, tar); printViewA(algo); } void printViewA(Algo algo){ String s="--------------\n"; s+="\thandsB:\t"; for(var b : algo.getHandsB()){ s+=(b.getValue()?"["+b.getKey()+"+]":"[ -]"); } s+="\ndeck: "+algo.getDeck().size()+"\n"; s+="\thandsA:\t"; for(var a : algo.getHandsA()){ s+="["+a.getKey()+(a.getValue()?"+":"-")+"]"; } s+="\n\n"; if(algo.getLoseA())s+="B win.\n"; else if(algo.getLoseB())s+="A win.\n"; System.out.println(s); } void printViewB(Algo algo){ String s=""; s+="\thandsA:\t"; for(var a : algo.getHandsA()){ s+=(a.getValue()?"["+a.getKey()+"+]":"[ -]"); } s+="\n\t\t\t\t\tdeck: "+algo.getDeck().size()+"\n"; s+="\thandsB:\t"; for(var b : algo.getHandsB()){ s+="["+b.getKey()+(b.getValue()?"+":"-")+"]"; } System.out.println(s); } }