Esempio n. 1
0
 public void PossibleChangeOnKing(CheckerOnDesk chD, Point point)
 {
     if (point.X == 0 && chD.Color == ColorType.Black && chD.Status == CheckerStatus.Simple)
     {
         chD.Status = CheckerStatus.King; //White KING
     }
     if (point.X == 7 && chD.Color == ColorType.White && chD.Status == CheckerStatus.Simple)
     {
         chD.Status = CheckerStatus.King; //Black KING
     }
 }
Esempio n. 2
0
        public List <Point> IsToKingMove(CheckerOnDesk chD)
        {
            List <Point> points = new List <Point>();

            points.AddRange(DiagonalForwardLeft(chD.Point));
            points.AddRange(DiagonalForwardRight(chD.Point));
            points.AddRange(DiagonalBackRight(chD.Point));
            points.AddRange(DiagonalBackLeft(chD.Point));

            return(points);
        }
Esempio n. 3
0
        //Можна створити змінну isBeat в конструкції else
        private void SecondClick(Point p, out bool isCangeChecker, out bool wasBeat)
        {
            _isCorrect = false;
            _endMove   = false;
            bool isBeat = false;

            isCangeChecker = false;
            wasBeat        = false;

            if (_moveStarted && !LightPoints.Contains(p))
            {
                return;
            }

            if (!LightPoints.Contains(p))
            {
                if (!_desk.IsEmpty(p) && _desk.GetCheckerOnDesk(p).Color == this.Color)
                {
                    if (_desk.CheckersHaveToBit(this.Color).Count == 0)
                    {
                        _isCorrect     = true;
                        _endMove       = false;
                        isCangeChecker = true;
                    }
                    else
                    {
                        if (_desk.IsToBit(_desk.GetCheckerOnDesk(p)) != null)
                        {
                            _isCorrect     = true;
                            _endMove       = false;
                            isCangeChecker = true;
                        }
                    }
                }
            }
            else
            {
                _desk.MoveCheking(_movingChecker.Point, p, out isBeat, Color);
                _movingChecker = _desk.GetCheckerOnDesk(p);
                _isCorrect     = true;
                _endMove       = true;
                wasBeat        = isBeat;
                LightPoints    = null;

                if (isBeat)
                {
                    _endMove     = _desk.IsToBit(_movingChecker).Count == 0;
                    _moveStarted = true;
                }
            }
        }
Esempio n. 4
0
        public List <Point> IsToSimpleMove(CheckerOnDesk chD)
        {
            List <Point> points = new List <Point>();
            int          x      = chD.Point.X;
            int          y      = chD.Point.Y;

            int i = (chD.Color == ColorType.White) ? 1 : -1;

            if (x + i < 8 && y + 1 < 8 && (_cells[x + i, y + 1] == 0))
            {
                points.Add(new Point(x + i, y + 1));
            }
            if (x + i < 8 && y - 1 >= 0 && (_cells[x + i, y - 1] == 0))
            {
                points.Add(new Point(x + i, y - 1));
            }

            return(points);
        }
Esempio n. 5
0
        //Зайвий return
        public void Move()
        {
            Random rnd = new Random();

            if (_desk.CheckersHaveToBit(Color).Count != 0)
            {
                do
                {
                    int           r1  = rnd.Next(0, _desk.CheckersHaveToBit(Color).Count - 1);
                    CheckerOnDesk ch1 = _desk.CheckersHaveToBit(Color)[r1];

                    int   r2 = rnd.Next(0, _desk.IsToBit(ch1).Count - 1);
                    Point p2 = _desk.IsToBit(ch1)[r2];

                    _desk.MoveCheking(ch1.Point, p2, out _isBeat, Color);

                    _movingChecker = _desk.GetCheckerOnDesk(p2);
                    FirstPoint     = ch1.Point;
                    SecondPoint    = p2;
                }while (_desk.IsToBit(_movingChecker).Count > 0);
            }
            else
            {
                if (_desk.ChekersToMove(Color).Count != 0)
                {
                    int           r1  = rnd.Next(0, _desk.ChekersToMove(Color).Count - 1);
                    CheckerOnDesk ch1 = _desk.ChekersToMove(Color)[r1];

                    int   r2 = rnd.Next(0, _desk.IsToMove(ch1).Count - 1);
                    Point p2 = _desk.IsToMove(ch1)[r2];

                    _desk.MoveCheking(ch1.Point, p2, out _isBeat, Color);

                    FirstPoint  = ch1.Point;
                    SecondPoint = p2;
                }
            }
            return;
        }
Esempio n. 6
0
        public void StartPosition()
        {
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if ((i % 2 != 0 && j % 2 != 0) || ((i % 2 == 0 && j % 2 == 0)))
                    {
                        CheckerOnDesk chD = new CheckerOnDesk(ColorType.White, CheckerStatus.Simple, new Point(i, j));
                        _checkersOnDesk.Add(chD);
                        _cells[i, j] = 1;
                    }
                }
            }
            // краще замість for (int i = 5; i < 8; i++) написати for (int i = 5; i < _cells.GetLength(0); i++)
            // і замість for (int j = 0; j < 8; j++) написати (int i = 5; i < _cells.GetLength(1); i++)
            for (int i = 5; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if ((i % 2 != 0 && j % 2 != 0) || ((i % 2 == 0 && j % 2 == 0)))
                    {
                        CheckerOnDesk chD = new CheckerOnDesk(ColorType.Black, CheckerStatus.Simple, new Point(i, j));
                        _checkersOnDesk.Add(chD);
                        _cells[i, j] = 2;
                    }
                }
            }

            /*
             *              Review VV:
             *                  що означає наступний рядок коду?
             */
            // for testing
            _cells[2, 2] = 0; _cells[2, 2] = -1;
            _checkersOnDesk.Remove(GetCheckerOnDesk(new Point(2, 2)));
            _checkersOnDesk.Add(new CheckerOnDesk(ColorType.White, CheckerStatus.King, new Point(2, 2)));
        }
Esempio n. 7
0
 public List <Point> IsToMove(CheckerOnDesk chD)
 {
     return((chD.Status == CheckerStatus.Simple) ? IsToSimpleMove(chD) : IsToKingMove(chD));
 }
Esempio n. 8
0
 public List <Point> IsToBit(CheckerOnDesk chD)
 {
     return((chD.Status == CheckerStatus.Simple) ? IsToSimpleBit(chD) : IsToKingBit(chD));
 }
Esempio n. 9
0
        // цей метод краще поділити на кілька методів
        public List <Point> IsToKingBit(CheckerOnDesk chD)
        {
            List <Point> points = new List <Point>();
            int          x = chD.Point.X;
            int          y = chD.Point.Y;
            int          xx, yy;

            xx = x + 1;
            yy = y + 1;
            while (xx < 7 && yy < 7)
            {
                if (IsEnemy(chD, new Point(xx, yy)) && IsEmpty(new Point(xx + 1, yy + 1)))
                {
                    points.Add(new Point(xx + 1, yy + 1));
                    break;
                }
                xx++;
                yy++;
            }

            xx = x + 1;
            yy = y - 1;
            while (xx < 7 && yy > 0)
            {
                if (IsEnemy(chD, new Point(xx, yy)) && IsEmpty(new Point(xx + 1, yy - 1)))
                {
                    points.Add(new Point(xx + 1, yy - 1));
                    break;
                }
                xx++;
                yy--;
            }

            xx = x - 1;
            yy = y - 1;
            while (xx > 0 && yy > 0)
            {
                if (IsEnemy(chD, new Point(xx, yy)) && IsEmpty(new Point(xx - 1, yy - 1)))
                {
                    points.Add(new Point(xx - 1, yy - 1));
                    break;
                }
                xx--;
                yy--;
            }

            xx = x - 1;
            yy = y + 1;
            while (xx > 0 && yy < 7)
            {
                if (IsEnemy(chD, new Point(xx, yy)) && IsEmpty(new Point(xx - 1, yy + 1)))
                {
                    points.Add(new Point(xx - 1, yy + 1));
                    break;
                }
                xx--;
                yy++;
            }

            return(points);
        }