Ejemplo n.º 1
0
        void MarkInsideJunction(DominoController domino)
        {
            int row = domino.Row;
            int column = domino.Column;
            if (
               ((domino.GetWaterExitSquareID(0) == -1) || (domino.GetWaterExitSquareID(1) == -1) || (domino.GetWaterExitSquareID(2) == -1))

               &&
                (domino.GetWaterExitSquareID(0) == 1) || (domino.GetWaterExitSquareID(1) == 1) || (domino.GetWaterExitSquareID(2) == 1))
            {
                if (domino.IsHorizontal())
                {
                    MarkSquareExit(row, column - 1, CardinalPoint.E);
                    MarkSquareExit(row, column, CardinalPoint.W);
                    MarkSquareExit(row, column, CardinalPoint.E);
                    MarkSquareExit(row, column + 1,CardinalPoint.W);
                }
                else
                {
                    MarkSquareExit(row - 1, column,CardinalPoint.N);
                    MarkSquareExit(row, column, CardinalPoint.N);
                    MarkSquareExit(row, column, CardinalPoint.S);
                    MarkSquareExit(row + 1, column,CardinalPoint.S);
                }

            }
            else if ((domino.GetWaterExitSquareID(0) == 0) || (domino.GetWaterExitSquareID(1) == 0) || (domino.GetWaterExitSquareID(2) == 0))
            {
                if ((domino.GetWaterExitSquareID(0) == -1) || (domino.GetWaterExitSquareID(1) == -1) || (domino.GetWaterExitSquareID(2) == -1))
                {
                    switch (domino.RotationState)
                    {
                        case 0:
                            MarkSquareExit(row, column - 1, CardinalPoint.E);
                            MarkSquareExit(row, column, CardinalPoint.W);
                            break;
                        case 1:
                            MarkSquareExit(row - 1, column, CardinalPoint.N);
                            MarkSquareExit(row, column, CardinalPoint.S);
                            break;
                        case 2:
                            MarkSquareExit(row, column + 1, CardinalPoint.W);
                            MarkSquareExit(row, column, CardinalPoint.E);
                            break;
                        case 3:
                            MarkSquareExit(row + 1, column, CardinalPoint.S);
                            MarkSquareExit(row, column, CardinalPoint.N);
                            break;
                    }
                }
                else if ((domino.GetWaterExitSquareID(0) == 1) || (domino.GetWaterExitSquareID(1) == 1) || (domino.GetWaterExitSquareID(2) == 1))
                {
                    switch (domino.RotationState)
                    {
                        case 0:
                            MarkSquareExit(row, column + 1, CardinalPoint.W);
                            MarkSquareExit(row, column, CardinalPoint.E);
                            break;
                        case 1:
                            MarkSquareExit(row + 1, column, CardinalPoint.S);
                            MarkSquareExit(row, column, CardinalPoint.N);
                            break;
                        case 2:
                            MarkSquareExit(row, column - 1, CardinalPoint.E);
                            MarkSquareExit(row, column, CardinalPoint.W);
                            break;
                        case 3:
                            MarkSquareExit(row - 1, column, CardinalPoint.N);
                            MarkSquareExit(row, column, CardinalPoint.S);
                            break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void MarkDominoExits(DominoController domino)
        {
            int rotationStateRelativeCoordinatesIndex;
            int cardinalPoint;
            int relativeRow = 0;
            int relativeColumn = 0;

            for (int i = 0; i < 3; i++)
            {
                cardinalPoint = ((int)domino.GetWaterExitCardinalPoint(i) + domino.RotationState) % 4;
                switch (domino.GetWaterExitSquareID(i))
                {
                    case -1:
                        rotationStateRelativeCoordinatesIndex = domino.RotationState;
                        relativeRow = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 0];
                        relativeColumn = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 1];

                        break;
                    case 0:
                        relativeRow = 0;
                        relativeColumn = 0;

                        break;
                    case 1:
                        rotationStateRelativeCoordinatesIndex = (2 + domino.RotationState) % 4;
                        relativeRow = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 0];
                        relativeColumn = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 1];
                        break;

                }
                MarkSquareExit(domino.Row + relativeRow, domino.Column + relativeColumn, (CardinalPoint)Enum.ToObject(typeof(CardinalPoint), cardinalPoint));

            }
            MarkInsideJunction(domino);
        }