Ejemplo n.º 1
0
        /// <summary>
        /// 前回動かした駒の位置を設定します。
        /// </summary>
        private void UpdatePrevMovedCell()
        {
            if (this.prevMovedCell != null)
            {
                Container.RemoveBanEffect(this.prevMovedCell);
                this.prevMovedCell = null;
            }

            if (!HasEffectFlag(EffectFlag.PrevCell))
            {
                return;
            }

            var board = (Container != null ? Container.Board : null);

            if (board != null && board.LastMove != null)
            {
                var position = board.LastMove.DstSquare;

                var cell = EffectTable.PrevMovedCell.LoadEffect();
                if (cell != null)
                {
                    cell.DataContext = CreateCellContext(position);

                    Container.AddBanEffect(cell);
                    this.prevMovedCell = cell;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 駒を動かせる位置を光らせます。
        /// </summary>
        private void UpdateMovableCell(Square square, BoardPiece piece)
        {
            if (this.movableCell != null)
            {
                Container.RemoveBanEffect(this.movableCell);
                this.movableCell = null;
            }

            if (!HasEffectFlag(EffectFlag.MovableCell))
            {
                return;
            }

            var board = Container.Board;

            if (board == null || piece == null)
            {
                return;
            }

            // 移動可能もしくは駒打ち可能な全マスを取得します。
            var isMove      = (square != null);
            var moveSquares =
                from sq in Board.AllSquares()
                let move = new BoardMove()
            {
                DstSquare     = square,
                SrcSquare     = sq,
                MovePiece     = (isMove ? piece.Piece : null),
                DropPieceType = (isMove ? PieceType.None : piece.PieceType),
                BWType        = piece.BWType,
            }
            let move2 = (Board.IsPromoteForce(move) ?
                         move.Apply(_ => _.IsPromote = true) : move)
                        where board.CanMove(move2)
                        select move2.DstSquare;

            // 移動可能なマスにエフェクトをかけます。
            var movableCell = EffectTable.MovableCell.LoadEffect();

            if (movableCell != null)
            {
                movableCell.DataContext = CreateCellContext(moveSquares, square);

                Container.AddBanEffect(movableCell);
                this.movableCell = movableCell;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 手番の表示を行います。
        /// </summary>
        private void UpdateTeban(BWType teban)
        {
            if (this.tebanCell != null)
            {
                Container.RemoveBanEffect(this.tebanCell);
                this.tebanCell = null;
            }

            if (!HasEffectFlag(EffectFlag.Teban))
            {
                return;
            }

            // 手番なしの時はオブジェクトを消去して帰ります。
            if (teban == BWType.None)
            {
                return;
            }

            // 移動可能なマスにエフェクトをかけます。
            var tebanCell = EffectTable.Teban.LoadEffect();

            if (tebanCell != null)
            {
                if (Container.ViewSide != BWType.Black)
                {
                    teban = teban.Flip();
                }

                tebanCell.DataContext = CreateCellContext((Square)null)
                                        .Apply(_ => _.BWType = teban);

                Container.AddBanEffect(tebanCell);
                this.tebanCell = tebanCell;
            }
        }