private bool TryToMove(int x, int y) { Checker ch = Field[x, y].Checker; // Это ДАМКА! if (ch.IsQueen) { return(EnemyQueen_TryToMove(x, y)); } int x1 = x + 1; int x2 = x - 1; int y1 = y + 1; if (y1 < 0) { return(false); } if (y1 == 8) { return(false); } if (x1 >= 0 & x1 < FieldMatrixSize) { Checker ch1 = Field[x1, y1].Checker; if (ch1 == null) { Field[x1, y1].Checker = Field[x, y].Checker; // Если это 1 позиция, то шашка становится дамкой if (y1 == 7) { Field[x, y].Checker.MakeQueen(); } Field[x, y].Checker = null; return(true); } } if (x2 < FieldMatrixSize & x2 > 0) { Checker ch2 = Field[x2, y1].Checker; if (ch2 == null) { Field[x2, y1].Checker = Field[x, y].Checker; // Если это 1 или 8 позиция, то шашка становится дамкой if (y1 == 7) { Field[x, y].Checker.MakeQueen(); } Field[x, y].Checker = null; return(true); } } return(false); }
internal void SelectCell(double x, double y) { byte X = (byte)(x / CellSize); byte Y = (byte)(y / CellSize); if (X > FieldMatrixSize || X < 0 || Y < 0 || Y > FieldMatrixSize) { return; } Cell cell = Field[X, Y]; // Выбранная клетка Checker checker = cell.Checker; // Шашка выбранной клетки // Не игровая клетка или не пользовательская шашка if (cell.Type == CellType.White || (checker != null && !checker.UserChecker)) { return; } if (IsEatingRequired) { List <Point> eatways = User_FindWaysToEat(); if (eatways.Count > 0 && SelectedChecker[0] == -1 && SelectedChecker[1] == -1) { bool CorrectSelection = false; for (int i = 0; i < eatways.Count; i++) { int dx = eatways[i].X; int dy = eatways[i].Y; if (dx == X && dy == Y) { CorrectSelection = true; } } if (!CorrectSelection) { //Debug.WriteLine("Incorrect selection at {0}:{1}", X, Y); return; } else { SelectedChecker[0] = X; SelectedChecker[1] = Y; Field[X, Y].Checker.Select(); return; } } else if (eatways.Count > 0 && SelectedChecker[0] != -1 && SelectedChecker[1] != -1) { // Есть надо, уже выбрана верная шашка, теперь выбрали конечную клетку после поедания if (User_PerformEating(SelectedChecker[0], SelectedChecker[1], X, Y)) { // Только одно поедание пока if (User_HasToEat(X, Y)) { return; } SelectedChecker[0] = -1; SelectedChecker[1] = -1; Field[X, Y].Checker.UnselectChecker(); UserTurn = false; return; } else { return; // Не тот путь ты выбрал, пользователь } } } // Выбрали шашку, определяем возможность хода if (SelectedChecker[0] == -1 & checker != null) { // Пользователь может ходить, выбираем шашку if (CanMove(X, Y)) { Field[X, Y].Checker.Select(); SelectChecker(X, Y); return; } // Не может ходить return; } else if (SelectedChecker[0] != -1) { // Шашка уже выбрана, выбрали путь // Шашка уже выбрана, но пользователь опять её выбрал - передумал if (SelectedChecker[0] == X && SelectedChecker[1] == Y) { SelectChecker(-1, -1); Field[X, Y].Checker.UnselectChecker(); return; } int sx = SelectedChecker[0]; int sy = SelectedChecker[1]; bool isQueen = Field[sx, sy].Checker.IsQueen; if (CanMoveTo(X, Y, isQueen)) { //Undo.Add(Field); Move(X, Y); UserTurn = false; return; } } }