//board是移动后的棋盘 public void SetBoard(byte[] board, bool redPlayer, bool redTurn) { data.AutoSetBoard(board, redTurn); // if (false == autoTrack) return; snap = data.GetCurrentSnap(redPlayer); refresh(); }
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(); }
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); }
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(); }
private void rotateBoard_Click(object sender, RoutedEventArgs e) { snap = data.GetSnap(snap.StepCounter, !snap.RedPlayer); refresh(); }
public void Reset(bool redPlayer) { data.Reset(); snap = data.GetSnap(0, redPlayer); refresh(); }