public PieceMoveTransaction(IPlayer player, VerifiedMove verifiedMove, PositionArrayAccessor <IPiece> pieces, IFieldEffectChecker fieldEffectChecker, IValueInputProvider <int> valueProvider, bool isTurnEnd) { Assert.IsNotNull(verifiedMove); Assert.IsNotNull(verifiedMove.Player); Assert.IsNotNull(player); Assert.AreEqual(verifiedMove.Player, player); Assert.IsNotNull(pieces); Assert.IsNotNull(fieldEffectChecker); Assert.IsNotNull(valueProvider); this.player = player; this.pieces = pieces; this.valueProvider = valueProvider; startPosition = verifiedMove.MovingPiece.Position; //worldPathに開始地点は含まれないのでこの方法で開始地点を取得 viaPosition = verifiedMove.ViaPositionNode; endPosition = verifiedMove.WorldPath.Last(); this.worldPath = verifiedMove.WorldPath; this.isTurnEnd = isTurnEnd; pieceMover = new Mover(pieces); waterEntryChecker = new WaterEntryChecker(3, fieldEffectChecker, valueProvider); moveFinisher = new MoveFinisher(pieceMover, new Capturer(pieces)); }
//PositionArrayAccessor<IPiece> pieces, IFieldEffectChecker fieldEffectCheckerをコンストラクタの引数にすることも検討 public IPieceMoveTransaction Create(IPlayer player, VerifiedMove verifiedMove, PositionArrayAccessor <IPiece> pieces, IFieldEffectChecker fieldEffectChecker, IValueInputProvider <int> valueProvider, bool isTurnEnd) { return(new PieceMoveTransaction(player, verifiedMove, pieces, fieldEffectChecker, valueProvider, isTurnEnd)); }