protected override void StepOnSameTile(MoveRate moveRate) { if (!TargetIsShip(moveRate.Move) && MyPirates.Any(p => p.Position == moveRate.Move.To)) { moveRate.AddApplyToAllRate("StepOnSameTile", 0.9); } }
/// <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))); }
/// <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); } }
/// <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); } }
/// <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); } }