예제 #1
0
        static void Main(string[] args)
        {
            //Создаем объект доска и выводим сообщение для консоли
            Board objBoard = new Board();
            objBoard.HelpFirst();
            objBoard.PlaceFigures();

            objBoard.WhichMove = FigureColor.White;

            string strMove = " ";
            while (strMove != "")
            {
                objBoard.PrintBoard();
                objBoard.PrintMove();
                strMove = objBoard.SelectFigureConsole();
                if (!objBoard.IsMoveValid(strMove) && strMove !="")
                {
                    Console.WriteLine("Не правильный ход!");
                    continue;
                }
                objBoard.ReplaceFigure ();
                objBoard.NextMove();
            }
            Console.WriteLine("Игра закончена!");
            Console.ReadLine();
        }
예제 #2
0
        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;
        }
예제 #3
0
        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;
        }
예제 #4
0
        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 ;
        }
예제 #5
0
        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;
        }
예제 #6
0
        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;
        }
예제 #7
0
        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;
        }
예제 #8
0
        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;
        }