示例#1
0
文件: juego.cs 项目: crDTbD/wumpus
    public List <CasillaNodo> EncontrarVecindad(CasillaNodo nodoactual) //retorna la vecindad de la casilla nodoactual
    {
        List <CasillaNodo> ListaDeVecinos = new List <CasillaNodo>();

        // Arriba
        if (nodoactual.y + 1 < grilla.GetHeight())
        {
            ListaDeVecinos.Add(GetNodo(nodoactual.x, nodoactual.y + 1));                                        // si no se sale abajo añada el nodo de abajo a ListaDeVecinos
        }
        //Derecha
        if (nodoactual.x + 1 < grilla.GetWidth())
        {
            ListaDeVecinos.Add(GetNodo(nodoactual.x + 1, nodoactual.y));                                       // si no se sale a la derecha añada el nodo de la derecha a ListaDeVecinos
        }
        // Abajo
        if (nodoactual.y - 1 >= 0)
        {
            ListaDeVecinos.Add(GetNodo(nodoactual.x, nodoactual.y - 1));                        // si no se sale a la arriba añada el nodo de arriba a ListaDeVecinos
        }
        //Izquierda
        if (nodoactual.x - 1 >= 0)
        {
            ListaDeVecinos.Add(GetNodo(nodoactual.x - 1, nodoactual.y));                        // si no se sale a la izquierda añada el nodo de la izquierda a ListaDeVecinos
        }
        return(ListaDeVecinos);
    }
示例#2
0
 public CasillaNodo(Grilla <CasillaNodo> grilla, int x, int y) //constructor de la clase nodo
 {
     this.grilla        = grilla;
     this.x             = x;
     this.y             = y;
     this.Grilla_Real   = 0;
     this.Grilla_Agente = -2;
     this.Padre         = null;
     Visitado           = false;
 }
示例#3
0
文件: juego.cs 项目: crDTbD/wumpus
    private void EvaluarVecindadEfectos(CasillaNodo nodoactual)
    {
        if (nodoactual.Grilla_Real == 0) // si en la real no hay nada -> la vecindad es segura
        {
            foreach (CasillaNodo nodoVecino in EncontrarVecindad(nodoactual))
            {
                nodoVecino.CrearPosible(0);
                Debug.Log("vecindad segura");
            }
        }

        if (nodoactual.Grilla_Real == 1) // si en la real hay un pozo c muere
        {
            // c muere
        }

        if (nodoactual.Grilla_Real == 2) // si en la real hay un wumpus c muere
        {
            // c muere
        }

        if (nodoactual.Grilla_Real == 3) // si en la real hay brisa, la vecindad es pozo posible
        {
            foreach (CasillaNodo nodoVecino in EncontrarVecindad(nodoactual))
            {
                if (nodoVecino.Grilla_Agente != 0)
                {
                    nodoVecino.CrearPosible(1);
                }
            }
        }

        if (nodoactual.Grilla_Real == 4) // si en la real hay edor, la vecindad es wumpus posible
        {
            foreach (CasillaNodo nodoVecino in EncontrarVecindad(nodoactual))
            {
                if (nodoVecino.Grilla_Agente != 0)
                {
                    nodoVecino.CrearPosible(2);
                }
            }
        }

        if (nodoactual.Grilla_Real == 5) // si en la real hay oro, somos ricos gg 100% real
        {
            oroencontrado = true;
        }
    }
    public void TakeSnapshot(Grilla <CasillaNodo> grid, CasillaNodo current, List <CasillaNodo> openList, List <CasillaNodo> closedList)
    {
        GridSnapshotAction gridSnapshotAction = new GridSnapshotAction();

        gridSnapshotAction.AddAction(HideNodeVisuals);

        for (int x = 0; x < grid.GetWidth(); x++)
        {
            for (int y = 0; y < grid.GetHeight(); y++)
            {
                CasillaNodo CasillaNodo = grid.GetGridObject(x, y);


                Vector3 gridPosition   = new Vector3(CasillaNodo.x, CasillaNodo.y) * grid.GetCellSize() + Vector3.one * grid.GetCellSize() * .5f;
                bool    isCurrent      = CasillaNodo == current;
                bool    isInOpenList   = openList.Contains(CasillaNodo);
                bool    isInClosedList = closedList.Contains(CasillaNodo);
                int     tmpX           = x;
                int     tmpY           = y;

                gridSnapshotAction.AddAction(() => {
                    Transform visualNode = visualNodeArray[tmpX, tmpY];

                    Color backgroundColor = UtilsClass.GetColorFromString("636363");

                    if (isInClosedList)
                    {
                        backgroundColor = new Color(1, 0, 0);
                    }
                    if (isInOpenList)
                    {
                        backgroundColor = UtilsClass.GetColorFromString("009AFF");
                    }
                    if (isCurrent)
                    {
                        backgroundColor = new Color(0, 1, 0);
                    }

                    visualNode.Find("sprite").GetComponent <SpriteRenderer>().color = backgroundColor;
                });
            }
        }

        gridSnapshotActionList.Add(gridSnapshotAction);
    }
示例#5
0
文件: juego.cs 项目: crDTbD/wumpus
 private void Start()
 {
     iniciargrilla(20, 10);
     //pathfindingDebugStepVisual.Setup(grilla);
     pathfindingVisual.SetGrid(grilla);
     pathfindingVisual1.SetGrid(grilla);
     pathfindingVisual2.SetGrid(grilla);
     pathfindingVisual3.SetGrid(grilla);
     pathfindingVisual4.SetGrid(grilla);
     pathfindingVisual5.SetGrid(grilla);
     pathfindingVisualP.SetGrid(grilla);
     pathfindingVisualP1.SetGrid(grilla);
     pathfindingVisualP2.SetGrid(grilla);
     pathfindingVisualP3.SetGrid(grilla);
     StartNode         = grilla.GetGridObject(0, 0);
     VecindadValida    = new List <CasillaNodo>(); // casillas de la vecindad que puede visitar
     SegurosSinVisitar = new List <CasillaNodo> {
         StartNode
     };                                                       // casillas seguras posibles sin visitar
     CaminosVisitados = new List <CasillaNodo>();
     NodoActual       = grilla.GetGridObject(0, 0);
     NodoActual.CrearPosible(-1);
 }
示例#6
0
 public void Crearpadre(CasillaNodo padre)
 {
     this.Padre = padre;
     grilla.TriggerGridObjectChanged(x, y);
 }
示例#7
0
文件: juego.cs 项目: crDTbD/wumpus
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            EvaluarVecindadEfectos(NodoActual);
            if (oroencontrado == false)
            {
                if (SegurosSinVisitar.Count > 0) // mientras que haya casillas seguras sin visitar
                {
                    Debug.Log("movimiento");

                    SegurosSinVisitar.Remove(NodoActual);
                    NodoActual.visitar(true);


                    //VecindadValida = ValorarVecindad(NodoActual);

                    foreach (CasillaNodo NodoValido in EncontrarVecindad(NodoActual)) // para cada vecino valido ....
                    {
                        Debug.Log("foeach");



                        if (NodoValido.Grilla_Agente == 0)
                        {
                            Debug.Log("es seguro el paso");

                            if (NodoValido.Visitado)
                            {
                                Debug.Log("ya esta visitado y es una mierda");
                                continue;
                            }
                            else
                            {
                                VecindadValida.Add(NodoValido);
                                SegurosSinVisitar.Add(NodoValido);

                                //Debug.Log("añade vecindad");
                                //if (!SegurosSinVisitar.Contains(NodoValido))
                                //{
                                //    Debug.Log("añade nodo");
                                //    SegurosSinVisitar.Add(NodoValido);
                                //}
                            }
                        }
                        else
                        {
                            Debug.Log("no entiendo");
                        }
                    }


                    if (VecindadValida.Count > 0) // si la vecindad tiene un nodo seguro no visitado ....
                    {
                        Debug.Log("se mueve");
                        NodoActual.CrearPosible(0);
                        CaminosVisitados.Add(NodoActual);
                        aux        = NodoActual;
                        NodoActual = EvaluarVecindadMov(VecindadValida); // el nodo al que se mueve es el mejor que determina evaluarvecindad ... osea el primero que encuentra seguro en orden horario
                        NodoActual.Crearpadre(aux);
                        NodoActual.CrearPosible(-1);
                    }
                    else
                    {
                        Debug.Log("no hay");
                        NodoActual.CrearPosible(0);
                        //CaminosVisitados.Add(NodoActual);



                        NodoActual = NodoActual.Padre;
                        NodoActual.CrearPosible(-1);
                    }
                    VecindadValida.Clear();
                }
                else
                {
                    Debug.Log("efesota");
                }
            }
            else
            {
                Debug.Log("Ganaste");
            }
        }



        if (EditorType == 0)
        {
            if (Input.GetMouseButtonDown(0))
            {
                Vector3 mouseWordlPosition = UtilsClass.GetMouseWorldPosition();
                grilla.GetXY(mouseWordlPosition, out int x, out int y);
                if (grilla.GetGridObject(x, y).Grilla_Real != 1)
                {
                    grilla.GetGridObject(x, y).CrearReal(1);
                    Debug.Log("pozo hecho");

                    foreach (CasillaNodo NodoValido in EncontrarVecindad(grilla.GetGridObject(x, y)))
                    {
                        NodoValido.CrearReal(3);
                    }
                }
                else
                {
                    grilla.GetGridObject(x, y).CrearReal(0);
                    foreach (CasillaNodo NodoValido in EncontrarVecindad(grilla.GetGridObject(x, y)))
                    {
                        NodoValido.CrearReal(0);
                    }
                    Debug.Log("retirado");
                }
            }
        }
        if (EditorType == 1)
        {
            if (Input.GetMouseButtonDown(0))
            {
                Vector3 mouseWordlPosition = UtilsClass.GetMouseWorldPosition();
                grilla.GetXY(mouseWordlPosition, out int x, out int y);
                if (grilla.GetGridObject(x, y).Grilla_Real != 2)
                {
                    if (WumpusExiste == false)
                    {
                        WumpusExiste = true;
                    }
                    else
                    {
                        grilla.GetGridObject(wumpus[0], wumpus[1]).CrearReal(0);
                        foreach (CasillaNodo NodoValido in EncontrarVecindad(grilla.GetGridObject(wumpus[0], wumpus[1])))
                        {
                            NodoValido.CrearReal(0);
                        }
                    }
                    grilla.GetGridObject(x, y).CrearReal(2);
                    wumpus[0] = x;
                    wumpus[1] = y;
                    foreach (CasillaNodo NodoValido in EncontrarVecindad(grilla.GetGridObject(x, y)))
                    {
                        NodoValido.CrearReal(4);
                    }
                    Debug.Log("wumpus hecho");
                }
                else
                {
                    grilla.GetGridObject(x, y).CrearReal(0);
                    foreach (CasillaNodo NodoValido in EncontrarVecindad(grilla.GetGridObject(x, y)))
                    {
                        NodoValido.CrearReal(0);
                    }
                    Debug.Log("wumpus retirado");
                    WumpusExiste = false;
                }
            }
        }

        if (EditorType == 2)
        {
            if (Input.GetMouseButtonDown(0))
            {
                Vector3 mouseWordlPosition = UtilsClass.GetMouseWorldPosition();
                grilla.GetXY(mouseWordlPosition, out int x, out int y);
                if (grilla.GetGridObject(x, y).Grilla_Real != 5)
                {
                    if (OroExiste == false)
                    {
                        OroExiste = true;
                    }
                    else
                    {
                        grilla.GetGridObject(oro[0], oro[1]).CrearReal(0);
                        foreach (CasillaNodo NodoValido in EncontrarVecindad(grilla.GetGridObject(oro[0], oro[1])))
                        {
                            NodoValido.CrearReal(0);
                        }
                    }
                    grilla.GetGridObject(x, y).CrearReal(5);
                    oro[0] = x;
                    oro[1] = y;
                    Debug.Log("oro hecho");
                }
                else
                {
                    grilla.GetGridObject(x, y).CrearReal(0);
                    OroExiste = false;
                    Debug.Log("oro retirado");
                }
            }
        }
    }