Beispiel #1
0
    // 評価
    int SumEvaluation(Data d, BoardController board)
    {
        int score = 0;

        foreach (ICharacter character in _player.GetCharacters())
        {
            // バトルの相性を調べる
            int distance = BattleManager.Instance.GetDistance(d._x, d._y, character.X(), character.Y());
            BattleManager.Compatibility compaibliy = BattleManager.Instance.CheckCompatibility(d._type, character.GetMyType());
            if (distance == 1)
            {
                // スコアの割り当て
                if (compaibliy == BattleManager.Compatibility.Strong)
                {
                    score += 30;
                }
                if (compaibliy == BattleManager.Compatibility.Weak)
                {
                    score -= 15;
                }
            }
            if (d._character && d._character.GetMyState() == ICharacter.STATE.GREEN)
            {
                score -= 20;
            }

            if (d._x == character.X())
            {
                int  vecY = (character.Y() - d._y > 0) ? 1 : -1;
                Tile tile = board.SlideMove(d._x, d._y, 0, vecY);
                if (tile.Y() + vecY == character.Y())
                {
                    if (compaibliy == BattleManager.Compatibility.Strong)
                    {
                        score += 5;
                    }
                    else if (compaibliy == BattleManager.Compatibility.Weak)
                    {
                        score -= 5;
                    }
                    else
                    {
                        score += 3;
                    }
                    if (d._character)
                    {
                        if (d._character.X() == d._x)
                        {
                            if (compaibliy == BattleManager.Compatibility.Strong)
                            {
                                score += 5;
                            }
                            else if (compaibliy == BattleManager.Compatibility.Weak)
                            {
                                score -= 5;
                            }
                        }
                    }
                }
            }
            if (d._y == character.Y())
            {
                int  vecX = (character.X() - d._x > 0) ? 1 : -1;
                Tile tile = board.SlideMove(d._x, d._y, vecX, 0);
                if (tile.X() + vecX == character.X())
                {
                    if (compaibliy == BattleManager.Compatibility.Strong)
                    {
                        score += 5;
                    }
                    else if (compaibliy == BattleManager.Compatibility.Weak)
                    {
                        score -= 5;
                    }
                    else
                    {
                        score += 3;
                    }
                    if (d._character)
                    {
                        if (d._character.Y() == d._y)
                        {
                            if (compaibliy == BattleManager.Compatibility.Strong)
                            {
                                score += 5;
                            }
                            else if (compaibliy == BattleManager.Compatibility.Weak)
                            {
                                score -= 5;
                            }
                        }
                    }
                }
            }
        }

        for (int i = -1; i <= 1; i++)
        {
            int  y    = d._y + i;
            Tile tile = board.GetTile(y, board.GetWidth() - 1);
            if (!tile || tile.OnPiece())
            {
                continue;
            }
            tile = board.SlideMove(tile.X(), tile.Y(), -1, 0);
            if (BattleManager.Instance.GetDistance(tile.X(), tile.Y(), d._x, d._y) <= 1)
            {
                score -= 10;
                break;
            }
        }

        #region
        // 置いた場所で勝てるかどうか
        //
        //
        //for (int i = 0; i < board.GetHeight(); i++)
        //{
        //    for (int j = 0; j < board.GetWidth(); j++)
        //    {
        //        Tile t = board.GetTile(i, j);
        //        if (t == null) score += 3;
        //    }
        //}
        #endregion

        return(score);
    }