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

El fútbol femenino español lo tiene todo menos una gran audiencia: ¿qué está fallando?

El fútbol femenino español tiene motivos para sentirse orgulloso, pero necesita seguir creciendo Para mí, el fútbol femenino español es algo de lo que podemos sentirnos profundamente orgullosos. Tenemos una…

La paradoja del fútbol español: el Barcelona juega con más españoles que el Real Madrid

El Barcelona se españoliza cada vez más, La Masía ahora Rodri refuerzan una identidad muy nacional Con el fichaje de Rodri, el Barcelona continúa aumentando el peso de los futbolistas…

Deja una respuesta

You Missed

El fútbol femenino español lo tiene todo menos una gran audiencia: ¿qué está fallando?

  • Por admin
  • agosto 19, 2026
  • 9 views
El fútbol femenino español lo tiene todo menos una gran audiencia: ¿qué está fallando?

La paradoja del fútbol español: el Barcelona juega con más españoles que el Real Madrid

  • Por admin
  • agosto 18, 2026
  • 10 views
La paradoja del fútbol español: el Barcelona juega con más españoles que el Real Madrid

Rodri por 60 millones y con 30 años: ¿fichajazo del Barcelona o demasiado riesgo?

  • Por admin
  • agosto 18, 2026
  • 8 views
Rodri por 60 millones y con 30 años: ¿fichajazo del Barcelona o demasiado riesgo?

Ferran Torres ficha por el PSG: ¿se arrepentirá el Barcelona de su salida?

  • Por admin
  • agosto 15, 2026
  • 23 views
Ferran Torres ficha por el PSG: ¿se arrepentirá el Barcelona de su salida?

LaLiga 2026-27: Real Madrid, Barcelona y Atlético luchan por el título

  • Por admin
  • agosto 15, 2026
  • 22 views
LaLiga 2026-27: Real Madrid, Barcelona y Atlético luchan por el título

Ferran al PSG: una cosa son los colores y otra muy distinta el dinero

  • Por admin
  • agosto 15, 2026
  • 28 views
Ferran al PSG: una cosa son los colores y otra muy distinta el dinero