Ejemplo n.º 1
0
 public Habitacion(int iX, int iY, TipoCasilla iTipo) //Constructor
 {
     X          = iX;
     Y          = iY;
     Tipo       = iTipo;
     Puerta_Aba = Puerta_Arr = Puerta_Izq = Puerta_Der = false; //Todas inician cerradas
 }
Ejemplo n.º 2
0
 public CasillaGrid(CasillaGrid casilla)
 {
     posicion    = casilla.getPosicion();
     coordenadas = casilla.getPosicionGrid();
     adyacentes  = casilla.getAdyacentes();
     tipo        = casilla.getTipoCasilla();
 }
Ejemplo n.º 3
0
        // actualiza el grafo tras haber clickado sobre una casilla (cambia aristas de alrededor, etc)
        public void updateGraph(TipoCasilla prevType, double prevValue, int r, int c)
        {
            Vector2[] directions = { new Vector2(0, 1), new Vector2(1, 0), new Vector2(0, -1), new Vector2(-1, 0) };
            foreach (Vector2 v in directions)
            {
                int ni = r + (int)v.y;
                int nj = c + (int)v.x;

                if (ni >= 0 && ni < rows && nj >= 0 && nj < columns)
                {
                    if (puzzle.GetType(r, c) == (int)TipoCasilla.Rocas)
                    {
                        graph.deleteEdge(new DirectedEdge((int)(c + r * columns), (int)(nj + ni * columns), values[puzzle.GetType(ni, nj)]));
                        graph.deleteEdge(new DirectedEdge((int)(nj + ni * columns), (int)(c + r * columns), prevValue));
                    }
                    else if (prevType != TipoCasilla.Rocas)
                    {
                        graph.modifyEdge(new DirectedEdge((int)(nj + ni * columns), (int)(c + r * columns), values[puzzle.GetType(r, c)]));
                    }
                    else if (puzzle.GetType(ni, nj) != (int)TipoCasilla.Rocas)
                    {
                        graph.AddEdge(new DirectedEdge((int)(c + r * columns), (int)(nj + ni * columns), values[puzzle.GetType(ni, nj)]));
                        graph.AddEdge(new DirectedEdge((int)(nj + ni * columns), (int)(c + r * columns), values[puzzle.GetType(r, c)]));
                    }
                }
            }
        }
Ejemplo n.º 4
0
        // Notifica el intento de movimiento al tablero de bloques (si lo hay), cuando se recibe un clic completo de ratón (apretar y soltar)
        // Podría reaccionarse con un sonido si el intento falla, aunque ahora no se hace nada
        // La he puesto pública para que se puedan simular pulsaciones sobre un bloque desde el gestor
        public bool OnMouseUpAsButton()
        {
            if (board.getManager().getTank().ready())
            {
                if (board.getManager().getTank().isClicked())
                {
                    //IA
                    //aestrella??????????
                    //board.getManager ().getTank ().setCurrent(this.position);
                    board.getManager().AESTRELLA(this.position);
                    Debug.Log("IA TIME");
                    return(true);
                }
                else if (this.position != board.getManager().getTank().getCurrent())
                {
                    //Cambio de tipo
                    if (this.type != TipoCasilla.F)
                    {
                        if (this.type == TipoCasilla.R)
                        {
                            this.type = TipoCasilla.L;
                        }
                        else
                        {
                            this.type++;
                        }

                        board.getManager().changeMatrix(this.position, (uint)type);
                    }

                    changeColor();
                    changeText();
                    return(false);
                }
            }
            return(false);

            /*if (board == null) throw new InvalidOperationException("This object has not been initialized");
             *
             * Debug.Log("Trying to move " + ToString() + "...");
             * if (board.CanMove(this)) {
             *
             *  board.UserInteraction(); // Aviso de que lo he tocado para que se pongan los contadores a cero (por si contenían algo)
             *  MovableBlock block = board.Move(this, BlockBoard.USER_DELAY);
             *  Debug.Log(ToString() + " was moved.");
             *
             *  return true;
             * }
             *
             * Debug.Log(ToString() + " cannot be moved.");
             * return false;*/
        }
Ejemplo n.º 5
0
        public Position position; // posicion logica dentro de la matriz logica de puzzle

        public void Initialize(Tablero tablero, uint type)
        {
            if (tablero == null)
            {
                throw new ArgumentNullException(nameof(tablero));
            }

            this.tablero      = tablero;
            this.type         = (TipoCasilla)type;
            this.initialType  = this.type;
            this.value        = GameManager.instance.values[type];
            this.initialValue = this.value;

            UpdateColor();
        }
Ejemplo n.º 6
0
        // al ser pulsado cambia al siguiente tipo (al llegar al ultimo da la vuelta)
        public bool OnMouseUpAsButton()
        {
            if (tablero == null)
            {
                throw new InvalidOperationException("This object has not been initialized");
            }

            // si el tanque no esta ya en movimiento
            if (!GameManager.instance.isTankMoving())
            {
                // si el tanque esta seleccionado, empezamos a moverlo (esta casilla sera el destino)
                if (GameManager.instance.isTankSelected())
                {
                    if (this.type != TipoCasilla.Rocas)
                    {
                        GameManager.instance.resolveGame((int)this.position.GetRow(), (int)this.position.GetColumn());
                    }
                    else
                    {
                        StartCoroutine(GameManager.instance.changeCanMove(2.0f));
                    }
                }
                // si no, esta casilla cambiara al tipo correspondiente
                else
                {
                    double      prevValue = this.value;
                    TipoCasilla prevType  = this.type;

                    if ((uint)this.type + 1 > 3)
                    {
                        this.type = (TipoCasilla)0;
                    }
                    else
                    {
                        this.type++;
                    }
                    this.value = GameManager.instance.values[(uint)this.type];

                    UpdateColor();

                    GameManager.instance.updatePuzzle(this.type, (int)this.position.GetRow(), (int)this.position.GetColumn());
                    GameManager.instance.updateGraph(prevType, prevValue, (int)this.position.GetRow(), (int)this.position.GetColumn());
                }
            }
            return(false);
        }
Ejemplo n.º 7
0
    /// <summary>
    /// Lo que hace este metodo es que cuando movemos la serpiente hacia alguna dirección el último elemento de la cola
    /// lo trasladamos a la cabeza haciendo el efecto de que se va moviendo de posicion en posicion
    /// </summary>
    /// <returns></returns>
    private IEnumerator Movimiento()
    {
        WaitForSeconds espera = new WaitForSeconds(0.15f);

        while (true)
        {
            Vector3     nuevaPosicion  = cabeza.transform.position + direccion; // la nueva posicion del bloque siguiente será
            TipoCasilla casillaAOcupar = ObtenerMapa(nuevaPosicion);

            if (casillaAOcupar == TipoCasilla.Obstaculo) //si la casilla siguiente es un obstaculo
            {
                Muerte();
                yield return(new WaitForSeconds(5));                              //espera 5 segundos

                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //recarga la escena
                yield break;                                                      //sal de la corrutina
            }
            else
            {
                GameObject parteCuerpo = new GameObject();
                if (casillaAOcupar == TipoCasilla.Item)
                {
                    parteCuerpo = NuevoBloque(nuevaPosicion.x, nuevaPosicion.y);
                    MoverItemAPosicionAleatoria();
                    IncrementarPuntos();
                }
                else
                {
                    parteCuerpo = cuerpo.Dequeue();                                        //sacara la primera de la cola
                    EstablecerMapa(parteCuerpo.transform.position, TipoCasilla.Vacio);     //antes de moverlo está vacío
                    parteCuerpo.transform.position = nuevaPosicion;                        // a su posicion le pondrá la siguiente posicion que le corresponde
                    EstablecerMapa(parteCuerpo.transform.position, TipoCasilla.Obstaculo); //después de moverlo ya lo hemos rellenado
                    cuerpo.Enqueue(parteCuerpo);                                           //lo encolamos el siguiente cacho
                }

                cabeza = parteCuerpo; //ahora la cabeza será esa pieza

                yield return(espera);
            }
        }
    }
Ejemplo n.º 8
0
    //Esto es una corrutina
    private IEnumerator Movimiento()
    {
        //Definimos una vartiable local
        WaitForSeconds espera = new WaitForSeconds(0.15f);

        while (true)
        {
            //calculamos la nueva posicion del objeto donde esta la cola
            Vector3 nuevaPosicion = cabeza.transform.position + direccion;

            //esta variable tipocasilla revisa si esta vacia o con obstaculo
            TipoCasilla casillaAOcupar = ObtenerMapa(nuevaPosicion);
            if (casillaAOcupar == TipoCasilla.Obstaculo)
            {
                Debug.Log("Muerto!");
                yield return(new WaitForSeconds(5));

                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
                yield break;
            }
            else
            {
                /*obtenemos el último elemento o el que más tiempo lleva en la
                 * lista de los que componen el cuerpo*/
                GameObject parteCuerpo = cuerpo.Dequeue();
                //establecemos la posición antes de moverse
                EstablecerMapa(parteCuerpo.transform.position, TipoCasilla.Vacio);
                parteCuerpo.transform.position = nuevaPosicion;
                //aquí ponemos pared ya con el obstaculo al haberse movido
                EstablecerMapa(nuevaPosicion, TipoCasilla.Obstaculo);

                cuerpo.Enqueue(parteCuerpo);

                cabeza = parteCuerpo;

                yield return(espera);
            }
        }
    }
Ejemplo n.º 9
0
        // Inicializa con el tablero de bloques y el texto (siempre que haya hijo con componente TextMesh), sólo si todavía no tiene puesto ningún tablero de bloques
        // El tablero de bloques recibido no puede ser nulo, pero el texto sí (representa un bloque no visible)
        public void Initialize(BlockBoard board, uint value)
        {
            if (board == null)
            {
                throw new ArgumentNullException(nameof(board));
            }

            this.board = board;
            this.gameObject.SetActive(value != null); // Se pondrá activo o no según el texto (esto lo hacemos para reactivar bloques que hubieran sido agujeros antes (en un reinicio)


            type = (TipoCasilla)value;
            if (value == 5)
            {
                print("HOLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
            }
            valor = valores [value];

            changeText();

            changeColor();

            //Debug.Log(ToString() + " initialized.");
        }
Ejemplo n.º 10
0
        }                                      //Tipo de casila

        public void Dibujar(TipoCasilla iTipo) //Se sobrecargó para hacer más legible el programa...
        {
            Tipo = iTipo;
            Dibujar(true);
        }
Ejemplo n.º 11
0
 private void cmbTipo_SelectedIndexChanged(object sender, EventArgs e)
 {
     UltimoTipo = Casilla.Tipo = (TipoCasilla)cmbTipo.SelectedItem;
 }
Ejemplo n.º 12
0
 private void EstablecerMapa(Vector3 posicion, TipoCasilla valor)
 {
     mapa[Mathf.RoundToInt(posicion.x), Mathf.RoundToInt(posicion.y)] = valor;
 }
Ejemplo n.º 13
0
 // establece su valor, tipo y color a los iniciales
 public void Reset()
 {
     GameManager.instance.updateGraph(this.type, this.value, (int)this.position.GetRow(), (int)this.position.GetColumn());
     this.value = this.initialValue; this.type = this.initialType; UpdateColor();
 }
Ejemplo n.º 14
0
 public void setTipoCasilla(TipoCasilla tipoCasilla)
 {
     tipo = tipoCasilla;
 }
Ejemplo n.º 15
0
 // actualiza la matriz logica
 public void updatePuzzle(TipoCasilla type, int r, int c)
 {
     puzzle.SetType(r, c, (uint)type);
 }