Newer
Older
Algolike / src / test / java / AlgoTest.java
import resources.Algo;
import org.junit.jupiter.api.Test;

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.drawAndAttackA(target, guess);

        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.drawAndAttackA(target, guess);
        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.drawAndAttackB(target, guess);
        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.selectAndAttackA(attacker, target, guess);
        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.selectAndAttackA(attacker, target, guess);
        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.drawAndAttackA(target, guess);
        printViewA(algo);

        //Bはカードを1枚引き,アタックが失敗する.
        //Bはアタックに使用したカードを表にする.
        algo.drawAndAttackB(target, guess);
        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.drawAndAttackA(tar, gue);
        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);
    }
}