コード例 #1
0
    public eTypeOfMove DoMove(Point i_SourcePoint, Point i_TargetPoint)
    {
        eTypeOfMove i_MoveType = eTypeOfMove.IllegalMove;

        int[]     i_Source   = { i_SourcePoint.X, i_SourcePoint.Y };
        int[]     i_Target   = { i_TargetPoint.X, i_TargetPoint.Y };
        eCoinSign i_CoinSign = GameBoard.Matrix[i_Source[0], i_Source[1]].Sign;

        if (i_CoinSign == eCoinSign.PlayerX)
        {
            i_MoveType = moveDownToUp(i_Source, i_Target);
        }
        else if (i_CoinSign == eCoinSign.PlayerO)
        {
            i_MoveType = moveUpToDown(i_Source, i_Target);
        }
        else if ((i_CoinSign == eCoinSign.PlayerOKing) || (i_CoinSign == eCoinSign.PlayerXKing))
        {
            if (i_Source[0] > i_Target[0])
            {
                i_MoveType = moveDownToUp(i_Source, i_Target);
            }
            else
            {
                i_MoveType = moveUpToDown(i_Source, i_Target);
            }
        }

        return(i_MoveType);
    }
コード例 #2
0
 public SourceAndTargetMove(int m_RowSorcue, int m_ColSorcue, int m_RowTarget, int m_ColTarget, int m_RowEaten, int m_ColEaten, eTypeOfMove m_TypeOfMove)
 {
     this.m_RowSorcue  = m_RowSorcue;
     this.m_ColSorcue  = m_ColSorcue;
     this.m_RowTarget  = m_RowTarget;
     this.m_ColTarget  = m_ColTarget;
     this.m_RowEaten   = m_RowEaten;
     this.m_ColEaten   = m_ColEaten;
     this.m_TypeOfMove = m_TypeOfMove;
 }
        internal static void PrintErrorOfMove(eTypeOfMove i_ExpectedTypeOfMove)
        {
            switch (i_ExpectedTypeOfMove)
            {
            case eTypeOfMove.Jump:
                Console.WriteLine("Invalid move! You must take a jump");
                break;

            case eTypeOfMove.Regular:
                Console.WriteLine("Invalid move! please take a valid one");
                break;
            }
        }
コード例 #4
0
    private void fillMustEatMovesListUpToDown(int i_RowSource, int i_ColSource)
    {
        eOwner      i_CurOwner = GameBoard.Matrix[i_RowSource, i_ColSource].Owner;
        eTypeOfMove i_MoveType = eTypeOfMove.MustToEat;
        eCoinSign   i_CoinSign = GameBoard.Matrix[i_RowSource, i_ColSource].Sign;

        if (checkIfMustToEatUpToDownRight(i_CurOwner, i_RowSource, i_ColSource))
        {
            i_MoveType = checkIfMustToEatDownToUp(i_CurOwner, i_RowSource + 2, i_ColSource + 2) || checkIfMustToEatUpToDown(i_CurOwner, i_RowSource + 2, i_ColSource + 2) ? eTypeOfMove.CanMoreSkip : eTypeOfMove.MustToEat;
            Players[1].LigalMovesList.Add(new SourceAndTargetMove(i_RowSource, i_ColSource, i_RowSource + 2, i_ColSource + 2, i_RowSource + 1, i_ColSource + 1, i_MoveType));
        }

        if (checkIfMustToEatUpToDownLeft(i_CurOwner, i_RowSource, i_ColSource))
        {
            i_MoveType = checkIfMustToEatDownToUp(i_CurOwner, i_RowSource + 2, i_ColSource - 2) || checkIfMustToEatUpToDown(i_CurOwner, i_RowSource + 2, i_ColSource - 2) ? eTypeOfMove.CanMoreSkip : eTypeOfMove.MustToEat;
            Players[1].LigalMovesList.Add(new SourceAndTargetMove(i_RowSource, i_ColSource, i_RowSource + 2, i_ColSource - 2, i_RowSource + 1, i_ColSource - 1, i_MoveType));
        }
    }
コード例 #5
0
    private eTypeOfMove eatAndUpdateCellMoveDownToUp(eTypeOfMove i_MoveType, int[] i_Source, int[] i_Terget, int i_ColSource)
    {
        resetCell(i_Source[0] - 1, i_ColSource);
        updateSourceAndTargetCells(i_Source, i_Terget);
        eCoinSign i_CurrentPlayer = GameBoard.Matrix[i_Terget[0], i_Terget[1]].Sign;
        eOwner    i_CurrentOwner  = GameBoard.Matrix[i_Terget[0], i_Terget[1]].Owner;

        if (i_CurrentPlayer == eCoinSign.PlayerX)
        {
            i_MoveType = checkIfMustToEatDownToUp(i_CurrentOwner, i_Terget[0], i_Terget[1]) ? eTypeOfMove.CanMoreSkip : eTypeOfMove.SkipMove;
        }

        if ((i_CurrentPlayer == eCoinSign.PlayerXKing) || (i_CurrentPlayer == eCoinSign.PlayerOKing))
        {
            i_MoveType = checkIfMustToEatUpToDown(i_CurrentOwner, i_Terget[0], i_Terget[1]) || checkIfMustToEatDownToUp(i_CurrentOwner, i_Terget[0], i_Terget[1]) ? eTypeOfMove.CanMoreSkip : eTypeOfMove.SkipMove;
        }

        return(i_MoveType);
    }
コード例 #6
0
    private eTypeOfMove moveUpToDown(int[] i_Source, int[] i_Terget)
    {
        eTypeOfMove i_MoveType       = eTypeOfMove.IllegalMove;
        eOwner      i_CurPlayerOwner = GameBoard.Matrix[i_Source[0], i_Source[1]].Owner;

        if ((i_Terget[0] - 1 == i_Source[0]) && ((i_Source[1] == i_Terget[1] + 1) || (i_Source[1] == i_Terget[1] - 1)))
        {
            if (checkIfMustToEat(i_CurPlayerOwner))
            {
                i_MoveType = eTypeOfMove.MustToEat;
            }
            else
            {
                i_MoveType = eTypeOfMove.RegularMove;
                updateSourceAndTargetCells(i_Source, i_Terget);
            }
        }
        else if ((i_Terget[0] - 2 == i_Source[0]) && (i_Source[1] == i_Terget[1] - 2))
        {
            eOwner i_EatenOwner = GameBoard.Matrix[(i_Source[0] + 1), (i_Source[1] + 1)].Owner;
            if ((i_EatenOwner != i_CurPlayerOwner) && (i_EatenOwner != eOwner.None))

            {
                i_MoveType = eatAndUpdateCellMoveUpToDown(i_MoveType, i_Source, i_Terget, i_Source[1] + 1);
            }
        }
        else if ((i_Terget[0] - 2 == i_Source[0]) && (i_Source[1] == i_Terget[1] + 2))
        {
            eOwner i_EatenOwner = GameBoard.Matrix[(i_Source[0] + 1), (i_Source[1] - 1)].Owner;
            if ((i_EatenOwner != i_CurPlayerOwner) && (i_EatenOwner != eOwner.None))
            {
                i_MoveType = eatAndUpdateCellMoveUpToDown(i_MoveType, i_Source, i_Terget, i_Source[1] - 1);
            }
        }

        return(i_MoveType);
    }
コード例 #7
0
ファイル: Move.cs プロジェクト: matanelr/-Checkers-Game-
 public Move(Square m_FromPiece, Square m_ToPiece)
 {
     this.m_FromSquare = m_FromPiece;
     this.m_ToSquare   = m_ToPiece;
     this.m_TypeOfMove = eTypeOfMove.Regular;
 }