public void OnClickBox(BoardBox clickedBox) { PlayerColor curColor = GameManager.instance.currentPlayer.color; //Debug.Log(GameManager.instance.currentPlayer); if (GameManager.instance.status == GameStatus.Fight) { if (clickedBox.boxContent == BoxContent.Barrier) { StartCoroutine(flashErrorText("Can't place anything in a box with a barrier!")); return; } int buffer = 0; if (curColor == PlayerColor.Blue) { buffer += 3; } if (clickedBox.boxContent == BoxContent.Empty) { GameObject newPiece = Instantiate(piecePrefab, clickedBox.transform); clickedBox.GetComponent <Image>().sprite = GameManager.instance.pieceSprites[(int)GameManager.instance.currentTypeMode + buffer]; clickedBox.boxContent = BoxContent.Piece; clickedBox.currentPiece = newPiece.GetComponent <Piece>(); ++GameManager.instance.currentPlayer.score; GameManager.instance.processPlay(clickedBox); if (GameManager.instance.checkGameOver()) { //game is over right now, no place to place any piece now. int res = GameManager.instance.gameOver(); if (res == 0) { p1Win.gameObject.SetActive(true); } else if (res == 1) { p2Win.gameObject.SetActive(true); } else if (res == 2) { p1Win.gameObject.SetActive(true); p2Win.gameObject.SetActive(true); } startGameButton.interactable = true; } } } else if (GameManager.instance.status == GameStatus.SetBarrier) { if (clickedBox.boxContent == BoxContent.Empty && GameManager.instance.countBarrier < GameManager.instance.maxBarriers) { //GameObject newPiece = Instantiate(piecePrefab, clickedBox.transform); clickedBox.GetComponent <Image>().sprite = GameManager.instance.pieceSprites[6]; //dont set box content here, just remember all the barriers clickedBox.boxContent = BoxContent.Barrier; GameManager.instance.countBarrier++; if (curColor == PlayerColor.Blue) { clickedBox.barrierInfo[0] = true; } else { clickedBox.barrierInfo[1] = true; } } else if (clickedBox.boxContent == BoxContent.Barrier) { clickedBox.GetComponent <Image>().sprite = GameManager.instance.pieceSprites[7]; clickedBox.boxContent = BoxContent.Empty; if (curColor == PlayerColor.Blue) { clickedBox.barrierInfo[0] = false; } else { clickedBox.barrierInfo[1] = false; } GameManager.instance.countBarrier--; } } }
void checkForTrump(BoardBox box) { BoardBox barrierBox = null; if (box.rowNum + 2 < amtRows) { BoardBox right = board.board[box.rowNum + 1][box.colNum]; if (right.boxContent == BoxContent.Piece) { if (right.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, right.currentPiece) && right.isSequence) { BoardBox rightRight = board.board[box.rowNum + 2][box.colNum]; if (isPair(box, rightRight)) { // change sprite of middle box to a barrier right.GetComponent <Image>().sprite = barrierSprite; barrierBox = right; right.currentPiece.owner.score -= 2; // refactor the opposing player's score & fix booleans right.isSequence = false; while (right.colNum + 1 < amtColumns && board.board[right.rowNum][right.colNum + 1].boxContent != BoxContent.Empty) { if (isPair(right, board.board[right.rowNum][right.colNum + 1])) { --right.currentPiece.owner.score; board.board[right.rowNum][right.colNum + 1].isSequence = false; } else { break; } right = board.board[right.rowNum][right.colNum + 1]; } right = board.board[box.rowNum + 1][box.colNum]; while (right.colNum - 1 >= 0 && board.board[right.rowNum][right.colNum - 1].boxContent != BoxContent.Empty) { if (isPair(right, board.board[right.rowNum][right.colNum - 1])) { --right.currentPiece.owner.score; board.board[right.rowNum][right.colNum - 1].isSequence = false; } else { break; } right = board.board[right.rowNum][right.colNum - 1]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } if (box.rowNum - 2 >= 0) { BoardBox left = board.board[box.rowNum - 1][box.colNum]; if (left.boxContent == BoxContent.Piece) { if (left.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, left.currentPiece) && left.isSequence) { BoardBox leftLeft = board.board[box.rowNum - 2][box.colNum]; if (isPair(box, leftLeft)) { // change sprite of middle box to a barrier left.GetComponent <Image>().sprite = barrierSprite; barrierBox = left; left.currentPiece.owner.score -= 2; // refactor the opposing player's score left.isSequence = false; while (left.colNum + 1 < amtColumns && board.board[left.rowNum][left.colNum + 1].boxContent != BoxContent.Empty) { if (isPair(left, board.board[left.rowNum][left.colNum + 1])) { --left.currentPiece.owner.score; board.board[left.rowNum][left.colNum + 1].isSequence = false; } else { break; } left = board.board[left.rowNum][left.colNum + 1]; } left = board.board[box.rowNum - 1][box.colNum]; while (left.colNum - 1 >= 0 && board.board[left.rowNum][left.colNum - 1].boxContent != BoxContent.Empty) { if (isPair(left, board.board[left.rowNum][left.colNum - 1])) { --left.currentPiece.owner.score; board.board[left.rowNum][left.colNum - 1].isSequence = false; } else { break; } left = board.board[left.rowNum][left.colNum - 1]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } if (box.colNum + 2 < amtColumns) { BoardBox up = board.board[box.rowNum][box.colNum + 1]; if (up.boxContent == BoxContent.Piece) { if (up.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, up.currentPiece) && up.isSequence) { BoardBox upUp = board.board[box.rowNum][box.colNum + 2]; if (isPair(box, upUp)) { // change sprite of middle box to a barrier up.GetComponent <Image>().sprite = barrierSprite; barrierBox = up; up.currentPiece.owner.score -= 2; // refactor the opposing player's score up.isSequence = false; while (up.rowNum + 1 < amtRows && board.board[up.rowNum + 1][up.colNum].boxContent != BoxContent.Empty) { if (isPair(up, board.board[up.rowNum + 1][up.colNum])) { --up.currentPiece.owner.score; board.board[up.rowNum + 1][up.colNum].isSequence = false; } else { break; } up = board.board[up.rowNum + 1][up.colNum]; } up = board.board[box.rowNum][box.colNum + 1]; while (up.rowNum - 1 >= 0 && board.board[up.rowNum - 1][up.colNum].boxContent != BoxContent.Empty) { if (isPair(up, board.board[up.rowNum - 1][up.colNum])) { --up.currentPiece.owner.score; board.board[up.rowNum - 1][up.colNum].isSequence = false; } else { break; } up = board.board[up.rowNum - 1][up.colNum]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } if (box.colNum - 2 >= 0) { BoardBox down = board.board[box.rowNum][box.colNum - 1]; if (down.boxContent == BoxContent.Piece) { if (down.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, down.currentPiece) && down.isSequence) { BoardBox downDown = board.board[box.rowNum][box.colNum - 2]; if (isPair(box, downDown)) { // change sprite of middle box to a barrier down.GetComponent <Image>().sprite = barrierSprite; barrierBox = down; down.currentPiece.owner.score -= 2; // refactor the opposing player's score down.isSequence = false; while (down.rowNum + 1 < amtRows && board.board[down.rowNum + 1][down.colNum].boxContent != BoxContent.Empty) { if (isPair(down, board.board[down.rowNum + 1][down.colNum])) { --down.currentPiece.owner.score; board.board[down.rowNum + 1][down.colNum].isSequence = false; } else { break; } down = board.board[down.rowNum + 1][down.colNum]; } down = board.board[box.rowNum][box.colNum - 1]; while (down.colNum - 1 >= 0 && board.board[down.rowNum - 1][down.colNum].boxContent != BoxContent.Empty) { if (isPair(down, board.board[down.rowNum - 1][down.colNum])) { --down.currentPiece.owner.score; board.board[down.rowNum - 1][down.colNum].isSequence = false; } else { break; } down = board.board[down.rowNum - 1][down.colNum]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } // diagonal cases if (box.rowNum + 2 < amtRows && box.colNum - 2 >= 0) { BoardBox next = board.board[box.rowNum + 1][box.colNum - 1]; if (next.boxContent == BoxContent.Piece) { if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence) { BoardBox nextNext = board.board[box.rowNum + 2][box.colNum - 2]; if (isPair(box, nextNext)) { // change sprite of middle box to a barrier next.GetComponent <Image>().sprite = barrierSprite; barrierBox = next; next.currentPiece.owner.score -= 2; // refactor the opposing player's score next.isDiagonalSequence = false; while (next.rowNum + 1 < amtRows && next.colNum + 1 < amtColumns && board.board[next.rowNum + 1][next.colNum + 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum + 1][next.colNum + 1])) { --next.currentPiece.owner.score; board.board[next.rowNum + 1][next.colNum + 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum + 1][next.colNum + 1]; } next = board.board[box.rowNum + 1][box.colNum - 1]; while (next.rowNum - 1 >= 0 && next.colNum - 1 >= 0 && board.board[next.rowNum - 1][next.colNum - 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum - 1][next.colNum - 1])) { --next.currentPiece.owner.score; board.board[next.rowNum - 1][next.colNum - 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum - 1][next.colNum - 1]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } if (box.rowNum - 2 >= 0 && box.colNum + 2 < amtColumns) { BoardBox next = board.board[box.rowNum - 1][box.colNum + 1]; if (next.boxContent == BoxContent.Piece) { if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence) { BoardBox nextNext = board.board[box.rowNum - 2][box.colNum + 2]; if (isPair(box, nextNext)) { // change sprite of middle box to a barrier next.GetComponent <Image>().sprite = barrierSprite; barrierBox = next; next.currentPiece.owner.score -= 2; // refactor the opposing player's score next.isDiagonalSequence = false; while (next.rowNum + 1 < amtRows && next.colNum + 1 < amtColumns && board.board[next.rowNum + 1][next.colNum + 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum + 1][next.colNum + 1])) { --next.currentPiece.owner.score; board.board[next.rowNum + 1][next.colNum + 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum + 1][next.colNum + 1]; } next = board.board[box.rowNum - 1][box.colNum + 1]; while (next.rowNum - 1 >= 0 && next.colNum - 1 >= 0 && board.board[next.rowNum - 1][next.colNum - 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum - 1][next.colNum - 1])) { --next.currentPiece.owner.score; board.board[next.rowNum - 1][next.colNum - 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum - 1][next.colNum - 1]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } if (box.rowNum - 2 >= 0 && box.colNum - 2 >= 0) { BoardBox next = board.board[box.rowNum - 1][box.colNum - 1]; if (next.boxContent == BoxContent.Piece) { if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence) { BoardBox nextNext = board.board[box.rowNum - 2][box.colNum - 2]; if (isPair(box, nextNext)) { // change sprite of middle box to a barrier next.GetComponent <Image>().sprite = barrierSprite; barrierBox = next; next.currentPiece.owner.score -= 2; // refactor the opposing player's score next.isDiagonalSequence = false; while (next.rowNum + 1 < amtRows && next.colNum - 1 >= 0 && board.board[next.rowNum + 1][next.colNum - 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum + 1][next.colNum - 1])) { --next.currentPiece.owner.score; board.board[next.rowNum + 1][next.colNum - 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum + 1][next.colNum - 1]; } next = board.board[box.rowNum - 1][box.colNum - 1]; while (next.rowNum - 1 >= 0 && next.colNum + 1 < amtColumns && board.board[next.rowNum - 1][next.colNum + 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum - 1][next.colNum + 1])) { --next.currentPiece.owner.score; board.board[next.rowNum - 1][next.colNum + 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum - 1][next.colNum + 1]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } if (box.rowNum + 2 < amtRows && box.colNum + 2 < amtColumns) { BoardBox next = board.board[box.rowNum + 1][box.colNum + 1]; if (next.boxContent == BoxContent.Piece) { if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence) { BoardBox nextNext = board.board[box.rowNum + 2][box.colNum + 2]; if (isPair(box, nextNext)) { // change sprite of middle box to a barrier next.GetComponent <Image>().sprite = barrierSprite; barrierBox = next; next.currentPiece.owner.score -= 2; // refactor the opposing player's score next.isDiagonalSequence = false; while (next.rowNum + 1 < amtRows && next.colNum - 1 >= 0 && board.board[next.rowNum + 1][next.colNum - 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum + 1][next.colNum - 1])) { --next.currentPiece.owner.score; board.board[next.rowNum + 1][next.colNum - 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum + 1][next.colNum - 1]; } next = board.board[box.rowNum + 1][box.colNum + 1]; while (next.rowNum - 1 >= 0 && next.colNum + 1 < amtColumns && board.board[next.rowNum - 1][next.colNum + 1].boxContent != BoxContent.Empty) { if (isPair(next, board.board[next.rowNum - 1][next.colNum + 1])) { --next.currentPiece.owner.score; board.board[next.rowNum - 1][next.colNum + 1].isDiagonalSequence = false; } else { break; } next = board.board[next.rowNum - 1][next.colNum + 1]; } barrierBox.boxContent = BoxContent.Barrier; barrierBox.currentPiece = null; return; } } } } }