예제 #1
0
파일: Rater3.cs 프로젝트: madddmax/jackal
 protected override void StepOnSameTile(MoveRate moveRate)
 {
     if (!TargetIsShip(moveRate.Move) && MyPirates.Any(p => p.Position == moveRate.Move.To))
     {
         moveRate.AddApplyToAllRate("StepOnSameTile", 0.9);
     }
 }
예제 #2
0
파일: Rater.cs 프로젝트: madddmax/jackal
        /// <summary>
        /// Удаление от корабля
        /// </summary>
        /// <param name="moveRate"></param>
        protected void MoveFromShip(MoveRate moveRate)
        {
            //Не считаем удаленность если двигаемся с корабля или с кораблем
            if (moveRate.Move.From.Position == MyShip.Position)
            {
                if (Distance(moveRate.Move.To.Position, MyShip.Position) < Distance(moveRate.Move.From.Position, MyShip.Position))
                {
                    return;
                }
            }

            moveRate.AddApplyToAllRate("MoveFromShip", DistanceCoefRevert(Distance(MyShip.Position, moveRate.Move.To.Position)));
        }
예제 #3
0
파일: Rater.cs 프로젝트: madddmax/jackal
        /// <summary>
        /// Ход под удар
        /// </summary>
        /// <param name="moveRate"></param>
        protected virtual void MoveUnderAtack(MoveRate moveRate)
        {
            //Не боимся слазить с корабля стоя на нем
            if (moveRate.Move.From.Position == MyShip.Position)
            {
                return;
            }

            if (AllEnemies.Any(e => Distance(e.Position.Position, moveRate.Move.To.Position) == 1))
            {
                moveRate.AddApplyToAllRate("MoveUnderAtack", Coef.MoveUnderAtack);
            }
        }
예제 #4
0
파일: Rater3.cs 프로젝트: madddmax/jackal
        /// <summary>
        /// Уход от удара
        /// </summary>
        /// <param name="moveRate"></param>
        protected override void MoveFromAtack(MoveRate moveRate)
        {
            //Не боимся слазить с корабля стоя на нем
            if (moveRate.Move.From.Position == MyShip.Position)
            {
                return;
            }

            if (AllEnemies.Any(e => Distance(e.Position.Position, moveRate.Move.From.Position) == 1) &&
                AllEnemies.All(e => Distance(e.Position.Position, moveRate.Move.To.Position) != 1))
            {
                moveRate.AddRate("MoveFromAtack", Coef.MoveFromAtack
                                 * (moveRate.Move.WithCoins ? 1.3 : 1)
                                 * (GoldOnPosition(moveRate.Move.To.Position) > 0 ? 1.2 : 1)
                                 * (Distance(moveRate.Move.From.Position, MyShip.Position) > Distance(moveRate.Move.To.Position, MyShip.Position) ? 1.1 : 1)
                                 * (Distance(moveRate.Move.From.Position, MyShip.Position) < Distance(moveRate.Move.To.Position, MyShip.Position) ? 0.9 : 1)
                                 );
                moveRate.AddApplyToAllRate("MoveFromAtackToAll", Coef.MoveFromAtackToAll);
            }
        }
예제 #5
0
파일: Rater3.cs 프로젝트: madddmax/jackal
        /// <summary>
        /// Ход под удар
        /// </summary>
        /// <param name="moveRate"></param>
        protected override void MoveUnderAtack(MoveRate moveRate)
        {
            //Не боимся слазить с корабля стоя на нем
            if (moveRate.Move.From.Position == MyShip.Position)
            {
                return;
            }

            var myAtakers = AllEnemies.Count(p => Distance(p.Position.Position, moveRate.Move.To.Position) == 1);

            if (myAtakers == 0)
            {
                return;
            }

            var myDefence = MyPirates.Count(p => Distance(p.Position.Position, moveRate.Move.To.Position) == 1) - 1;

            if (myDefence < myAtakers)
            {
                moveRate.AddApplyToAllRate("MoveUnderAtack", Coef.MoveUnderAtack);
            }
        }