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)); }
internal Board(PositionArrayAccessor <IPiece> pieceMap, FieldEffectChecker fieldEffectChecker, IPieceMoveTransactionFactory pieceMoveActionFactory) { this.pieces = pieceMap; this.fieldEffectChecker = fieldEffectChecker; this.pieceMoveActionFactory = pieceMoveActionFactory; this.moveVerifier = new PieceMoveVerifier(pieces); Width = pieces.Width; Height = pieces.Height; onEveryValueChanged.OnNext(Unit.Default); }
public static IBoard Create(IPlayer frontPlayer, IPlayer backPlayer) { IPiece tam = new Minds(PieceColor.Black, new PublicDataType.IntegerVector2(4, 4), null, null); //fieldEffectCheckerに渡すため別途生成 FieldEffectChecker fieldChecker = new StandardizedRule.FieldEffectChecker(new PositionArrayAccessor <FieldEffect>(BoardMapGenerator.GenerateFieldEffectMap()), tam); IPiece[,] piece2DArray = BoardMapGenerator.GeneratePiece2DMap(frontPlayer, backPlayer, tam, fieldChecker); PositionArrayAccessor <IPiece> pieceMap = new PositionArrayAccessor <IPiece>(piece2DArray); IBoard board = new Board(pieceMap, fieldChecker, new PieceMoveTransactionFactory()); return(board); }
public static IBoard Create(IPlayer frontPlayer, IPlayer backPlayer) { IPiece tam = new Minds(PieceColor.Black, new PublicDataType.IntegerVector2(4, 4), null, null); //fieldEffectCheckerに渡すため別途生成 FieldEffect[,] fieldEffectMap = new FieldEffect[, ] { { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Tarfe, FieldEffect.Normal, FieldEffect.Tammua, FieldEffect.Normal, FieldEffect.Tarfe, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Tarfe, FieldEffect.Tammua, FieldEffect.Tarfe, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Tammua, FieldEffect.Tammua, FieldEffect.Tanzo, FieldEffect.Tammua, FieldEffect.Tammua, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Tarfe, FieldEffect.Tammua, FieldEffect.Tarfe, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Tarfe, FieldEffect.Normal, FieldEffect.Tammua, FieldEffect.Normal, FieldEffect.Tarfe, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal }, { FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal, FieldEffect.Normal }, }; StandardizedRule.FieldEffectChecker fieldChecker = new StandardizedRule.FieldEffectChecker(new PositionArrayAccessor <FieldEffect>(fieldEffectMap), tam); IPiece[,] piece2DArray = new IPiece[, ] { { new Officer(PieceColor.Black, new PublicDataType.IntegerVector2(0, 0), backPlayer, fieldChecker), new Horse(PieceColor.Black, new PublicDataType.IntegerVector2(1, 0), backPlayer, fieldChecker), new Chariot(PieceColor.Black, new PublicDataType.IntegerVector2(2, 0), backPlayer, fieldChecker), new General(PieceColor.Black, new PublicDataType.IntegerVector2(3, 0), backPlayer, fieldChecker), new King(PieceColor.Red, new PublicDataType.IntegerVector2(4, 0), backPlayer, fieldChecker), new General(PieceColor.Red, new PublicDataType.IntegerVector2(5, 0), backPlayer, fieldChecker), new Chariot(PieceColor.Red, new PublicDataType.IntegerVector2(6, 0), backPlayer, fieldChecker), new Horse(PieceColor.Red, new PublicDataType.IntegerVector2(7, 0), backPlayer, fieldChecker), new Officer(PieceColor.Red, new PublicDataType.IntegerVector2(8, 0), backPlayer, fieldChecker) }, { new Shaman(PieceColor.Red, new PublicDataType.IntegerVector2(0, 1), backPlayer, fieldChecker), new Archer(PieceColor.Red, new PublicDataType.IntegerVector2(1, 1), backPlayer, fieldChecker), null, new Tiger(PieceColor.Red, new PublicDataType.IntegerVector2(3, 1), backPlayer, fieldChecker), null, new Tiger(PieceColor.Black, new PublicDataType.IntegerVector2(5, 1), backPlayer, fieldChecker), null, new Archer(PieceColor.Red, new PublicDataType.IntegerVector2(7, 1), backPlayer, fieldChecker), new Shaman(PieceColor.Red, new PublicDataType.IntegerVector2(8, 1), backPlayer, fieldChecker) }, { new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(0, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(1, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(2, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(3, 2), backPlayer, fieldChecker), new Vessel(PieceColor.Red, new PublicDataType.IntegerVector2(4, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(5, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(6, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(7, 2), backPlayer, fieldChecker), new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(8, 2), backPlayer, fieldChecker) }, { null, null, null, null, null, null, null, null, null }, { null, null, null, null, tam, null, null, null, null }, { null, null, null, null, null, null, null, null, null }, { new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(0, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(1, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(2, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(3, 6), frontPlayer, fieldChecker), new Vessel(PieceColor.Black, new PublicDataType.IntegerVector2(4, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(5, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(6, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Red, new PublicDataType.IntegerVector2(7, 6), frontPlayer, fieldChecker), new Pawn(PieceColor.Black, new PublicDataType.IntegerVector2(8, 6), frontPlayer, fieldChecker) }, { new Shaman(PieceColor.Black, new PublicDataType.IntegerVector2(0, 7), frontPlayer, fieldChecker), new Archer(PieceColor.Black, new PublicDataType.IntegerVector2(1, 7), frontPlayer, fieldChecker), null, new Tiger(PieceColor.Black, new PublicDataType.IntegerVector2(3, 7), frontPlayer, fieldChecker), null, new Tiger(PieceColor.Red, new PublicDataType.IntegerVector2(5, 7), frontPlayer, fieldChecker), null, new Archer(PieceColor.Red, new PublicDataType.IntegerVector2(7, 7), frontPlayer, fieldChecker), new Shaman(PieceColor.Red, new PublicDataType.IntegerVector2(8, 7), frontPlayer, fieldChecker) }, { new Officer(PieceColor.Red, new PublicDataType.IntegerVector2(0, 8), frontPlayer, fieldChecker), new Horse(PieceColor.Red, new PublicDataType.IntegerVector2(1, 8), frontPlayer, fieldChecker), new Chariot(PieceColor.Red, new PublicDataType.IntegerVector2(2, 8), frontPlayer, fieldChecker), new General(PieceColor.Red, new PublicDataType.IntegerVector2(3, 8), frontPlayer, fieldChecker), new King(PieceColor.Black, new PublicDataType.IntegerVector2(4, 8), frontPlayer, fieldChecker), new General(PieceColor.Black, new PublicDataType.IntegerVector2(5, 8), frontPlayer, fieldChecker), new Chariot(PieceColor.Black, new PublicDataType.IntegerVector2(6, 8), frontPlayer, fieldChecker), new Horse(PieceColor.Black, new PublicDataType.IntegerVector2(7, 8), frontPlayer, fieldChecker), new Officer(PieceColor.Black, new PublicDataType.IntegerVector2(8, 8), frontPlayer, fieldChecker) } }; PositionArrayAccessor <IPiece> pieceMap = new PositionArrayAccessor <IPiece>(piece2DArray); IBoard board = new StandardizedRule.Board(pieceMap, fieldChecker, new StandardizedRule.PieceMoveAction.PieceMoveTransactionFactory()); return(board); }
//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)); }
public Capturer(PositionArrayAccessor <IPiece> pieces) { this.pieces = pieces; }
public Mover(PositionArrayAccessor <IPiece> pieceMap) { this.pieceMap = pieceMap; }
public FieldEffectChecker(PositionArrayAccessor <FieldEffect> columns, params IReadOnlyPiece[] pieces) { this.columns = columns; this.pieces = pieces; }