示例#1
0
        internal int GetPlayerPoints(eShapeType i_Piece)
        {
            int PlayerPoints = 0;

            Piece.eSoliderType soliderType = Piece.eSoliderType.X;
            Piece.eSoliderType kingType    = Piece.eSoliderType.K;
            if (i_Piece.Equals(eShapeType.O))
            {
                soliderType = Piece.eSoliderType.O;
                kingType    = Piece.eSoliderType.U;
            }
            for (int i = 0; i < this.r_TableSize; i++)
            {
                for (int j = 0; j < this.r_TableSize; j++)
                {
                    Piece currentPiece = this.r_Table[i, j];
                    if (currentPiece.Type == soliderType)
                    {
                        PlayerPoints += 1;
                    }
                    if (currentPiece.Type == kingType)
                    {
                        PlayerPoints += 4;
                    }
                }
            }
            return(PlayerPoints);
        }
示例#2
0
文件: Move.cs 项目: maymeir/Checkers
        internal bool isLegalDiagonalMove(eShapeType i_Shape)
        {
            bool isLegalMove = false;

            switch (i_Shape)
            {
            case eShapeType.X:
                if ((m_CurrentPiece.Row - 1 == m_TargetPiece.Row) && (m_CurrentPiece.Column - 1 == m_TargetPiece.Column))
                {
                    isLegalMove = true;
                }
                if ((m_CurrentPiece.Row - 1 == m_TargetPiece.Row) && (m_CurrentPiece.Column + 1 == m_TargetPiece.Column))
                {
                    isLegalMove = true;
                }
                break;

            case eShapeType.O:
                if ((m_CurrentPiece.Row + 1 == m_TargetPiece.Row) && (m_CurrentPiece.Column - 1 == m_TargetPiece.Column))
                {
                    isLegalMove = true;
                }
                if ((m_CurrentPiece.Row + 1 == m_TargetPiece.Row) && (m_CurrentPiece.Column + 1 == m_TargetPiece.Column))
                {
                    isLegalMove = true;
                }
                break;
            }
            return(isLegalMove);
        }
        private bool isValidDiagonalKingMove(eShapeType i_ShapeOfMove)
        {
            bool isValidKingMove = false;

            if ((m_FromSquare.Row - 1 == m_ToSquare.Row) && (m_FromSquare.Column - 1 == m_ToSquare.Column))
            {
                isValidKingMove = true;
            }

            if ((m_FromSquare.Row - 1 == m_ToSquare.Row) && (m_FromSquare.Column + 1 == m_ToSquare.Column))
            {
                isValidKingMove = true;
            }

            if ((m_FromSquare.Row + 1 == m_ToSquare.Row) && (m_FromSquare.Column - 1 == m_ToSquare.Column))
            {
                isValidKingMove = true;
            }

            if ((m_FromSquare.Row + 1 == m_ToSquare.Row) && (m_FromSquare.Column + 1 == m_ToSquare.Column))
            {
                isValidKingMove = true;
            }

            return(isValidKingMove);
        }
        private bool isValidDiagonalMove(eShapeType i_Shape)
        {
            bool isValidMove = false;

            switch (i_Shape)
            {
            case eShapeType.X:
                if ((m_FromSquare.Row - 1 == m_ToSquare.Row) && (m_FromSquare.Column - 1 == m_ToSquare.Column))
                {
                    isValidMove = true;
                }

                if ((m_FromSquare.Row - 1 == m_ToSquare.Row) && (m_FromSquare.Column + 1 == m_ToSquare.Column))
                {
                    isValidMove = true;
                }

                break;

            case eShapeType.O:
                if ((m_FromSquare.Row + 1 == m_ToSquare.Row) && (m_FromSquare.Column - 1 == m_ToSquare.Column))
                {
                    isValidMove = true;
                }

                if ((m_FromSquare.Row + 1 == m_ToSquare.Row) && (m_FromSquare.Column + 1 == m_ToSquare.Column))
                {
                    isValidMove = true;
                }

                break;
            }

            return(isValidMove);
        }
示例#5
0
文件: Move.cs 项目: maymeir/Checkers
        public bool CheckIsLegalMove(eShapeType i_ShapeOfPlayer)
        {
            bool isLegalMove = true;

            switch (i_ShapeOfPlayer)
            {
            case eShapeType.X:
                if (m_CurrentPiece.Type != Piece.eSoliderType.X && m_CurrentPiece.Type != Piece.eSoliderType.K)
                {
                    isLegalMove = false;
                }
                else
                {
                    if (m_TargetPiece.Type != Piece.eSoliderType.Empty)
                    {
                        isLegalMove = false;
                    }
                    else
                    {
                        if (m_CurrentPiece.Type == Piece.eSoliderType.X)
                        {
                            isLegalMove = isLegalDiagonalMove(eShapeType.X);
                        }
                        else
                        {
                            isLegalMove = isLegalDiagonalKingMove();
                        }
                    }
                }
                break;

            case eShapeType.O:
                if (m_CurrentPiece.Type != Piece.eSoliderType.O && m_CurrentPiece.Type != Piece.eSoliderType.U)
                {
                    isLegalMove = false;
                }
                else
                {
                    if (m_TargetPiece.Type != Piece.eSoliderType.Empty)
                    {
                        isLegalMove = false;
                    }
                    else
                    {
                        if (m_CurrentPiece.Type == Piece.eSoliderType.O)
                        {
                            isLegalMove = isLegalDiagonalMove(eShapeType.O);
                        }

                        else
                        {
                            isLegalMove = isLegalDiagonalKingMove();
                        }
                    }
                }
                break;
            }
            return(isLegalMove);
        }
示例#6
0
 public Player(eShapeType i_Shape, string i_PlayerName, ePlayerType i_PlayerType)
 {
     this.m_Shape      = i_Shape;
     this.m_PlayerName = i_PlayerName;
     v_JumpTurn        = false;
     this.m_PlayerType = i_PlayerType;
     this.m_Points     = 0;
 }
 internal Player(eShapeType shape, string PlayerName, ePlayerType i_PlayerType)
 {
     this.m_Shape      = shape;
     this.m_PlayerName = PlayerName;
     v_JumpTurn        = false;
     this.m_PlayerType = i_PlayerType;
     this.m_Points     = 0;
 }
        internal int GetPointsOfPlayer(eShapeType i_Piece)
        {
            int countPlayerPoints = 0;

            switch (i_Piece)
            {
            case (eShapeType.X):

                for (int i = 0; i < this.m_Size; i++)
                {
                    for (int j = 0; j < this.m_Size; j++)
                    {
                        Square currentSquare = this.m_Board[i, j];
                        if (currentSquare.Type == eSquareType.X)
                        {
                            countPlayerPoints += 1;
                        }
                        if (currentSquare.Type == eSquareType.K)
                        {
                            countPlayerPoints += 4;
                        }
                    }
                }

                break;

            case (eShapeType.O):

                for (int i = 0; i < this.m_Size; i++)
                {
                    for (int j = 0; j < this.m_Size; j++)
                    {
                        Square currentSquare = this.m_Board[i, j];
                        if (currentSquare.Type == eSquareType.O)
                        {
                            countPlayerPoints += 1;
                        }
                        if (currentSquare.Type == eSquareType.U)
                        {
                            countPlayerPoints += 4;
                        }
                    }
                }

                break;
            }

            return(countPlayerPoints);
        }
示例#9
0
        private List <Move> getListOfJumpsForPiece(eShapeType i_Shape, Piece i_Solider)
        {
            int         SoliderRow    = i_Solider.Row;
            int         SoliderColumn = i_Solider.Column;
            Move        currentMove;
            List <Move> leggalJumpsForPiece = r_GameTable.GetPlayerJumpsList(i_Shape);

            for (int i = 0; i < leggalJumpsForPiece.Count; i++)
            {
                currentMove = leggalJumpsForPiece[i];

                if (currentMove.CurrentPiece.Row != SoliderRow || currentMove.CurrentPiece.Column != SoliderColumn)
                {
                    leggalJumpsForPiece.Remove(currentMove);
                }
            }
            return(leggalJumpsForPiece);
        }
示例#10
0
        internal List <Move> GetPlayerJumpsList(eShapeType i_Shape)
        {
            List <Move> legalJumps = new List <Move>();
            short       TableSize  = this.TableSize;
            int         jumpMove   = 1;

            Piece.eSoliderType soliderType = Piece.eSoliderType.X;
            Piece.eSoliderType kingType    = Piece.eSoliderType.K;
            for (int r = 0; r < TableSize; r++)
            {
                for (int c = 0; c < TableSize; c++)
                {
                    switch (i_Shape)
                    {
                    case eShapeType.O:

                        if ((getSoliderTypeInTable(r, c) == Piece.eSoliderType.O) || (getSoliderTypeInTable(r, c) == Piece.eSoliderType.U))    //regular piece of O
                        {
                            JumpMove(r, c, ref legalJumps, soliderType, kingType, jumpMove);
                        }
                        if (getSoliderTypeInTable(r, c) == Piece.eSoliderType.U)     //King of O
                        {
                            JumpMove(r, c, ref legalJumps, soliderType, kingType, (jumpMove * -1));
                        }
                        break;

                    case eShapeType.X:
                        soliderType = Piece.eSoliderType.O;
                        kingType    = Piece.eSoliderType.U;
                        if ((getSoliderTypeInTable(r, c) == Piece.eSoliderType.X) || (getSoliderTypeInTable(r, c) == Piece.eSoliderType.K))    //regular piece of X
                        {
                            JumpMove(r, c, ref legalJumps, soliderType, kingType, (jumpMove * -1));
                        }
                        if (getSoliderTypeInTable(r, c) == Piece.eSoliderType.K)     //king of X
                        {
                            JumpMove(r, c, ref legalJumps, soliderType, kingType, jumpMove);
                        }
                        break;
                    }
                }
            }
            return(legalJumps);
        }
示例#11
0
        private List <Move> getListOfJumpsForPiece(eShapeType i_Shape, Square i_Square)
        {
            int         squareRow    = i_Square.Row;
            int         squareColumn = i_Square.Column;
            Move        currentMove;
            List <Move> leggalJumpsForPiece = m_BoardGame.GetListOfPlayerJumps(i_Shape);

            for (int i = 0; i < leggalJumpsForPiece.Count; i++)
            {
                currentMove = leggalJumpsForPiece[i];

                if (currentMove.GetFromPiece().Row != squareRow || currentMove.GetFromPiece().Column != squareColumn)
                {
                    leggalJumpsForPiece.Remove(currentMove);
                }
            }

            return(leggalJumpsForPiece);
        }
示例#12
0
        internal List <Move> GetListOfPlayerDiagonalMoves(eShapeType i_Shape)
        {
            List <Move> legalMoves   = new List <Move>();
            short       TableSize    = this.TableSize;
            int         diagonalMove = 1;

            for (int r = 0; r < TableSize; r++)
            {
                for (int c = 0; c < TableSize; c++)
                {
                    switch (i_Shape)
                    {
                    case eShapeType.O:
                        if ((getSoliderTypeInTable(r, c) == Piece.eSoliderType.O) ||
                            (getSoliderTypeInTable(r, c) == Piece.eSoliderType.U))        //regular piece of O
                        {
                            MoveDiagonal(r, c, ref legalMoves, diagonalMove);
                        }
                        if (getSoliderTypeInTable(r, c) == Piece.eSoliderType.U)     //King of O
                        {
                            MoveDiagonal(r, c, ref legalMoves, (diagonalMove * -1));
                        }
                        break;

                    case eShapeType.X:
                        if ((getSoliderTypeInTable(r, c) == Piece.eSoliderType.X) ||
                            (getSoliderTypeInTable(r, c) == Piece.eSoliderType.K))        //regular piece of X
                        {
                            MoveDiagonal(r, c, ref legalMoves, (diagonalMove * -1));
                        }
                        if (getSoliderTypeInTable(r, c) == Piece.eSoliderType.K)     //King of X
                        {
                            MoveDiagonal(r, c, ref legalMoves, diagonalMove);
                        }
                        break;
                    }
                }
            }
            return(legalMoves);
        }
        internal bool CheckIsValidMove(eShapeType i_ShapeOfPlayer)
        {
            bool isValidMove = true;

            switch (i_ShapeOfPlayer)
            {
            case eShapeType.X:
                if (m_FromSquare.Type != eSquareType.X && m_FromSquare.Type != eSquareType.K)
                {
                    isValidMove = false;
                }
                else
                {
                    if (m_ToSquare.Type != eSquareType.None)
                    {
                        isValidMove = false;
                    }
                    else
                    {
                        if (m_FromSquare.Type == eSquareType.X)
                        {
                            isValidMove = isValidDiagonalMove(eShapeType.X);
                        }
                        else
                        {
                            isValidMove = isValidDiagonalKingMove(eShapeType.X);
                        }
                    }
                }
                break;

            case eShapeType.O:

                if (m_FromSquare.Type != eSquareType.O && m_FromSquare.Type != eSquareType.U)
                {
                    isValidMove = false;
                }
                else
                {
                    if (m_ToSquare.Type != eSquareType.None)
                    {
                        isValidMove = false;
                    }
                    else
                    {
                        if (m_FromSquare.Type == eSquareType.O)
                        {
                            isValidMove = isValidDiagonalMove(eShapeType.O);
                        }

                        else
                        {
                            isValidMove = isValidDiagonalKingMove(eShapeType.O);
                        }
                    }
                }
                break;
            }

            return(isValidMove);
        }
        internal List <Move> GetListOfPlayerJumps(eShapeType i_Shape)
        {
            List <Move> leggalJumps = new List <Move>();
            short       boardSize   = this.GetSize();

            for (int r = 0; r < boardSize; r++)
            {
                for (int c = 0; c < boardSize; c++)
                {
                    switch (i_Shape)
                    {
                    case eShapeType.O:

                        if (getTypeOfSquareInBoard(r, c) == eSquareType.O)     //regular piece of O
                        {
                            if ((getTypeOfSquareInBoard(r + 2, c - 2) == eSquareType.None) && (getTypeOfSquareInBoard(r + 1, c - 1) == eSquareType.X || getTypeOfSquareInBoard(r + 1, c - 1) == eSquareType.K))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r + 2, c - 2)));
                            }
                            if ((getTypeOfSquareInBoard(r + 2, c + 2) == eSquareType.None) && (getTypeOfSquareInBoard(r + 1, c + 1) == eSquareType.X || getTypeOfSquareInBoard(r + 1, c + 1) == eSquareType.K))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r + 2, c + 2)));
                            }
                        }
                        if (getTypeOfSquareInBoard(r, c) == eSquareType.U)     //King of O
                        {
                            if ((getTypeOfSquareInBoard(r + 2, c - 2) == eSquareType.None) && (getTypeOfSquareInBoard(r + 1, c - 1) == eSquareType.X || getTypeOfSquareInBoard(r + 1, c - 1) == eSquareType.K))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r + 2, c - 2)));
                            }
                            if ((getTypeOfSquareInBoard(r + 2, c + 2) == eSquareType.None) && (getTypeOfSquareInBoard(r + 1, c + 1) == eSquareType.X || getTypeOfSquareInBoard(r + 1, c + 1) == eSquareType.K))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r + 2, c + 2)));
                            }
                            if ((getTypeOfSquareInBoard(r - 2, c - 2) == eSquareType.None) && (getTypeOfSquareInBoard(r - 1, c - 1) == eSquareType.X || getTypeOfSquareInBoard(r - 1, c - 1) == eSquareType.K))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r - 2, c - 2)));
                            }
                            if ((getTypeOfSquareInBoard(r - 2, c + 2) == eSquareType.None) && (getTypeOfSquareInBoard(r - 1, c + 1) == eSquareType.X || getTypeOfSquareInBoard(r - 1, c + 1) == eSquareType.K))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r - 2, c + 2)));
                            }
                        }

                        break;

                    case eShapeType.X:

                        if (getTypeOfSquareInBoard(r, c) == eSquareType.X)     //regular piece of X
                        {
                            if ((getTypeOfSquareInBoard(r - 2, c - 2) == eSquareType.None) && (getTypeOfSquareInBoard(r - 1, c - 1) == eSquareType.O || getTypeOfSquareInBoard(r - 1, c - 1) == eSquareType.U))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r - 2, c - 2)));
                            }
                            if ((getTypeOfSquareInBoard(r - 2, c + 2) == eSquareType.None) && (getTypeOfSquareInBoard(r - 1, c + 1) == eSquareType.O || getTypeOfSquareInBoard(r - 1, c + 1) == eSquareType.U))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r - 2, c + 2)));
                            }
                        }
                        if (getTypeOfSquareInBoard(r, c) == eSquareType.K)     //king of X
                        {
                            if ((getTypeOfSquareInBoard(r + 2, c - 2) == eSquareType.None) && (getTypeOfSquareInBoard(r + 1, c - 1) == eSquareType.O || getTypeOfSquareInBoard(r + 1, c - 1) == eSquareType.U))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r + 2, c - 2)));
                            }
                            if ((getTypeOfSquareInBoard(r + 2, c + 2) == eSquareType.None) && (getTypeOfSquareInBoard(r + 1, c + 1) == eSquareType.O || getTypeOfSquareInBoard(r + 1, c + 1) == eSquareType.U))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r + 2, c + 2)));
                            }
                            if ((getTypeOfSquareInBoard(r - 2, c - 2) == eSquareType.None) && (getTypeOfSquareInBoard(r - 1, c - 1) == eSquareType.O || getTypeOfSquareInBoard(r - 1, c - 1) == eSquareType.U))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r - 2, c - 2)));
                            }
                            if ((getTypeOfSquareInBoard(r - 2, c + 2) == eSquareType.None) && (getTypeOfSquareInBoard(r - 1, c + 1) == eSquareType.O || getTypeOfSquareInBoard(r - 1, c + 1) == eSquareType.U))
                            {
                                leggalJumps.Add(new Move(GetSquare(r, c), GetSquare(r - 2, c + 2)));
                            }
                        }

                        break;
                    }
                }
            }

            return(leggalJumps);
        }