Example #1
0
 public void Initialize(Domino domino)
 {
     mController        = new DominoController(domino.Controller);
     mController.Parent = this;
 }
Example #2
0
        public bool GetNextMove(BoardController board, List <IDomino> myDominoes, List <IDomino> enemyDominoes,
                                bool computerIsPlayer1, out IDomino playedDomino)
        {
            DominoController domino = null;

            playedDomino = null;
            int minRow    = Math.Max(0, board.BoundingBox.RowMin - 2);
            int maxRow    = Math.Min(board.Size, board.BoundingBox.RowMax + 3);
            int minColumn = Math.Max(0, board.BoundingBox.ColumnMin - 2);
            int maxColumn = Math.Min(board.Size, board.BoundingBox.ColumnMax + 3);

            if (!(GamePlayManager.Instance.FirstDominoSet))
            {
                minRow    = board.StartPosition;
                maxRow    = board.StartPosition + 1;
                minColumn = board.StartPosition;
                maxColumn = board.StartPosition + 1;
            }

            //Pick Random Domino in the Bag
            int dominoIndex = mRandom.Next(0, myDominoes.Count) - 1;

            for (int index = 0; index < myDominoes.Count; index++)
            {
                dominoIndex++;
                if (dominoIndex == myDominoes.Count)
                {
                    dominoIndex = 0;
                }
                domino       = myDominoes[dominoIndex].Controller;
                playedDomino = domino.Parent;
                //        Debug.WriteLine("index of Domino in Bag " + dominoIndex);

                //Save Position in case No Position Available for this Domino
                int rowInBag      = domino.Row;
                int columnInBag   = domino.Column;
                int rotationInBag = domino.RotationState;

                // start in a random location
                domino.Row           = mRandom.Next(minRow, maxRow) - 1;
                domino.Column        = mRandom.Next(minColumn, maxColumn) - 1;
                domino.RotationState = mRandom.Next(0, 4) - 1;

                // brute force search
                for (int row = 0; row < (maxRow - minRow); row++)
                {
                    domino.Row++;
                    if (domino.Row == maxRow)
                    {
                        domino.Row = minRow;
                    }

                    for (int column = 0; column < (maxColumn - minColumn); column++)
                    {
                        domino.Column++;
                        if (domino.Column == maxColumn)
                        {
                            domino.Column = minColumn;
                        }

                        for (int rotationState = 0; rotationState < 4; rotationState++)
                        {
                            domino.RotationState++;
                            if (domino.RotationState == 4)
                            {
                                domino.RotationState = 0;
                            }
                            if (GamePlayManager.Instance.IsLegalMove(domino))
                            {
                                return(true);
                            }
                        }
                    }
                }
                //Put Domino Back in the Bag if No Position Available
                domino.Row           = rowInBag;
                domino.Column        = columnInBag;
                domino.RotationState = rotationInBag;
            }
            return(false);
        }
Example #3
0
 private void SetDominoParameter(DominoController i_domino)
 {
     i_domino.m_controlled = false;
     i_domino.gameObject.layer = m_dominoLayer;
 }
Example #4
0
 public void Initialize(int label, WaterExit[] exits, int startPosition)
 {
     mController        = new DominoController(label, exits, startPosition);
     mController.Parent = this;
 }
Example #5
0
    public static int GetSumOfHistoryDominoes(
        List <DominoController> horizontalDominoes,
        List <DominoController> verticalDominoes,
        DominoController spinner)
    {
        // Only 1 domino in history
        if (horizontalDominoes.Count == 1)
        {
            DominoController domino = horizontalDominoes[0];
            if (domino.direction == DominoController.Direction.Horizontal)
            {
                return(domino.leftValue + domino.rightValue);
            }
            else
            {
                return(domino.upperValue + domino.lowerValue);
            }
        }
        int sum = 0;
        DominoController leftDomino = horizontalDominoes[0];

        if (leftDomino.direction == DominoController.Direction.Horizontal)
        {
            sum += leftDomino.leftValue;
        }
        else
        {
            sum += leftDomino.upperValue + leftDomino.lowerValue;
        }
        DominoController rightDomino = horizontalDominoes[horizontalDominoes.Count - 1];

        if (rightDomino.direction == DominoController.Direction.Horizontal)
        {
            sum += rightDomino.rightValue;
        }
        else
        {
            sum += rightDomino.upperValue + rightDomino.lowerValue;
        }
        // Have dominoes except spinner
        if (verticalDominoes.Count > 1)
        {
            DominoController upperDomino = verticalDominoes[0];
            if (upperDomino != spinner)
            {
                if (upperDomino.direction == DominoController.Direction.Vertical)
                {
                    sum += upperDomino.upperValue;
                }
                else
                {
                    sum += upperDomino.leftValue + upperDomino.rightValue;
                }
            }
            DominoController lowerDomino = verticalDominoes[verticalDominoes.Count - 1];
            if (lowerDomino != spinner)
            {
                if (lowerDomino.direction == DominoController.Direction.Vertical)
                {
                    sum += lowerDomino.lowerValue;
                }
                else
                {
                    sum += lowerDomino.leftValue + lowerDomino.rightValue;
                }
            }
        }
        return(sum);
    }
Example #6
0
        /// <summary>
        /// Handles spawn generation of new road chars (in the road)
        /// spwawn given the location of a domino
        /// </summary>
        /// <param name="domino">spawn in on this domino</param>
        protected void SpawnRoadCharacter(DominoController domino, float playerIndex)
        {
            List <IRoadCharacter> playerList = (playerIndex == 1) ? mPlayer1Characters : mPlayer2Characters;

            if (domino.IsHorizontal())
            {
                // spawn on small ends
                if (domino.Column == 1 &&
                    mBoardController.HasSquareExit(domino.Row, 0, CardinalPoint.W))
                {
                    playerList.Add(BuildCharacter(
                                       domino.Row,
                                       0,
                                       CardinalPoint.E,
                                       0,
                                       mBoardController.Size,
                                       false));
                }
                else if (domino.Column == (mBoardController.Size - 2) &&
                         mBoardController.HasSquareExit(domino.Row, mBoardController.Size - 1, CardinalPoint.E))
                {
                    playerList.Add(
                        BuildCharacter(domino.Row,
                                       mBoardController.Size - 1,
                                       CardinalPoint.W,
                                       0,
                                       mBoardController.Size,
                                       false));
                }

                // try spawing on bottom of board
                if (domino.Row == 0)
                {
                    for (int col = -1; col < 2; col++)
                    {
                        if (mBoardController.HasSquareExit(0, domino.Column + col, CardinalPoint.S))
                        {
                            playerList.Add(
                                BuildCharacter(0,
                                               domino.Column + col,
                                               CardinalPoint.N,
                                               0,
                                               mBoardController.Size,
                                               false));
                        }
                    }
                }
                // try spawning at top of board
                else if (domino.Row == mBoardController.Size - 1)
                {
                    for (int col = -1; col < 2; col++)
                    {
                        if (mBoardController.HasSquareExit(domino.Row, domino.Column + col, CardinalPoint.N))
                        {
                            playerList.Add(
                                BuildCharacter(
                                    mBoardController.Size - 1,
                                    domino.Column + col,
                                    CardinalPoint.S,
                                    0,
                                    mBoardController.Size,
                                    false));
                        }
                    }
                }
            }
            else //Domino Vertical
            {
                // try spawing on short ends
                if (domino.Row == 1 &&
                    mBoardController.HasSquareExit(0, domino.Column, CardinalPoint.S))
                {
                    playerList.Add(
                        BuildCharacter(
                            0,
                            domino.Column,
                            CardinalPoint.N,
                            0,
                            mBoardController.Size,
                            false));
                }
                else if (domino.Row == (mBoardController.Size - 2) &&
                         mBoardController.HasSquareExit(mBoardController.Size - 1, domino.Column, CardinalPoint.N))
                {
                    playerList.Add(
                        BuildCharacter(
                            mBoardController.Size - 1,
                            domino.Column,
                            CardinalPoint.S,
                            0,
                            mBoardController.Size,
                            false));
                }

                // try spawning along long length
                if (domino.Column == 0)
                {
                    for (int row = -1; row < 2; row++)
                    {
                        if (mBoardController.HasSquareExit(domino.Row + row, 0, CardinalPoint.W))
                        {
                            playerList.Add(
                                BuildCharacter(
                                    domino.Row + row,
                                    0,
                                    CardinalPoint.E,
                                    0,
                                    mBoardController.Size,
                                    false));
                        }
                    }
                }
                else if (domino.Column == mBoardController.Size - 1)
                {
                    for (int row = -1; row < 2; row++)
                    {
                        if (mBoardController.HasSquareExit(domino.Row + row, mBoardController.Size - 1, CardinalPoint.E))
                        {
                            playerList.Add(
                                BuildCharacter(
                                    domino.Row + row,
                                    mBoardController.Size - 1,
                                    CardinalPoint.W,
                                    0,
                                    mBoardController.Size,
                                    false));
                        }
                    }
                }
            }
        }
Example #7
0
    public static int GetNextOutsideNumber(DominoController chosenDomino, DominoController chosenPlace, Model.PositionInHistory position)
    {
        switch (position)
        {
        case Model.PositionInHistory.Left:
            if (chosenPlace.direction == DominoController.Direction.Horizontal)
            {
                int value = chosenPlace.leftValue;
                if (chosenDomino.upperValue == chosenDomino.lowerValue && chosenDomino.upperValue == value)
                {
                    return(value);
                }
                else if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }
            else
            {
                int value = chosenPlace.upperValue;
                if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }

        case Model.PositionInHistory.Right:
            if (chosenPlace.direction == DominoController.Direction.Horizontal)
            {
                int value = chosenPlace.rightValue;
                if (chosenDomino.upperValue == chosenDomino.lowerValue && chosenDomino.upperValue == value)
                {
                    return(value);
                }
                else if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }
            else
            {
                int value = chosenPlace.upperValue;
                if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }

        case Model.PositionInHistory.Upper:
            if (chosenPlace.direction == DominoController.Direction.Vertical)
            {
                int value = chosenPlace.upperValue;
                if (chosenDomino.upperValue == chosenDomino.lowerValue && chosenDomino.upperValue == value)
                {
                    return(value);
                }
                else if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }
            else
            {
                int value = chosenPlace.leftValue;
                if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }

        case Model.PositionInHistory.Lower:
            if (chosenPlace.direction == DominoController.Direction.Vertical)
            {
                int value = chosenPlace.lowerValue;
                if (chosenDomino.upperValue == chosenDomino.lowerValue && chosenDomino.upperValue == value)
                {
                    return(value);
                }
                else if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }
            else
            {
                int value = chosenPlace.leftValue;
                if (chosenDomino.upperValue == value)
                {
                    return(chosenDomino.lowerValue);
                }
                else
                {
                    return(chosenDomino.upperValue);
                }
            }
        }
        return(-1);
    }
Example #8
0
 public ChosenWayToPlay(DominoController chosenDomino, DominoController chosenPlace)
 {
     this.chosenDomino = chosenDomino;
     this.chosenPlace  = chosenPlace;
 }
Example #9
0
 void Start()
 {
     forwardDomino  = GetForwardDomino(isForward: true);
     backwardDomino = GetForwardDomino(isForward: false);
     dominoState    = DominoState.Standing;
 }
        private void PlaceDomino(DominoController chosenDomino, DominoController chosenPlace, HistoryController history)
        {
            DominoController clickedDomino = chosenPlace;
            int horizontalLen = history.horizontalDominoes.Count;
            int verticalLen   = history.verticalDominoes.Count;

            if (chosenDomino != null)
            {
                if (chosenPlace != null)
                {
                    if (chosenPlace == history.horizontalDominoes[0])
                    {
                        if (clickedDomino.leftValue == -1)
                        {
                            if (chosenDomino.upperValue == clickedDomino.upperValue || chosenDomino.lowerValue == clickedDomino.upperValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.upperValue == clickedDomino.upperValue)
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                else
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                                }
                                return;
                            }
                        }
                        else
                        {
                            if (chosenDomino.upperValue == clickedDomino.leftValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                            {
                                chosenPlace = clickedDomino;
                                return;
                            }
                            else if (chosenDomino.upperValue == clickedDomino.leftValue || chosenDomino.lowerValue == clickedDomino.leftValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.upperValue == clickedDomino.leftValue)
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                else
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                                }
                                return;
                            }
                        }
                    }
                    if (clickedDomino == history.horizontalDominoes[horizontalLen - 1])
                    {
                        if (clickedDomino.leftValue == -1)
                        {
                            if (chosenDomino.upperValue == clickedDomino.upperValue || chosenDomino.lowerValue == clickedDomino.upperValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.upperValue == clickedDomino.upperValue)
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                                }
                                else
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                return;
                            }
                        }
                        else
                        {
                            if (chosenDomino.upperValue == clickedDomino.rightValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                            {
                                chosenPlace = clickedDomino;
                                return;
                            }
                            else if (chosenDomino.upperValue == clickedDomino.rightValue || chosenDomino.lowerValue == clickedDomino.rightValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.upperValue == clickedDomino.rightValue)
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                                }
                                else
                                {
                                    chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                return;
                            }
                        }
                    }
                    if (verticalLen > 0 && clickedDomino == history.verticalDominoes[0])
                    {
                        if (clickedDomino.leftValue == -1)
                        {
                            if (chosenDomino.upperValue == clickedDomino.upperValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                            {
                                chosenPlace = clickedDomino;
                                chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                                return;
                            }
                            else if (chosenDomino.upperValue == clickedDomino.upperValue || chosenDomino.lowerValue == clickedDomino.upperValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.upperValue == clickedDomino.upperValue)
                                {
                                    chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                return;
                            }
                        }
                        else
                        {
                            if (chosenDomino.upperValue == clickedDomino.leftValue || chosenDomino.lowerValue == clickedDomino.leftValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.upperValue == clickedDomino.leftValue)
                                {
                                    chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                return;
                            }
                        }
                    }
                    if (verticalLen > 0 && clickedDomino == history.verticalDominoes[verticalLen - 1])
                    {
                        if (clickedDomino.leftValue == -1)
                        {
                            if (chosenDomino.upperValue == clickedDomino.lowerValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                            {
                                chosenPlace = clickedDomino;
                                chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                                return;
                            }
                            else if (chosenDomino.upperValue == clickedDomino.lowerValue || chosenDomino.lowerValue == clickedDomino.lowerValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.lowerValue == clickedDomino.lowerValue)
                                {
                                    chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                return;
                            }
                        }
                        else
                        {
                            if (chosenDomino.upperValue == clickedDomino.leftValue || chosenDomino.lowerValue == clickedDomino.leftValue)
                            {
                                chosenPlace = clickedDomino;
                                if (chosenDomino.lowerValue == clickedDomino.leftValue)
                                {
                                    chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                                }
                                return;
                            }
                        }
                    }
                }
                else
                {
                    if (chosenDomino.upperValue != chosenDomino.lowerValue)
                    {
                        chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                    }
                }
            }
        }
Example #11
0
        private void PlaceDomino(DominoController chosenDomino, DominoController chosenPlace, HistoryController history)
        {
            var clickedDomino = chosenPlace;
            var horizontalLen = history.horizontalDominoes.Count;
            var verticalLen   = history.verticalDominoes.Count;

            if (chosenDomino == default)
            {
                return;
            }

            if (!chosenPlace == default)
            {
                if (chosenPlace == history.horizontalDominoes[0])
                {
                    if (clickedDomino.leftValue == -1)
                    {
                        if (chosenDomino.upperValue == clickedDomino.upperValue || chosenDomino.lowerValue == clickedDomino.upperValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.upperValue == clickedDomino.upperValue)
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                            else
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                            }
                            return;
                        }
                    }
                    else
                    {
                        /*
                         * if (chosenDomino.upperValue == clickedDomino.leftValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                         * {
                         *  //chosenPlace = clickedDomino;
                         *  return;
                         * }
                         */
                        if (chosenDomino.upperValue == clickedDomino.leftValue || chosenDomino.lowerValue == clickedDomino.leftValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.upperValue == clickedDomino.leftValue)
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                            else
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                            }
                            return;
                        }
                    }
                }
                if (clickedDomino.Equals(history.horizontalDominoes[horizontalLen - 1]))
                {
                    if (clickedDomino.leftValue == -1)
                    {
                        if (chosenDomino.upperValue == clickedDomino.upperValue || chosenDomino.lowerValue == clickedDomino.upperValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.upperValue == clickedDomino.upperValue)
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                            }
                            else
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                            return;
                        }
                    }
                    else
                    {
                        if (chosenDomino.upperValue == clickedDomino.rightValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                        {
                            //chosenPlace = clickedDomino;
                            return;
                        }
                        if (chosenDomino.upperValue == clickedDomino.rightValue || chosenDomino.lowerValue == clickedDomino.rightValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.upperValue == clickedDomino.rightValue)
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                            }
                            else
                            {
                                chosenDomino.SetLeftRightValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                            return;
                        }
                    }
                }
                if (verticalLen > 0 && clickedDomino.Equals(history.verticalDominoes[0]))
                {
                    if (clickedDomino.leftValue == -1)
                    {
                        if (chosenDomino.upperValue == clickedDomino.upperValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                        {
                            //chosenPlace = clickedDomino;
                            chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                            return;
                        }
                        if (chosenDomino.upperValue == clickedDomino.upperValue || chosenDomino.lowerValue == clickedDomino.upperValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.upperValue == clickedDomino.upperValue)
                            {
                                chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                            return;
                        }
                    }
                    else
                    {
                        if (chosenDomino.upperValue == clickedDomino.leftValue || chosenDomino.lowerValue == clickedDomino.leftValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.upperValue == clickedDomino.leftValue)
                            {
                                chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                            return;
                        }
                    }
                }
                if (verticalLen > 0 && clickedDomino.Equals(history.verticalDominoes[verticalLen - 1]))
                {
                    if (clickedDomino.leftValue == -1)
                    {
                        if (chosenDomino.upperValue == clickedDomino.lowerValue && chosenDomino.upperValue == chosenDomino.lowerValue)
                        {
                            //chosenPlace = clickedDomino;
                            chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                            return;
                        }
                        if (chosenDomino.upperValue == clickedDomino.lowerValue || chosenDomino.lowerValue == clickedDomino.lowerValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.lowerValue == clickedDomino.lowerValue)
                            {
                                chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                        }
                    }
                    else
                    {
                        if (chosenDomino.upperValue == clickedDomino.leftValue || chosenDomino.lowerValue == clickedDomino.leftValue)
                        {
                            //chosenPlace = clickedDomino;
                            if (chosenDomino.lowerValue == clickedDomino.leftValue)
                            {
                                chosenDomino.SetUpperLowerValues(chosenDomino.lowerValue, chosenDomino.upperValue);
                            }
                        }
                    }
                }
            }
            else
            {
                if (chosenDomino.upperValue != chosenDomino.lowerValue)
                {
                    chosenDomino.SetLeftRightValues(chosenDomino.upperValue, chosenDomino.lowerValue);
                }
            }
        }