aquí os voy a dejar el Script del juego entero
este es el Script de GameControler
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [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; private string playerSide; public GameObject gameover; public Text gameoverText; private int moveCount; public GameObject restartButton; public Player playerX; public Player playerO; public PlayerColor activePlayerColor; public PlayerColor inactivePlayerColor; public GameObject starI; private string computerSide; public bool playerMove; public float delay; private int value; private int moveCaount; void Awake() { SetGameControllerRerefenceOnButtons(); gameover.SetActive(false); moveCount = 0; restartButton.SetActive(false); playerMove = true; } 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 SetGameControllerRerefenceOnButtons() { for (int i = 0; i < buttonList.Length; i++) { buttonList[i].GetComponentInParent<GripSpace>().SetGameControllerReference(this); } } public void SetSartingSide(string startingSide) { playerSide = startingSide; if (playerSide == "X") { computerSide = "0"; SetPlayerColors(playerX, playerO); } else { computerSide = "X"; SetPlayerColors(playerO, playerX); } StartGame(); } void StartGame() { SetBoarddInteractable(true); SetPlayerButton(false); starI.SetActive(false); } public string GetPlayerSide() { return playerSide; } public string GetComputerSide() { return computerSide; } public void EndTurn() { moveCount++; 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); } else if (buttonList[6].text == playerSide && buttonList[7].text == playerSide && buttonList[8].text == playerSide) { GameOver(playerSide); } else if (buttonList[0].text == playerSide && buttonList[3].text == playerSide && buttonList[6].text == playerSide) { GameOver(playerSide); } else if (buttonList[1].text == playerSide && buttonList[4].text == playerSide && buttonList[7].text == playerSide) { GameOver(playerSide); } else if (buttonList[2].text == playerSide && buttonList[5].text == playerSide && buttonList[8].text == playerSide) { GameOver(playerSide); } else if (buttonList[0].text == playerSide && buttonList[4].text == playerSide && buttonList[8].text == playerSide) { GameOver(playerSide); } else if (buttonList[2].text == playerSide && buttonList[4].text == playerSide && buttonList[6].text == playerSide) { GameOver(playerSide); } else 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); } else if (buttonList[6].text == playerSide && buttonList[7].text == playerSide && buttonList[8].text == playerSide) { GameOver(playerSide); } else if (buttonList[0].text == playerSide && buttonList[3].text == playerSide && buttonList[6].text == playerSide) { GameOver(playerSide); } else if (buttonList[1].text == playerSide && buttonList[4].text == playerSide && buttonList[7].text == playerSide) { GameOver(playerSide); } else if (buttonList[2].text == playerSide && buttonList[5].text == playerSide && buttonList[8].text == playerSide) { GameOver(playerSide); } else if (buttonList[0].text == playerSide && buttonList[4].text == playerSide && buttonList[8].text == playerSide) { GameOver(playerSide); } else if (buttonList[2].text == playerSide && buttonList[4].text == playerSide && buttonList[6].text == playerSide) { GameOver(playerSide); } else if (moveCount >= 9) { GameOver("draw"); } else { ChangeSides(); } } 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) { SetBoarddInteractable(false); if (winningPlayer == "draw") { SetGameOverText("game"); SetPlayerColorInactive(); } else { SetGameOverText(winningPlayer + " Wins¡"); } restartButton.SetActive(true); } 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 SetGameOverText(string value) { gameover.SetActive(true); gameoverText.text = value; } public void RestarGame() { moveCount = 0; gameover.SetActive(false); restartButton.SetActive(false); SetPlayerButton(true); SetPlayerColorInactive(); starI.SetActive(true); playerMove = true; delay = 10; for (int i = 0; i < buttonList.Length; i++) { buttonList[i].text = ""; } SetPlayerColors(playerX, playerO); restartButton.SetActive(false); } void SetBoarddInteractable(bool toggle) { for (int i = 0; i < buttonList.Length; i++) { buttonList[i].GetComponentInParent<Button>().interactable = toggle; } } void SetPlayerButton(bool toggle) { playerX.button.interactable = toggle; playerO.button.interactable = toggle; } void SetPlayerColorInactive() { playerX.panel.color = inactivePlayerColor.panelColor; playerX.panel.color = inactivePlayerColor.textColor; playerO.panel.color = inactivePlayerColor.panelColor; playerO.panel.color = inactivePlayerColor.textColor; } }
Ahora os pondre el Script de Grip
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GripSpace : MonoBehaviour { public Button button; public Text buttonText; private gamecontroller GameController; public void SetGameControllerReference(gamecontroller controller) { GameController = controller; } public void SetSpace() { buttonText.text = GameController.GetPlayerSide(); button.interactable = false; GameController.EndTurn(); } }
Bien lo que vamos hacer incorporar lo siguiente que le falta a nuestro Script
a nuestro Script había que incorporarle lo siguiente PlayerX(Image) Text(Text) de ambos sitios, para eso vamos a crear un Canvas al que llamaremos Player O y le incorporaremos un Text y de nuevo crearemos otro Canvas al que llamaremos Player X y le incorporaremos el Text.
y esto es lo que tendriamos que poner en nuestro Script
Ahora seleccionamos nuestros cuadrados y lo que vamos hacer va ser lo siguiente
Ahora vamos a seleccionar los 2 botones que hemos creado en PlayerX y Player O
seleccionamos los dos y nos vamos a la parte derecha
le damos al + y asignamos el GameControler que tengamos a la izquierda despues buscamos en el Script y abajo ponemos respectivamente en uno el O y en el otro la X
y ya tendriamos el juego