Ejemplo n.º 1
0
        protected DefenseDirectionInfo GetDefenseConnectCount(Model model, int posX, int posY, ChessType posChessType, int volumeX, int volumeY)
        {
            DefenseDirectionInfo defenseDirectionInfo = new DefenseDirectionInfo();

            defenseDirectionInfo.EnemyConnectCount = 0;
            defenseDirectionInfo.IsEnemyLive       = false;

            var board = model.GetBoardByCopy();

            int x = posX + volumeX;
            int y = posY + volumeY;

            ChessType enemyChessType = Utility.GetOppositeChessType(posChessType);

            if ((y < 0 || y >= GameDef.board_cell_length) ||
                (x < 0 || x >= GameDef.board_cell_length))
            {
                return(defenseDirectionInfo);
            }

            while (board[y][x] == enemyChessType)
            {
                defenseDirectionInfo.EnemyConnectCount++;

                x += volumeX;
                y += volumeY;

                if ((y < 0 || y >= GameDef.board_cell_length) ||
                    (x < 0 || x >= GameDef.board_cell_length))
                {
                    break;
                }
            }

            if ((y < 0 || y >= GameDef.board_cell_length) ||
                (x < 0 || x >= GameDef.board_cell_length))
            {
                defenseDirectionInfo.IsEnemyLive = false;
            }
            else
            {
                if (board[y][x] == ChessType.None)
                {
                    defenseDirectionInfo.IsEnemyLive = true;
                }
            }

            return(defenseDirectionInfo);
        }
Ejemplo n.º 2
0
        protected int CalculateDefenseScore(DefenseDirectionInfo defenseDirectionInfo)
        {
            int  res     = 0;
            int  connect = defenseDirectionInfo.EnemyConnectCount;
            bool isLive  = defenseDirectionInfo.IsEnemyLive;

            if (connect >= 4)
            {
                res = 1000000;
            }
            else if (connect == 3)
            {
                if (isLive)
                {
                    res = 4000;
                }
                else
                {
                    res = 2000;
                }
            }
            else if (connect == 2)
            {
                if (isLive)
                {
                    res = 400;
                }
                else
                {
                    res = 200;
                }
            }
            else if (connect == 1)
            {
                if (isLive)
                {
                    res = 150;
                }
                else
                {
                    res = 75;
                }
            }

            return(res);
        }