Las 3 en raya juego

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.

así debereia de quedar.

y esto es lo que tendriamos que poner en nuestro Script

Bien ahora seleccionamos tanto Player O como Player X y añadimos un Boton
estos 2 Botones vamos a ponerlos en trasparente

Ahora seleccionamos  nuestros cuadrados y lo que vamos hacer va ser lo siguiente

desmarcamos y nos saldra así

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

Ahora iriamos a nuestro Script de gameController y le asignaremos los botones
Copiamos el restar y le pegamos y le cambiamos el nombres el Restar es el boton para restablecer la partida al Star tambien le pondremos un Text

y ya tendriamos el juego

tutorial de unity  3 en raya

Related Posts

Messi después del Mundial: la historia de un campeón que siguió intentando tocar el cielo

Lionel Messi: la historia del niño que tuvo que perder muchas veces antes de tocar el cielo La historia de Lionel Messi no es solamente la historia de uno de…

No fue el Mundial de Lamine Yamal: Rodri se convirtió en el verdadero líder de España

España volvió a tocar el cielo y se proclamó campeona del mundo en 2026. Antes de comenzar el torneo, muchas miradas estaban puestas en Lamine Yamal. Por edad, talento, repercusión…

Deja una respuesta

You Missed

Messi después del Mundial: la historia de un campeón que siguió intentando tocar el cielo

  • Por admin
  • julio 27, 2026
  • 10 views
Messi después del Mundial: la historia de un campeón que siguió intentando tocar el cielo

Argentina no perdió por un complot: España fue mejor y hay que aceptarlo

  • Por admin
  • julio 24, 2026
  • 21 views
Argentina no perdió por un complot: España fue mejor y hay que aceptarlo

No fue el Mundial de Lamine Yamal: Rodri se convirtió en el verdadero líder de España

  • Por admin
  • julio 23, 2026
  • 27 views
No fue el Mundial de Lamine Yamal: Rodri se convirtió en el verdadero líder de España

Jugadores que ganaron el Mundial antes de los 20 años: la lista histórica

  • Por admin
  • julio 22, 2026
  • 36 views
Jugadores que ganaron el Mundial antes de los 20 años: la lista histórica

Mbappé vs Lamine Yamal: ¿quién es mejor?

  • Por admin
  • julio 21, 2026
  • 45 views
Mbappé vs Lamine Yamal: ¿quién es mejor?

Lamine Yamal 2026: ¿El nuevo rey del fútbol mundial?

  • Por admin
  • julio 21, 2026
  • 36 views
Lamine Yamal 2026: ¿El nuevo rey del fútbol mundial?