Exemplo n.º 1
0
        // se crea el grafo a partir de la matriz logica
        private void CreateGraph()
        {
            graph = new EdgeWeightedDigraph((int)(rows * columns)); // adyacencias de cada casilla (derecha, abajo, izquierda, arriba)
            Vector2[] directions = { new Vector2(0, 1), new Vector2(1, 0), new Vector2(0, -1), new Vector2(-1, 0) };

            // si la casilla no es de tipo Roca, le establecemos union
            // con todas sus adyacentes que tampoco sean de tipo Roca
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    if (puzzle.GetType(i, j) != (int)TipoCasilla.Rocas)
                    {
                        foreach (Vector2 v in directions)
                        {
                            int ni = i + (int)v.y;
                            int nj = j + (int)v.x;

                            if (ni >= 0 && ni < rows && nj >= 0 && nj < columns)
                            {
                                if (puzzle.GetType(ni, nj) != (int)TipoCasilla.Rocas)
                                {
                                    DirectedEdge a = new DirectedEdge((int)(j + columns * i), (int)(nj + columns * ni), values[puzzle.GetType(ni, nj)]);
                                    graph.AddEdge(a);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        // genera las casillas del tipo que le indique puzzle (matriz logica de tipos)
        private void GenerateCasillas(TankPuzzle puzzle)
        {
            if (puzzle == null)
            {
                throw new ArgumentNullException(nameof(puzzle));
            }

            var rows    = casillas.GetLength(0);
            var columns = casillas.GetLength(1);

            bool tankInitialized = false;

            for (int r = 0; r < rows; r++)
            {
                for (int c = 0; c < columns; c++)
                {
                    Casilla casilla = casillas[r, c];
                    if (casilla == null)
                    {
                        casilla = Instantiate(casillaPrefab, new Vector3(-((casillas.GetLength(1) / 2.0f) * POSITION_FACTOR_C - (POSITION_FACTOR_C / 2.0f)) + c * POSITION_FACTOR_C, 0,
                                                                         (casillas.GetLength(0) / 2.0f) * POSITION_FACTOR_R - (POSITION_FACTOR_R / 2.0f) - r * POSITION_FACTOR_R),
                                              Quaternion.identity);

                        casillas[r, c] = casilla;
                    }

                    casilla.position = new Position((uint)r, (uint)c);
                    casilla.Initialize(this, (uint)puzzle.GetType(r, c));

                    if (!tankInitialized && puzzle.GetType(r, c) == 0)
                    {
                        GameManager.instance.setTankPosition(casilla.transform.position);
                        puzzle.InitialTankPosition = casilla.position;
                        puzzle.TankPosition        = puzzle.InitialTankPosition;
                        tankInitialized            = true;
                    }
                }
            }
        }