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






