Exemple #1
0
        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);
        }
Exemple #2
0
        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;
                }
            }
        }