//Парсинг хода public bool IsMoveValid(string strMove) { bool blnRet = false; try { objMove = new Move(strMove); From = _board[objMove.rowFrom, objMove.colFrom]; To = _board[objMove.rowTo, objMove.colTo]; if (From == null) { Console.WriteLine("Начальные координаты " + objMove.From + " не содержат фигуру"); return blnRet; } //Вызываем проверку хода фигурой - необходима реализация в каждой фигуре отдельно if (!From.IsCheckMove(objMove, this)) return blnRet ; } catch { } blnRet = true; return blnRet; }
public override bool IsCheckMove(Move move, Board _board) { if (!base.IsCheckMove(move,_board)) return false; if ((move.rowFrom != move.rowTo) && (move.colTo != move.colFrom)) { if (!SilentMode) Console.WriteLine("Так ладья не ходит!"); return false; } Figure[,] board = _board.BRD; bool blnRet = false; int rowBegin = Math.Min(move.rowFrom, move.rowTo); int rowEnd = Math.Max (move.rowFrom, move.rowTo); int colBegin = Math.Min (move.colFrom, move.colTo); int colEnd = Math.Max (move.colFrom, move.colTo) ; #region Проверка хода по горизонтали if (move.rowTo == move.rowFrom) { for (int col = colBegin; col <= (colEnd - colBegin); col++) { if ((board[rowBegin, colBegin + col] != null) && (move.colFrom != (colBegin + col))) { if (!SilentMode) Console.WriteLine("Между началом хода ладьи " + move.From + " и окончанием хода " + move.To + " содержится фигуры!"); return blnRet; } } } #endregion #region Проверка хода по вертикали if (move.colTo == move.colFrom) { for (int row = rowBegin; row <= (rowEnd - rowBegin); row++) { if ((board[rowBegin + row, colBegin] != null) && (move.rowFrom != row)) { if (!SilentMode) Console.WriteLine("Между началом хода ладьи " + move.From + " и окончанием хода " + move.To + " содержится фигуры!"); return blnRet; } } } #endregion return true; }
public override bool IsCheckMove(Move move, Board _board) { if (!base.IsCheckMove(move,_board)) return false; if ((Math.Abs(move.colTo - move.colFrom) > 1) || (Math.Abs(move.rowTo - move.rowFrom) > 1)) { Console.WriteLine("Король не может ходить больше чем на 1 клетку"); return false; } return true; }
public override bool IsCheckMove(Move move, Board _board) { if (!base.IsCheckMove(move, _board)) return false; //Делаем проверку, что конь сходил буквой Г if (((Math.Abs(move.rowTo - move.rowFrom) == 1) && (Math.Abs(move.colTo - move.colFrom) == 2)) || ((Math.Abs(move.colTo - move.colFrom) == 1) && (Math.Abs(move.rowTo - move.rowFrom) == 2)) ) return true; Console.WriteLine("Так конь не ходит!"); return false ; }
public virtual bool IsCheckMove(Move _move, Board objBoard) { bool blnRet = false; #region Проверка на дурака, что координаты не выходят за пределы доски if ((_move.rowFrom < 0) || (_move.rowFrom > 7) || (_move.rowTo < 0) || (_move.rowTo > 7)) { Console.WriteLine("Заданы не верные цифровые обозначения строк доски."); return blnRet; } #endregion #region Проверяем, что сейчас ход той фигуры, цвет которой указан if (objBoard.WhichMove != objBoard.From.Color) { if (objBoard.WhichMove == FigureColor.White) Console.WriteLine("Сейчас ход белых!"); else Console.WriteLine("Сейчас ход черных!"); return blnRet; } #endregion #region Проверяем, что клетка куда пойдет фигура не содержит фигуру того же цвета if (objBoard.To != null) { if (objBoard.From.Color == objBoard.To.Color) { Console.WriteLine("Фигура пошла на клетку с фигурой того же цвета!"); return blnRet; } } #endregion return true; }
public override bool IsCheckMove(Move move, Board objBrd ) { Figure[,] _board = objBrd.BRD; if (!base.IsCheckMove(move, objBrd)) return false; //Проверяем, что на конечной клетке хода нет нашей фигуры //Если ходим с клетки 2 - допустим a2, то можно передвинуться на одну клетку или сразу на 2 клетки bool blnRet = false; if (Math.Abs(move.colFrom - move.colTo) > 1) { Console.WriteLine("Пешка не может ходить через 2 столбца"); return blnRet; } if ((move.colFrom != move.colTo) && (objBrd.To == null) ) { Console.WriteLine("Ошибочный ход на клетку " + move.To); return blnRet; } //Проверяем ход сначала на 2 клетки if ((move.colTo == move.colFrom) && ( //Белые не могут дальше 1 клетки ((Color == FigureColor.White ) && ((move.rowTo - move.rowFrom) > 1) && move.rowFrom != 1) || //Черные не могут двигаться дальше 1 клетки ((Color == FigureColor.Black) && ((move.rowFrom - move.rowTo) > 1) && move.rowFrom != 6) || //С начальной позиции белые не могут двигаться дальше 2 шагов вперед ((Color == FigureColor.White) && ((move.rowTo - move.rowFrom) > 2) && move.rowFrom == 1) || //С начальной позиции черные не могут двигаться далдьше 2 шагов вперед ((Color == FigureColor.Black) && ((move.rowFrom - move.rowTo) > 2) && move.rowFrom == 6) || (objBrd.To != null ) )) return blnRet; return true; }
public override bool IsCheckMove(Move move, Board _board) { if (!base.IsCheckMove(move, _board )) return false; //Сначала проверяем ход ферзя, как слона Bishop objBishop = new Bishop(this.Color, this.Symbol); objBishop.SilentMode = true; bool blnBishop = objBishop.IsCheckMove(move, _board); //Потом делаем провеку хода как ладьи Rock objRock = new Rock(this.Color, this.Symbol); objRock.SilentMode = true; bool blnRock = objRock.IsCheckMove(move, _board); //Если обе проверки мы не прошли, значит ошибка if ((!blnBishop) && (!blnRock)) { Console.WriteLine("Ошибочный ход!!!"); return false; } return true; }
public override bool IsCheckMove(Move move, Board objBoard) { Figure[,] board = objBoard.BRD; if (!base.IsCheckMove(move, objBoard )) return false; bool blnRet = false; if (Math.Abs(move.colTo - move.colFrom) != Math.Abs(move.rowTo - move.rowFrom)) { if (!SilentMode ) Console.WriteLine("Так эта слон не ходит!"); return blnRet; } int rowbegin = Math.Min(move.rowFrom, move.rowTo); int rowend = Math.Max(move.rowFrom, move.rowTo); int colBegin = Math.Min(move.colFrom, move.colTo); //Слон ходит по диагонали, соответственно проверяем диагональ for (int row = 0; row <= (rowend-rowbegin ); row++) { if ( (board[rowbegin + row , colBegin + row ]!= null) && ((move.rowFrom != row ) && move.colFrom!= (colBegin +row))) { if (!SilentMode) Console.WriteLine("Между началом хода слона " + move.From + " и окончанием " + move.To + " содержится фигуры!"); return blnRet; } } blnRet = true; return blnRet; }
public override void Move(Move _move) { throw new NotImplementedException(); }
//Клетка на которой находится фигура //Шаг public virtual void Move(Move _move) { }