Example #1
0
    public V2 Last1()
    {
        var returnPos  = new V2();
        var firstBoard = new BoolCoin[8][];
        var maxScore   = 0;

        for (var i = 0; i < 8; i++)
        {
            firstBoard[i] = new BoolCoin[8];
            for (var j = 0; j < 8; j++)
            {
                if (GameController.Board[i][j])
                {
                    firstBoard[i][j] = new BoolCoin(GameController.Board[i][j].GetComponent <Coin>().Color);
                }
                else
                {
                    firstBoard[i][j] = new BoolCoin();
                }
            }
        }
        var firstPutablePos = PutablePos(AiTurn, firstBoard);

        Debug.Log("count:" + firstPutablePos.Count);
        foreach (var pos in firstPutablePos)
        {
            var thisScore = 0;
            var nextBoard = MakeBoard(firstBoard);
            PutBool(pos, AiTurn, nextBoard);
            var playerPutable = PutablePos(!AiTurn, nextBoard);
            if (playerPutable.Count == 0)
            {
                return(pos);
            }
            foreach (var playerpos in playerPutable)
            {
                var nextnextBoard = MakeBoard(nextBoard);
                PutBool(playerpos, !AiTurn, nextnextBoard);
                var aiPutable = PutablePos(AiTurn, nextnextBoard);
                var allGet    = (from aiPut in aiPutable let lastBoard = MakeBoard(nextnextBoard) select PutBoolCoinResult(aiPut, AiTurn, lastBoard).Count).Sum();
                thisScore += allGet;
                Debug.Log("allGet:" + allGet);
            }
            Debug.Log("thisScore:" + thisScore);
            if (maxScore > thisScore)
            {
                continue;
            }
            maxScore  = thisScore;
            returnPos = pos;
            Debug.Log("(" + pos.X + "," + pos.Y + ")");
        }
        Debug.Log("(" + returnPos.X + "," + returnPos.Y + ")");
        return(returnPos);
    }
Example #2
0
    public BoolCoin[][] MakeBoard(BoolCoin[][] originBoard)
    {
        var newBoard = new BoolCoin[originBoard.Length][];

        for (var i = 0; i < originBoard.Length; i++)
        {
            newBoard[i] = new BoolCoin[originBoard[i].Length];
            for (var j = 0; j < originBoard[i].Length; j++)
            {
                newBoard[i][j] = new BoolCoin
                {
                    Exist = originBoard[i][j].Exist,
                    Color = originBoard[i][j].Color
                };
            }
        }
        return(newBoard);
    }
Example #3
0
    public V2 Last2()
    {
        Debug.Log("Last2");
        BoolBoard = new BoolCoin[GameController.Board.Length][];
        for (var i = 0; i < BoolBoard.Length; i++)
        {
            BoolBoard[i] = new BoolCoin[GameController.Board[i].Length];
            for (var j = 0; j < BoolBoard[i].Length; j++)
            {
                if (GameController.Board[i][j])
                {
                    BoolBoard[i][j] = new BoolCoin(GameController.Board[i][j].GetComponent <Coin>().Color);
                }
                else
                {
                    BoolBoard[i][j] = new BoolCoin();
                }
            }
        }
        var maxScore = -9999;
        var goodPos  = new List <V2>();

        foreach (var pos in PutCoins)
        {
            var thisScore = 0;
            PutBool(pos, AiTurn, BoolBoard);
            thisScore += CoinCount(AiTurn, BoolBoard);
            thisScore -= Score(PutablePos(!AiTurn, BoolBoard));
            if (maxScore < thisScore)
            {
                goodPos = new List <V2> {
                    pos
                };
                maxScore = thisScore;
            }
            else if (maxScore == thisScore)
            {
                goodPos.Add(pos);
            }
        }
        var returnPos = goodPos[Random.Range(0, goodPos.Count - 1)];

        return(returnPos);
    }