Exemplo n.º 1
0
 //board是移动后的棋盘
 public void SetBoard(byte[] board, bool redPlayer, bool redTurn)
 {
     data.AutoSetBoard(board, redTurn);
     //   if (false == autoTrack) return;
     snap = data.GetCurrentSnap(redPlayer);
     refresh();
 }
Exemplo n.º 2
0
        private void moveList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (-1 == moveList.SelectedIndex)
            {
                return;
            }

            snap = data.GetSnap(moveList.SelectedIndex, snap.RedPlayer);

            refreshBoard();
            if (null != moveList.SelectedItem)
            {
                moveList.ScrollIntoView(moveList.SelectedItem);
            }
            refreshScore();
        }
Exemplo n.º 3
0
        internal ChessBoardSnap GetSnap(int stepCounter, bool redPlayer)
        {
            if (stepCounter > stepStack.Count || 0 > stepCounter)
            {
                return(null);
            }
            var snap = new ChessBoardSnap();

            snap.Board       = board.Clone() as byte[];
            snap.StepCounter = stepStack.Count;
            snap.RedTurn     = redTurn;
            if (stepCounter != 0)
            {
                var step = stepStack.ElementAt(stepCounter - 1);
                snap.LastMoveFrom = step.MoveFrom;
                snap.LastMoveTo   = step.MoveTo;
                snap.AteType      = step.EatType;
            }
            else
            {
                snap.LastMoveFrom = 0;
                snap.LastMoveTo   = 0;
                snap.AteType      = 0;
            }

            while (snap.StepCounter > stepCounter)
            {
                var step = stepStack.ElementAt(--snap.StepCounter);
                step.Rollback(snap.Board);
                snap.RedTurn = !snap.RedTurn;
            }
            if (false == redPlayer)
            {
                Utility.RotateBoard(snap.Board);
                snap.LastMoveFrom = Utility.RotateIndex(snap.LastMoveFrom);
                snap.LastMoveTo   = Utility.RotateIndex(snap.LastMoveTo);
            }
            return(snap);
        }
Exemplo n.º 4
0
        private void chessBoard_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //判断该位置是否允许放棋子
            var position = e.GetPosition(chessBoard);
            int column;
            int row;

            parsePosition(position, out column, out row);

            if (false == tryPlace(position))
            {
                return;
            }
            var chess = getSelectedChess();

            data.MoveTo(snap.StepCounter);
            data.Move(snap.RedPlayer, Utility.PositionToIndex(chess.Column, chess.Row), Utility.PositionToIndex(column, row));
            snap = data.GetCurrentSnap(snap.RedPlayer);
            refreshList();
            e.Handled = true;
            moveList.SelectedIndex = moveList.Items.Count - 1;
            snap.StepCounter       = moveList.Items.Count - 1;
            ValidateMoves();
        }
Exemplo n.º 5
0
 private void rotateBoard_Click(object sender, RoutedEventArgs e)
 {
     snap = data.GetSnap(snap.StepCounter, !snap.RedPlayer);
     refresh();
 }
Exemplo n.º 6
0
 public void Reset(bool redPlayer)
 {
     data.Reset();
     snap = data.GetSnap(0, redPlayer);
     refresh();
 }