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 } }
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); }
//Можна створити змінну 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; } } }
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); }
//Зайвий 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; }
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))); }
public List <Point> IsToMove(CheckerOnDesk chD) { return((chD.Status == CheckerStatus.Simple) ? IsToSimpleMove(chD) : IsToKingMove(chD)); }
public List <Point> IsToBit(CheckerOnDesk chD) { return((chD.Status == CheckerStatus.Simple) ? IsToSimpleBit(chD) : IsToKingBit(chD)); }
// цей метод краще поділити на кілька методів 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); }