Example #1
0
        public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid)
        {
            if (newPos.Equals(currPos))
            {
                return(MoveState.Cannot);
            }

            if (newPos.X == currPos.X + 1 && newPos.Y == currPos.Y + 2 ||
                newPos.X == currPos.X + 1 && newPos.Y == currPos.Y - 2 ||
                newPos.X == currPos.X - 1 && newPos.Y == currPos.Y + 2 ||
                newPos.X == currPos.X - 1 && newPos.Y == currPos.Y - 2 ||
                newPos.X == currPos.X + 2 && newPos.Y == currPos.Y + 1 ||
                newPos.X == currPos.X + 2 && newPos.Y == currPos.Y - 1 ||
                newPos.X == currPos.X - 2 && newPos.Y == currPos.Y + 1 ||
                newPos.X == currPos.X - 2 && newPos.Y == currPos.Y - 1)
            {
                Figure fig = deskGrid[newPos.X, newPos.Y];

                if (fig == null)
                {
                    return(MoveState.Can);
                }

                if (fig.Color != this.Color)
                {
                    return(MoveState.Fight);
                }
            }

            return(MoveState.Cannot);
        }
Example #2
0
        public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid)
        {
            if (newPos.Equals(currPos))
            {
                return(MoveState.Cannot);
            }

            if (newPos.X == currPos.X + 1 && newPos.Y == currPos.Y ||
                newPos.X == currPos.X + 1 && newPos.Y == currPos.Y + 1 ||
                newPos.X == currPos.X + 1 && newPos.Y == currPos.Y - 1 ||
                newPos.X == currPos.X - 1 && newPos.Y == currPos.Y ||
                newPos.X == currPos.X - 1 && newPos.Y == currPos.Y + 1 ||
                newPos.X == currPos.X - 1 && newPos.Y == currPos.Y - 1 ||
                newPos.X == currPos.X && newPos.Y == currPos.Y + 1 ||
                newPos.X == currPos.X && newPos.Y == currPos.Y - 1)
            {
                Figure tempFig = deskGrid[newPos.X, newPos.Y];

                if (tempFig != null && tempFig?.Color == this.Color)
                {
                    return(MoveState.Cannot);
                }

                if (check)
                {
                    check = !check;
                    deskGrid[newPos.X, newPos.Y] = this;

                    for (int i = 0; i < 8; i++)
                    {
                        for (int j = 0; j < 8; j++)
                        {
                            if (deskGrid[i, j]?.Color != this.Color &&
                                deskGrid[i, j]?.CheckMove(newPos, new SFigurePosition(i, j), ref deskGrid) == MoveState.Fight)
                            {
                                deskGrid[newPos.X, newPos.Y] = tempFig;
                                check = !check;
                                return(MoveState.Cannot);
                            }
                        }
                    }
                    deskGrid[newPos.X, newPos.Y] = tempFig;
                    check = !check;
                }

                if (tempFig == null)
                {
                    return(MoveState.Can);
                }
                return(MoveState.Fight);
            }
            return(MoveState.Cannot);
        }
Example #3
0
        public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid)
        {
            if (newPos.Equals(currPos) ||
                newPos.X == currPos.X && newPos.Y != currPos.Y ||
                newPos.X != currPos.X && newPos.Y == currPos.Y ||
                deskGrid[newPos.X, newPos.Y]?.Color == this.Color
                )
            {
                return(MoveState.Cannot);
            }

            int idx = 1;
            int idy = 1;

            if (newPos.X > currPos.X && newPos.Y < currPos.Y)
            {
                idy *= -1;
            }

            if (newPos.X < currPos.X && newPos.Y > currPos.Y)
            {
                idx *= -1;
            }

            if (newPos.X < currPos.X && newPos.Y < currPos.Y)
            {
                idx *= -1;
                idy *= -1;
            }

            int x = currPos.X + idx;
            int y = currPos.Y + idy;

            for (; x != newPos.X && y != newPos.Y; x += idx, y += idy)
            {
                if (deskGrid[x, y] != null)
                {
                    return(MoveState.Cannot);
                }
            }

            if (x == newPos.X && y == newPos.Y)
            {
                if (deskGrid[x, y] != null)
                {
                    return(MoveState.Fight);
                }
                return(MoveState.Can);
            }
            return(MoveState.Cannot);
        }
Example #4
0
        public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid)
        {
            if (newPos.Equals(currPos))
            {
                return(MoveState.Cannot);
            }

            int idx = -1;

            if (Color == FigureColor.Black)
            {
                idx = idx * -1;
            }
            Figure fig = deskGrid[newPos.X, newPos.Y];

            if (newPos.X == currPos.X + idx)
            {
                if (newPos.Y == currPos.Y + 1 || newPos.Y == currPos.Y - 1)
                {
                    if (fig != null && fig?.Color != this.Color)
                    {
                        return(MoveState.Fight);
                    }
                }
                if (newPos.Y == currPos.Y)
                {
                    if (fig == null)
                    {
                        return(MoveState.Can);
                    }
                }
            }
            _firstMove = this.Color == FigureColor.White ? currPos.X == 6 : currPos.X == 1;
            if (newPos.X == currPos.X + idx + idx && newPos.Y == currPos.Y && _firstMove)
            {
                if (fig == null)
                {
                    Figure fig1 = deskGrid[currPos.X + idx, currPos.Y];
                    if (fig == null && fig1 == null)
                    {
                        return(MoveState.Can);
                    }
                }
            }
            return(MoveState.Cannot);
        }
Example #5
0
        public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid)
        {
            if (newPos.Equals(currPos))
            {
                return(MoveState.Cannot);
            }

            Figure fig = deskGrid[newPos.X, newPos.Y];

            if (fig?.Color == this.Color)
            {
                return(MoveState.Cannot);
            }

            if (newPos.X == currPos.X && newPos.Y != currPos.Y)
            {
                int idx = -1;
                if (newPos.Y > currPos.Y)
                {
                    idx *= -1;
                }

                for (int i = currPos.Y + idx; i != newPos.Y; i += idx)
                {
                    if (deskGrid[currPos.X, i] != null)
                    {
                        return(MoveState.Cannot);
                    }
                }

                if (fig != null)
                {
                    return(MoveState.Fight);
                }

                return(MoveState.Can);
            }

            if (newPos.X != currPos.X && newPos.Y == currPos.Y)
            {
                int idx = -1;
                if (newPos.X > currPos.X)
                {
                    idx *= -1;
                }

                for (int i = currPos.X + idx; i != newPos.X; i += idx)
                {
                    if (deskGrid[i, currPos.Y] != null)
                    {
                        return(MoveState.Cannot);
                    }
                }

                if (fig != null)
                {
                    return(MoveState.Fight);
                }

                return(MoveState.Can);
            }
            return(MoveState.Cannot);
        }