public void Initialize(Domino domino) { mController = new DominoController(domino.Controller); mController.Parent = this; }
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); }
private void SetDominoParameter(DominoController i_domino) { i_domino.m_controlled = false; i_domino.gameObject.layer = m_dominoLayer; }
public void Initialize(int label, WaterExit[] exits, int startPosition) { mController = new DominoController(label, exits, startPosition); mController.Parent = this; }
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); }
/// <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)); } } } } }
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); }
public ChosenWayToPlay(DominoController chosenDomino, DominoController chosenPlace) { this.chosenDomino = chosenDomino; this.chosenPlace = chosenPlace; }
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); } } } }
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); } } }