public bool PlacePiece(Player player) { if (m_piece || !m_piecePrefab) { return(false); } if (Game.m_instance.FirstTurn) { if (Convert.ToInt32(m_coordinate.x) != 0 || Convert.ToInt32(m_coordinate.y) != 0) { return(false); } Game.m_instance.FirstTurn = false; } else if (Game.m_instance.SecondTurn && player.Equals(Game.m_instance.m_player1)) { if (m_coordinate.magnitude < 2.9f) { return(false); } Game.m_instance.SecondTurn = false; } m_piece = Instantiate(m_piecePrefab, transform.position, Quaternion.identity, transform); m_piece.Owner = player; int offset = ((Convert.ToInt32(Game.m_instance.m_board.m_slider.value) * 2) + 7) / 2; if (ValidityTests.CheckForWin(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { Menu.m_instance.win.SetActive(true); Menu.m_instance.winText.text = Game.m_instance.m_currentPlayer.Name + " has won!"; Game.m_instance.m_isPlayingGame = false; } //Check and make captures if (ValidityTests.CheckForCaptureTop(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_topNeighbor.m_topNeighbor.Clear(); m_topNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (ValidityTests.CheckForCaptureBottom(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_bottomNeighbor.m_bottomNeighbor.Clear(); m_bottomNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (ValidityTests.CheckForCaptureLeft(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_leftNeighbor.m_leftNeighbor.Clear(); m_leftNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (ValidityTests.CheckForCaptureRight(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_rightNeighbor.m_rightNeighbor.Clear(); m_rightNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } //Diagonals if (ValidityTests.CheckForCaptureBottomLeft(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_bottomLeftNeighbor.m_bottomLeftNeighbor.Clear(); m_bottomLeftNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (ValidityTests.CheckForCaptureBottomRight(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_bottomRightNeighbor.m_bottomRightNeighbor.Clear(); m_bottomRightNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (ValidityTests.CheckForCaptureTopLeft(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_topLeftNeighbor.m_topLeftNeighbor.Clear(); m_topLeftNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (ValidityTests.CheckForCaptureTopRight(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { m_topRightNeighbor.m_topRightNeighbor.Clear(); m_topRightNeighbor.Clear(); Game.m_instance.m_currentPlayer.m_numberOfCaptures++; } if (Game.m_instance.m_currentPlayer.m_numberOfCaptures >= 5) { Game.m_instance.PlayerWon(); } //Check for Trias if (ValidityTests.CheckForTriaHorizontal(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset)) || ValidityTests.CheckForTriaVertical(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset)) || ValidityTests.CheckForTriaBottomRightToTopLeftDiagonal(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset)) || ValidityTests.CheckForTriaTopRightToBottomLeftDiagonal(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { Menu.m_instance.tria.SetActive(true); Menu.m_instance.triaText.text = Game.m_instance.m_currentPlayer.Name + " has made a tria!"; Game.m_instance.m_isPlayingGame = false; } if (ValidityTests.CheckForTesseraHorizontal(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset)) || ValidityTests.CheckForTesseraVertical(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset)) || ValidityTests.CheckForTesseraBottomRightToTopLeftDiagonal(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset)) || ValidityTests.CheckForTesseraTopRightToBottomLeftDiagonal(Game.m_instance.m_board.ToArray(), Convert.ToInt32(m_coordinate.x) + offset, Mathf.Abs(Convert.ToInt32(m_coordinate.y) - offset))) { Menu.m_instance.tessera.SetActive(true); Menu.m_instance.tesseraText.text = Game.m_instance.m_currentPlayer.Name + " has made a tessera!"; Game.m_instance.m_isPlayingGame = false; } Game.m_instance.m_board.OpenPlacementCircles.Remove(this); return(true); }