示例#1
0
    public void TaskOnClick()
    {
        //Cambio de jugador
        main_behavior.reparte = false;
        main_behavior.index_player++;
        main_behavior.turno++;
        main_behavior.index_player %= main_behavior.jugadores.Count;
        main_behavior.estado        = (main_behavior.turno / main_behavior.jugadores.Count) % 2 != 0;
        if (main_behavior.estado == false)          //Solo se puede repartir en turno de movimiento
        {
            main_behavior.reparte = true;
            main_behavior.units_hold [main_behavior.index_player] += StartOptions.partida.casillas_jugador() / 3;
        }

        string nombre_jugador = main_behavior.jugadores[main_behavior.index_player].ToString();
        string nombre_casa    = main_behavior.casas[main_behavior.index_player].ToString();
        string color;
        string imagen_mostrar = "";

        if (nombre_casa == "Baratheon")
        {
            color          = "amarillo";
            imagen_mostrar = "house-baratheon";
        }
        else if (nombre_casa == "Lannister")
        {
            color          = "rojo";
            imagen_mostrar = "house-lannister";
        }
        else if (nombre_casa == "Stark")
        {
            color          = "blanco";
            imagen_mostrar = "house-stark";
        }
        else
        {
            color          = "negro";
            imagen_mostrar = "house-targaryen";
        }

        pintarCasa(nombre_casa, imagen_mostrar);

        if (main_behavior.estado != false)
        {
            LogText.log("Es el turno de " + nombre_jugador + ", representando a la casa " + nombre_casa + " con el color " + color + ".\nEn este turno puedes atacar.");
        }
        else
        {
            LogText.log("Es el turno de " + nombre_jugador + ", representando a la casa " + nombre_casa + " con el color " + color + ".\nPara comenzar el turno tienes " + main_behavior.units_hold [main_behavior.index_player] + " unidades nuevas para colocar en tus territorios.\nSelecciona un territorio.");
        }
        Tile.reset_origen();
    }
示例#2
0
文件: Tile.cs 项目: rsf92/gmev
    public void closePanel()
    {
        Dropdown drpSoldados = GameObject.Find("drpSoldados").GetComponent <Dropdown>();
        int      valueDrop   = (int)drpSoldados.value;

        origen.me.add_units(valueDrop);
        main_behavior.units_hold[main_behavior.index_player] = main_behavior.units_hold[main_behavior.index_player] - valueDrop;

        LogText.log("Añadidas " + valueDrop + " unidades, quedan " + main_behavior.units_hold[main_behavior.index_player]);

        main_behavior.reparte = main_behavior.units_hold[main_behavior.index_player] > 0;

        GameObject panelControl = GameObject.Find("PanelController");

        panel = panelControl.GetComponent <PanelSoldado>();
        panel.DoUnvisible();
        panelStart       = false;
        Tile.droppeddown = true;
        origen.paintUnits();
        origen.updateCount();
        Tile.reset_origen();
    }
示例#3
0
文件: Tile.cs 项目: rsf92/gmev
    IEnumerator OnMouseUp()
    {
        if (Tile.performing == false && Tile.droppeddown == true)
        {
            mainCamera.enabled = false;
            cameraB.enabled    = true;

            Army temporal;
            Tile.performing = true;
            if (origen != null && (me.isAdyacent(origen.me) != true && this != origen))
            {
                LogText.log("Sólo te puedes mover a casillas adyacentes!");
            }
            else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) == true && Tile.origen == null)
            {
                if (main_behavior.reparte == true)
                {
                    Tile.droppeddown = false;
                    origen           = this;

                    List <string> m_DropOptions = new List <string> ();
                    for (int i = 0; i <= main_behavior.units_hold [main_behavior.index_player]; i++)
                    {
                        m_DropOptions.Add(i.ToString());
                    }

                    GameObject panelControl = GameObject.Find("PanelController");

                    panel = panelControl.GetComponent <PanelSoldado> ();
                    panel.DoVisible();

                    valueDropdown = 0;

                    Dropdown drpSoldados = GameObject.Find("drpSoldados").GetComponent <Dropdown> ();

                    //Clear the old options of the Dropdown menu
                    drpSoldados.ClearOptions();

                    //Add the options created in the List above
                    drpSoldados.AddOptions(m_DropOptions);
                    drpSoldados.value = 0;
                }
                else
                {
                    if (me.getUnits() == 0)
                    {
                        LogText.log("No se puede elegir como origen una casilla vacía!");
                    }
                    else
                    {
                        LogText.log("Elegida la casilla de la que mover");

                        origen = this;
                    }
                }
                /*User selects this tile*/
            }
            else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) == true && Tile.origen != null)
            {
                if (main_behavior.estado != false)
                {
                    LogText.log("En este turno no se pueden mover tropas!");
                }
                else if ((origen.me != me))
                {
                    Tile.droppeddown = false;

                    List <string> m_DropOptions = new List <string> ();
                    for (int i = 0; i <= origen.me.getUnits(); i++)
                    {
                        m_DropOptions.Add(i.ToString());
                    }

                    GameObject panelControl = GameObject.Find("PanelControllerB");
                    panel = panelControl.GetComponent <PanelSoldado> ();
                    panel.DoVisible();

                    valueDropdown = 0;

                    Dropdown drpSoldados = GameObject.Find("drpSoldadosB").GetComponent <Dropdown> ();
                    //Clear the old options of the Dropdown menu
                    drpSoldados.ClearOptions();
                    //Add the options created in the List above
                    drpSoldados.AddOptions(m_DropOptions);
                    drpSoldados.value = 0;

                    yield return(new WaitForSeconds(1.2f));

                    if (valueDropdown == 0)
                    {
                        yield return(new WaitForSeconds(0.3f));

                        bool stop = true;
                        while (stop)
                        {
                            if (valueDropdown > 0)
                            {
                                stop = false;
                            }
                            else
                            {
                                yield return(new WaitForSeconds(0.2f));
                            }
                        }
                    }
                    //print ("value drop " + valueDropdown);

                    ret = origen.me.put_on_hold(valueDropdown);
                    if (ret == true)
                    {
                        //print ("x origen "+origen.transform.position.x);
                        Vector3 newPos = new Vector3(me.objeto3d.transform.position.x + 80, cameraB.transform.position.y - 20, me.objeto3d.transform.position.z);
                        Vector3 newRot = new Vector3(172, 90, 180);
                        cameraB.transform.position    = newPos;
                        cameraB.transform.eulerAngles = newRot;
                        cameraB.transform.LookAt(me.objeto3d.transform);

                        origen.me.move_Units(me);

                        origen.updateCount();
                        origen.paintUnits();

                        temporal = movable(valueDropdown);

                        Vector3 dirOrigen = getDirection(origen.me);
                        float   angle     = Mathf.Atan2(dirOrigen.x, dirOrigen.z) * Mathf.Rad2Deg;

                        temporal.rotate(angle);

                        temporal.playMove();
                        for (int i = 0; i < 20; i++)
                        {
                            temporal.move(dirOrigen);
                            yield return(new WaitForSeconds(0.05f));
                        }
                        temporal.resetRotation();

                        temporal.deinstantiate();
                        paintUnits();

                        cameraB.transform.position    = initPosCamera;
                        cameraB.transform.eulerAngles = initRotCamera;
                        cameraB.enabled    = false;
                        mainCamera.enabled = true;
                    }
                }
                Tile.reset_origen();

                /*User deselects this tile or moves to another tile*/
            }
            else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) != true && Tile.origen != null)
            {
                /*Attack!*/


                if (main_behavior.estado != true)
                {
                    LogText.log("En este turno no se pueden atacar territorios!");
                }
                else
                {
                    int unidades        = origen.me.getUnits();
                    int numero_de_dados = 0;
                    if (unidades > 3)
                    {
                        unidades = 3;
                    }

                    temporal = movable(unidades);

                    origen.me.put_on_hold(unidades);
                    origen.paintUnits();
                    origen.updateCount();
                    Vector3 dirOrigen = getDirection(origen.me);
                    float   angle     = Mathf.Atan2(dirOrigen.x, dirOrigen.z) * Mathf.Rad2Deg;

                    temporal.rotate(angle);

                    Vector3 newPos = new Vector3(me.objeto3d.transform.position.x + 80, cameraB.transform.position.y - 20, me.objeto3d.transform.position.z);
                    Vector3 newRot = new Vector3(172, 90, 180);
                    cameraB.transform.position    = newPos;
                    cameraB.transform.eulerAngles = newRot;
                    cameraB.transform.LookAt(me.objeto3d.transform);

                    for (int i = 0; i < 10; i++)
                    {
                        temporal.move(dirOrigen);
                        yield return(new WaitForSeconds(0.1f));
                    }


                    unidades = me.getUnits();
                    GameObject diceControl = GameObject.Find("SwipeController");
                    LogText.log("Espera... Lanzando Dados... Suerte!!!");
                    do
                    {
                        numero_de_dados = temporal.getUnits();

                        if (unidades != 0)
                        {
                            if (unidades > 2)
                            {
                                unidades = 2;
                            }

                            numero_de_dados += unidades;

                            DiceSwipeControl.set_num_dices(numero_de_dados);

                            diceControl.GetComponent <DiceSwipeControl> ().manualStart();
                            army.put_on_hold(unidades);
                            //Recovering dices result
                            yield return(new WaitForSeconds(10.0f));

                            bool stop = true;
                            print("antes de recuperar ");
                            List <int> resultados = DiceSwipeControl.results;
                            int        repet      = 1;
                            print("antes if " + resultados.Count);
                            if (resultados == null || resultados.Count != numero_de_dados)
                            {
                                print("en el  if ");
                                while (stop)
                                {
                                    yield return(new WaitForSeconds(0.2f));

                                    resultados = DiceSwipeControl.results;
                                    if (resultados != null && resultados.Count == numero_de_dados)
                                    {
                                        stop = false;
                                    }


                                    if (repet == 5)
                                    {
                                        stop = false;
                                    }
                                    repet++;
                                }
                                print("resultado if tile " + resultados.Count);

                                if (resultados == null || resultados.Count == 0)
                                {
                                    resultados = new List <int>(new int[] { 1, 1, 1, 1, 1 });
                                }
                            }
                            else
                            {
                                print("resultado tile " + resultados.Count + " " + numero_de_dados);
                                int   atacante   = temporal.getUnits();
                                int   breakpoint = atacante > unidades ? unidades : atacante;
                                int[] attacker   = new int[breakpoint];
                                int[] defender   = new int[breakpoint];
                                bool  def        = true;

                                for (int i = 0; i < breakpoint; i++)
                                {
                                    for (int j = breakpoint; j < breakpoint * 2; j++)
                                    {
                                        if (resultados [i] >= resultados [j])
                                        {
                                            def = false;
                                            break;
                                        }
                                    }
                                    if (def == false)
                                    {
                                        me.kill_unit();
                                        unidades--;
                                    }
                                    else
                                    {
                                        temporal.kill_unit();
                                    }

                                    def = true;
                                }
                            }
                        }
                    } while(temporal.getUnits() > 0 && me.getUnits() > 0);

                    string msj = " ";
                    if (temporal.getUnits() <= 0)
                    {
                        army.playAttack();
                        LogText.log("Has perdido la batalla");
                        msj = " No has podido conquistar el territorio y has perdido a los soldados con los que has luchado.";
                    }
                    else
                    {
                        temporal.playAttack();
                        LogText.log("Has ganado la batalla");


                        me.conquer(origen.me.getOwner(), temporal.getUnits());
                        msj = "Enhorabuena, has conquistado un territorio más.\nTienes " + StartOptions.partida.casillas_jugador() + " de los " + StartOptions.partida.casillas_para_fin() + " que hacen falta para ganar.";
                        set_color();
                    }
                    me.reset_hold();
                    temporal.resetRotation();
                    temporal.deinstantiate();

                    paintUnits();
                    Tile.reset_origen();
                    LogText.log(msj + "\nSi quieres puedes volver a atacar, selecciona la casilla desde la que hacerlo.");

                    cameraB.enabled               = false;
                    cameraB.transform.position    = initPosCamera;
                    cameraB.transform.eulerAngles = initRotCamera;
                    mainCamera.enabled            = true;
                }
            }
            else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) != true && Tile.origen == null)
            {
                LogText.log("No se pueden seleccionar casillas rivales!");
            }
            else
            {
                if (main_behavior.estado == false)
                {
                    LogText.log("No se puede atacar en turno de movimiento!");
                }
                else
                {
                    LogText.log("No se puede mover en turno de ataque!");
                }
            }
            Tile.performing = false;
            updateCount();
            cameraB.enabled               = false;
            cameraB.transform.position    = initPosCamera;
            cameraB.transform.eulerAngles = initRotCamera;
            mainCamera.enabled            = true;
        }
        else
        {
            LogText.warning("Performing action");
        }
        yield return(0);

        StartOptions.partida.FinPartida();
    }
示例#4
0
    //Se usa para inicializar la partida
    void Start()
    {
        LogText.log("La partida ha comenzado!");

        /**Leer información del jugador*/
        index_player  = 0;
        units_hold[0] = 0;
        units_hold[1] = 0;
        units_hold[2] = 0;
        units_hold[3] = 0;
        reparte       = true;
        turno         = 0;
        estado        = false;
        jugadores     = new ArrayList();
        casas         = new ArrayList();
        casillas      = new ArrayList();
        mypool        = new ArrayList();

        if (PlayerPrefs.HasKey("Jugador1"))
        {
            jugadores.Add(PlayerPrefs.GetString("Jugador1"));
            casas.Add("Baratheon");
            mypool.Add(new Pool("Baratheon"));
            //Debug.Log ("Creado Pool Baratheon");
        }

        if (PlayerPrefs.HasKey("Jugador2"))
        {
            jugadores.Add(PlayerPrefs.GetString("Jugador2"));
            casas.Add("Lannister");
            mypool.Add(new Pool("Lannister"));
            //Debug.Log ("Creado Pool Lannister");
        }

        if (PlayerPrefs.HasKey("Jugador3"))
        {
            jugadores.Add(PlayerPrefs.GetString("Jugador3"));
            casas.Add("Stark");
            mypool.Add(new Pool("Stark"));
            //Debug.Log ("Creado Pool Stark");
        }

        if (PlayerPrefs.HasKey("Jugador4"))
        {
            jugadores.Add(PlayerPrefs.GetString("Jugador4"));
            casas.Add("Targaryen");
            mypool.Add(new Pool("Targaryen"));
            //Debug.Log ("Creado Pool Targaryen");
        }

        /*Rellena la información de las casillas*/
        GameObject[] allObjects = GameObject.FindGameObjectsWithTag("Provincias");


        foreach (GameObject object3d in allObjects)
        {
            /*Extract name*/
            string name = object3d.name;
            string owner;

            float prob   = Random.Range(0f, 1f);
            float probJ1 = 0f;
            float probJ2 = 0f;
            float probJ3 = 0f;
            float probJ4 = 0f;
            /*Use probability to assign tile to a player using a russian roulette approach*/
            switch (casas.Count)
            {
            case 2:
                probJ1 = 0.5f;
                probJ2 = 1f;

                break;

            case 3:
                probJ1 = 0.33f;
                probJ2 = 0.67f;
                probJ3 = 1f;
                break;

            case 4:
                probJ1 = 0.25f;
                probJ2 = 0.5f;
                probJ3 = 0.75f;
                probJ4 = 1f;
                break;
            }

            if (prob < probJ1)
            {
                owner = jugadores [0].ToString();
                units_hold[0]++;                 //Así el jugador inicial puede asignar soldados también
            }
            else if (prob < probJ2)
            {
                owner = jugadores [1].ToString();
            }
            else if (prob < probJ3)
            {
                owner = jugadores [2].ToString();
            }
            else
            {
                owner = jugadores [3].ToString();
            }
            int units = (int)Random.Range(1.0f, 3.9f);

            casillas.Add(new Casilla(name, owner, units));
        }
        units_hold[0] /= 3;         //El número bueno ya
        /*Cargamos el grafo*/

        StreamReader sr = new StreamReader("Assets/Grafo.txt");

        while (sr.Peek() > -1)
        {
            string linea = sr.ReadLine();

            string[] provincias = linea.Split('\\');
            Casilla  actual     = null;

            List <Casilla> adyacent = new List <Casilla> ();

            foreach (Casilla casilla in casillas)
            {
                string provincia = casilla.getName();
                //Debug.Log(provincias[0] + " " + provincia);
                if (provincia.Contains(provincias [0]))
                {
                    actual = casilla;
                    break;
                }
            }

            foreach (Casilla casilla in casillas)
            {
                string provincia = casilla.getName();

                for (int i = 2; i < provincias.Length; i++)
                {
                    if (provincia.Contains(provincias [i]))
                    {
                        adyacent.Add(casilla);
                    }
                }
            }

            actual.setAdyacents(adyacent);
        }

        //Establece el estado inicial
        index_player = 0;
        string nombre_jugador = jugadores[0].ToString();
        string nombre_casa    = casas[0].ToString();
        string color;
        string imagen_mostrar = "";

        if (nombre_casa == "Baratheon")
        {
            color          = "amarillo";
            imagen_mostrar = "house-baratheon";
        }
        else if (nombre_casa == "Lannister")
        {
            color          = "rojo";
            imagen_mostrar = "house-lannister";
        }
        else if (nombre_casa == "Stark")
        {
            color          = "blanco";
            imagen_mostrar = "house-stark";
        }
        else
        {
            color          = "negro";
            imagen_mostrar = "house-targaryen";
        }

        pintarCasa(nombre_casa, imagen_mostrar);

        LogText.log("Empieza la partida " + nombre_jugador + ", representando a la casa " + nombre_casa + " con el color " + color + ".\nPara comenzar el turno tienes " + units_hold[0] + " unidades nuevas para colocar en tus territorios.\nSelecciona un territorio.");
    }