Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [System.Serializable]
- public class Player
- {
- public Image panel;
- public Text text;
- public Button button;
- }
- [System.Serializable]
- public class PlayerColor
- {
- public Color panelColor;
- public Color textColor;
- }
- public class GameController : MonoBehaviour
- {
- public Text[,,] buttonList;
- public GameObject gameOverPanel;
- public Text gameOverText;
- private string playerSide;
- private string computerSide;
- private int moveCount;
- public GameObject restartButton;
- public GameObject startInfo;
- public Player playerX;
- public Player playerO;
- public PlayerColor activePlayerColor;
- public PlayerColor inactivePlayerColor;
- public bool playerMove;
- public float delay;
- private int value;
- public enum State {Null, X, O};
- public State[,] states = new State[0,0];
- public List<State> state = new List<State>();
- void Awake()
- {
- SetGameControllerReferenceOnButtons();
- gameOverPanel.SetActive(false);
- moveCount = 0;
- restartButton.SetActive(false);
- playerMove = true;
- }
- public void Update()
- {
- if (playerMove == false)
- {
- delay += delay * Time.deltaTime;
- if (delay >= 100)
- {
- value = Random.Range(0, 8);
- if (buttonList[value].GetComponentInParent<Button>().interactable == true)
- {
- buttonList[value].text = GetComputerSide();
- buttonList[value].GetComponentInParent<Button>().interactable = false;
- EndTurn();
- }
- }
- }
- }
- void SetGameControllerReferenceOnButtons()
- {
- for (int i = 0; i < buttonList.Length; i++)
- {
- buttonList[i].GetComponentInParent<GridSpace>().SetGameControllerReference(this);
- }
- }
- public void SetStartingSide(string startingSide)
- {
- playerSide = startingSide;
- if(playerSide == "X")
- {
- computerSide = "O";
- SetPlayerColors(playerX, playerO);
- }
- else
- {
- computerSide = "X";
- SetPlayerColors(playerO, playerX);
- }
- StartGame();
- }
- void StartGame()
- {
- SetBoardInteractable(true);
- SetPlayerButtons(false);
- startInfo.SetActive(false);
- }
- public string GetPlayerSide()
- {
- return playerSide;
- }
- public string GetComputerSide()
- {
- return computerSide;
- }
- public void EndTurn()
- {
- moveCount++;
- for (int i = 0; i < buttonList.Length; i++)
- {
- if (buttonList[0, 1, 2].text == playerSide && buttonList[3, 4, 5].text == playerSide && buttonList[6, 7, 8].text == playerSide)
- {
- GameOver(playerSide);
- }
- else if (buttonList[0, 3, 6].text == playerSide && buttonList[1, 4, 7].text == playerSide && buttonList[2, 5, 8].text == playerSide)
- {
- GameOver(playerSide);
- }
- else if (buttonList[0, 4, 8].text == playerSide && buttonList[2, 4, 6].text == playerSide)
- {
- GameOver(playerSide);
- }
- else if (buttonList[0, 1, 2].text == computerSide && buttonList[3, 4, 5].text == computerSide && buttonList[6, 7, 8].text == computerSide)
- {
- GameOver(computerSide);
- }
- else if (buttonList[0, 3, 6].text == computerSide && buttonList[1, 4, 7].text == computerSide && buttonList[2, 5, 8].text == computerSide)
- {
- GameOver(computerSide);
- }
- else if (buttonList[0, 4, 8].text == computerSide && buttonList[2, 4, 6].text == computerSide)
- {
- GameOver(computerSide);
- }
- else if (moveCount >= 9)
- {
- GameOver("draw");
- }
- else
- {
- ChangeSides();
- delay = 10;
- }
- }
- }
- void ChangeSides()
- {
- //playerSide = (playerSide == "X") ? "O" : "X";
- playerMove = (playerMove == true) ? false : true;
- //if(playerSide == "X")
- if(playerMove == true)
- {
- SetPlayerColors(playerX, playerO);
- }
- else
- {
- SetPlayerColors(playerO, playerX);
- }
- }
- void SetPlayerColors(Player newPlayer, Player oldPlayer)
- {
- newPlayer.panel.color = activePlayerColor.panelColor;
- newPlayer.text.color = activePlayerColor.textColor;
- oldPlayer.panel.color = inactivePlayerColor.panelColor;
- oldPlayer.text.color = inactivePlayerColor.textColor;
- }
- void GameOver(string winningPlayer)
- {
- SetBoardInteractable(false);
- if (winningPlayer == "draw")
- {
- SetGameOverText("Draw");
- SetPlayerColorsInactive();
- }
- else
- {
- SetGameOverText(winningPlayer + " wins");
- }
- restartButton.SetActive(true);
- }
- void SetGameOverText(string value)
- {
- gameOverPanel.SetActive(true);
- gameOverText.text = value;
- }
- public void RestartGame()
- {
- moveCount = 0;
- gameOverPanel.SetActive(false);
- restartButton.SetActive(false);
- SetPlayerButtons(true);
- startInfo.SetActive(true);
- SetPlayerColorsInactive();
- playerMove = true;
- delay = 10;
- for (int i = 0; i < buttonList.Length; i++)
- {
- buttonList[i].text = "";
- }
- }
- void SetBoardInteractable(bool toggle)
- {
- for (int i = 0; i < buttonList.Length; i++)
- {
- buttonList[i].GetComponentInParent<Button>().interactable = toggle;
- }
- }
- void SetPlayerButtons(bool toggle)
- {
- playerX.button.interactable = toggle;
- playerO.button.interactable = toggle;
- }
- void SetPlayerColorsInactive()
- {
- playerX.panel.color = inactivePlayerColor.panelColor;
- playerX.text.color = inactivePlayerColor.textColor;
- playerO.panel.color = inactivePlayerColor.panelColor;
- playerO.panel.color = inactivePlayerColor.textColor;
- }
- }
- if (buttonList[0].text == playerSide && buttonList[1].text == playerSide && buttonList[2].text == playerSide)
- {
- GameOver(playerSide);
- }
- else if (buttonList[3].text == playerSide && buttonList[4].text == playerSide && buttonList[5].text == playerSide)
- {
- GameOver(playerSide);
- for (int i = 0; i < buttonList.Length; i++)
- {
- if (buttonList[0, 1, 2].text == playerSide && buttonList[3, 4, 5].text == playerSide && buttonList[6, 7, 8].text == playerSide)
- {
- GameOver(playerSide);
- }
Add Comment
Please, Sign In to add comment