Beispiel #1
0
        public Area(Vetor2 posicaoMatriz)
        {
            this.posicaoMatriz = posicaoMatriz;
            tema            = "semtema";
            dungeonInserida = null;

            //Toda área possui uma dificuldade, logo será randomizado uma dificuldade:
            System.Random rnd        = new System.Random(Guid.NewGuid().GetHashCode());
            int           resultRand = rnd.Next(1, 411);

            if (resultRand >= 1 && resultRand <= 20)
            {
                this.dificuldade = 0;
            }
            if (resultRand >= 21 && resultRand <= 250)
            {
                this.dificuldade = 1;
            }
            if (resultRand >= 251 && resultRand <= 380)
            {
                this.dificuldade = 2;
            }
            if (resultRand >= 381 && resultRand <= 400)
            {
                this.dificuldade = 3;
            }
            if (resultRand >= 401 && resultRand <= 409)
            {
                this.dificuldade = 4;
            }
            if (resultRand >= 410)
            {
                this.dificuldade = 5;
            }
        }
Beispiel #2
0
        //
        public void CriarAreaBoss(Zona zonaInserida)
        {
            Vetor2 auxTamMin = new Vetor2(0, 0);
            Vetor2 auxTamMax = new Vetor2(0, 0);

            zonaInserida.bossArea      = new Area(null);
            zonaInserida.bossArea.boss = true;
            auxTamMin.x = Config.tamanhoMinDungeon.x;
            auxTamMin.y = Config.tamanhoMinDungeon.y;
            auxTamMax.x = Config.tamanhoMaxDungeon.x;
            auxTamMax.y = Config.tamanhoMaxDungeon.y;
            Config.tamanhoMinDungeon.x            = 100;
            Config.tamanhoMinDungeon.y            = 40;
            Config.tamanhoMaxDungeon.x            = 100;
            Config.tamanhoMaxDungeon.y            = 40;
            zonaInserida.bossArea.dungeonInserida = new Dungeon(zonaInserida.bossArea);
            zonaInserida.bossArea.dungeonInserida.dungeon[Config.tamanhoMaxDungeon.x / 2, 2].spawnsbPlayer = true;
            zonaInserida.bossArea.dungeonInserida.dungeon[Config.tamanhoMaxDungeon.x / 2, Config.tamanhoMaxDungeon.y - 3].spawnsbBoss = true;
            Config.tamanhoMinDungeon.x = auxTamMin.x;
            Config.tamanhoMinDungeon.y = auxTamMin.y;
            Config.tamanhoMaxDungeon.x = auxTamMax.x;
            Config.tamanhoMaxDungeon.y = auxTamMax.y;
            for (int i = 1; i < zonaInserida.bossArea.dungeonInserida.tamanhoDungeon.y - 1; i++)
            {
                for (int j = 1; j < zonaInserida.bossArea.dungeonInserida.tamanhoDungeon.x - 1; j++)
                {
                    if (zonaInserida.bossArea.dungeonInserida.dungeon[j, i].tipoCelula != "caminho")
                    {
                        zonaInserida.bossArea.dungeonInserida.dungeon[j, i].tipoCelula = "caminho";
                    }
                }
            }
        }
Beispiel #3
0
        public void CriarAreasSecretas(Zona zonaInserida, int totalAreasCriadas, Vetor2[] coordAreasSecretas, int nAreasSecretas, System.Random rnd)
        {
            int    nAdjacentes;
            bool   permissao = false;
            Vetor2 novaCoord;

            //numeroDeAreasRandomizado---
            if (totalAreasCriadas >= nAreasSecretas)
            {
                //interrompe a recursão.
                return;
            }
            else
            {
                while (permissao == false)
                {
                    int coordx = rnd.Next(1, Config.tamanhoMatrizZona.x - 2);
                    int coordy = rnd.Next(1, Config.tamanhoMatrizZona.y - 2);
                    nAdjacentes = 0;
                    //checa se a posicao da matriz está vazia
                    if (zonaInserida.zona[coordx, coordy] == null)
                    {
                        //checa os adjacentes:
                        //cima:
                        if (zonaInserida.zona[coordx, coordy - 1] != null)
                        {
                            nAdjacentes++;
                        }
                        //baixo
                        if (zonaInserida.zona[coordx, coordy + 1] != null)
                        {
                            nAdjacentes++;
                        }
                        //esquerda
                        if (zonaInserida.zona[coordx - 1, coordy] != null)
                        {
                            nAdjacentes++;
                        }
                        //direita
                        if (zonaInserida.zona[coordx + 1, coordy] != null)
                        {
                            nAdjacentes++;
                        }
                        if (nAdjacentes > 0)
                        {
                            //insere uma area na posicao da matriz.
                            novaCoord = new Vetor2(coordx, coordy);
                            zonaInserida.zona[coordx, coordy]         = new Area(novaCoord);
                            zonaInserida.zona[coordx, coordy].secreta = true;
                            totalAreasCriadas++;
                            coordAreasSecretas[totalAreasCriadas] = novaCoord;
                            permissao = true;
                        }
                    }
                }
                //Chama a recursão:
                CriarAreasSecretas(zonaInserida, totalAreasCriadas, coordAreasSecretas, nAreasSecretas, rnd);
            }
        }
Beispiel #4
0
        public bool spawnItem    = false;                       //identificar se já tem um item spawnando na celula;

        public Celula(Vetor2 coordCelulaDun, string tipoCelula)
        {
            //Pegando a cordenada da celula em questão.
            this.coordCelulaDun = coordCelulaDun;
            //Pegando o tipo da celula em questão.
            this.tipoCelula = tipoCelula;
            idCelula        = idCelula++;
        }
Beispiel #5
0
        public void PrimeiraArea(Zona zonaInserida)
        {
            Vetor2 coordAtual = new Vetor2((Config.tamanhoMatrizZona.x / 2), (Config.tamanhoMatrizZona.y / 2));
            Area   areaCriada = new Area(coordAtual);

            zonaInserida.zona[coordAtual.x, coordAtual.y] = areaCriada;
            coordAreas[0] = coordAtual;
        }
Beispiel #6
0
        //
        public void EscolherAreaInicial(Zona zonaInserida)
        {
            System.Random rnd              = new System.Random(Guid.NewGuid().GetHashCode());
            int           posicaoRandom    = rnd.Next(0, numeroDeAreas);
            Vetor2        coordAreaInicial = coordAreas[posicaoRandom];

            zonaInserida.zona[coordAreaInicial.x, coordAreaInicial.y].inicial = true;
            this.areaInicial = coordAreaInicial;
        }
Beispiel #7
0
        public void EscolherAreaFinal(Zona zonaInserida)
        {
            System.Random rnd  = new System.Random(Guid.NewGuid().GetHashCode());
            bool          loop = true;

            while (loop == true)
            {
                int    posicaoRandom  = rnd.Next(0, numeroDeAreas);
                Vetor2 coordAreaFinal = coordAreas[posicaoRandom];

                if (zonaInserida.zona[coordAreaFinal.x, coordAreaFinal.y].inicial == false)
                {
                    zonaInserida.zona[coordAreaFinal.x, coordAreaFinal.y].final = true;
                    this.areaFinal = coordAreaFinal;
                    loop           = false;
                }
            }
        }
Beispiel #8
0
        public void PreencherZona(Zona zonaInserida, Area areaPartida, int totalAreasCriadas, Vetor2[] coordAreas, int nAreas, System.Random rnd)
        {
            bool   permissao;
            Vetor2 novaCoord;

            //numeroDeAreasRandomizado---
            if (totalAreasCriadas >= nAreas)
            {
                //interrompe a recursão.
                return;
            }
            else
            {
                int porta = rnd.Next(0, 4);
                switch (porta)
                {
                //Não cria;
                case 0:
                    //baixo
                    //Cria;
                    novaCoord = new Vetor2(areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y + 1);
                    //Checa
                    permissao = true;
                    for (int i = 0; i <= totalAreasCriadas; i++)
                    {
                        if ((coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y) || (novaCoord.x >= Config.tamanhoMatrizZona.x || novaCoord.x >= Config.tamanhoMatrizZona.y) || (novaCoord.x < 1 || novaCoord.y < 1))
                        {
                            permissao = false;
                        }
                    }

                    //Insere
                    if (permissao == true)
                    {
                        zonaInserida.zona[areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y + 1] = new Area(novaCoord);
                        totalAreasCriadas++;
                        coordAreas[totalAreasCriadas] = novaCoord;
                    }



                    break;

                case 1:
                    //cima:
                    //Cria;
                    novaCoord = new Vetor2(areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y - 1);
                    //Checa
                    permissao = true;
                    for (int i = 0; i <= totalAreasCriadas; i++)
                    {
                        if (coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y)
                        {
                            permissao = false;
                        }
                    }

                    //Insere
                    if (permissao == true)
                    {
                        zonaInserida.zona[areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y - 1] = new Area(novaCoord);
                        totalAreasCriadas++;
                        coordAreas[totalAreasCriadas] = novaCoord;
                    }
                    break;

                case 2:
                    //esquerda
                    //Cria;
                    novaCoord = new Vetor2(areaPartida.posicaoMatriz.x - 1, areaPartida.posicaoMatriz.y);
                    //Checa
                    permissao = true;
                    for (int i = 0; i <= totalAreasCriadas; i++)
                    {
                        if (coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y)
                        {
                            permissao = false;
                        }
                    }

                    //Insere
                    if (permissao == true)
                    {
                        zonaInserida.zona[areaPartida.posicaoMatriz.x - 1, areaPartida.posicaoMatriz.y] = new Area(novaCoord);
                        totalAreasCriadas++;
                        coordAreas[totalAreasCriadas] = novaCoord;
                    }


                    break;

                case 3:
                    //direita
                    //Cria;
                    novaCoord = new Vetor2(areaPartida.posicaoMatriz.x + 1, areaPartida.posicaoMatriz.y);
                    //Checa
                    permissao = true;
                    for (int i = 0; i <= totalAreasCriadas; i++)
                    {
                        if (coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y)
                        {
                            permissao = false;
                        }
                    }

                    //Insere
                    if (permissao == true)
                    {
                        zonaInserida.zona[areaPartida.posicaoMatriz.x + 1, areaPartida.posicaoMatriz.y] = new Area(novaCoord);
                        totalAreasCriadas++;
                        coordAreas[totalAreasCriadas] = novaCoord;
                    }
                    break;
                }

                //Chama a recursão:
                if (totalAreasCriadas > (nAreas / 4))
                {
                    PreencherZonaLimitado(zonaInserida, totalAreasCriadas, coordAreas, nAreas, rnd);
                }
                else
                {
                    int posicaorandom = rnd.Next(0, totalAreasCriadas + 1);
                    PreencherZona(zonaInserida, zonaInserida.zona[coordAreas[posicaorandom].x, coordAreas[posicaorandom].y], totalAreasCriadas, coordAreas, nAreas, rnd);
                    //Console.WriteLine("entrou" + (totalAreasCriadas + 1));
                }
            }
        }
Beispiel #9
0
        public void PreencherZonaLimitado(Zona zonaInserida, int totalAreasCriadas, Vetor2[] coordAreas, int nAreas, System.Random rnd)
        {
            int    nAdjacentes;
            bool   permissao = false;
            Vetor2 novaCoord;

            //numeroDeAreasRandomizado---
            if (totalAreasCriadas >= nAreas)
            {
                //interrompe a recursão.
                return;
            }
            else
            {
                while (permissao == false)
                {
                    int coordx = rnd.Next(1, Config.tamanhoMatrizZona.x - 2);
                    int coordy = rnd.Next(1, Config.tamanhoMatrizZona.y - 2);
                    nAdjacentes = 0;
                    //checa se a posicao da matriz está vazia
                    if (zonaInserida.zona[coordx, coordy] == null)
                    {
                        //checa os adjacentes:
                        //cima:
                        if (zonaInserida.zona[coordx, coordy - 1] != null)
                        {
                            nAdjacentes++;
                        }
                        //baixo
                        if (zonaInserida.zona[coordx, coordy + 1] != null)
                        {
                            nAdjacentes++;
                        }
                        //esquerda
                        if (zonaInserida.zona[coordx - 1, coordy] != null)
                        {
                            nAdjacentes++;
                        }
                        //direita
                        if (zonaInserida.zona[coordx + 1, coordy] != null)
                        {
                            nAdjacentes++;
                        }
                        if (nAdjacentes > 0 && nAdjacentes < 2)
                        {
                            //insere uma area na posicao da matriz.
                            novaCoord = new Vetor2(coordx, coordy);
                            zonaInserida.zona[coordx, coordy] = new Area(novaCoord);
                            totalAreasCriadas++;
                            coordAreas[totalAreasCriadas] = novaCoord;
                            permissao = true;
                        }
                    }
                }



                //Chama a recursão:
                if (totalAreasCriadas > (nAreas / 4))
                {
                    PreencherZonaLimitado(zonaInserida, totalAreasCriadas, coordAreas, nAreas, rnd);
                }
                else
                {
                    int posicaorandom = rnd.Next(0, totalAreasCriadas + 1);
                    PreencherZona(zonaInserida, zonaInserida.zona[coordAreas[posicaorandom].x, coordAreas[posicaorandom].y], totalAreasCriadas, coordAreas, nAreas, rnd);
                    //Console.WriteLine("entrou" + (totalAreasCriadas + 1));
                }
            }
        }
        public Sala()
        {
            //Instanciando a Randomizacao
            System.Random tamanho = new System.Random(Guid.NewGuid().GetHashCode());
            // Gerando valores aleatorios de coordenada x e y, para instanciar o vector.
            int    x           = tamanho.Next(Config.tamanhoMinSala.x, Config.tamanhoMaxSala.x);
            int    y           = tamanho.Next(Config.tamanhoMinSala.y, Config.tamanhoMaxSala.y);
            Vetor2 tamanhoSala = new Vetor2(x, y);

            Celula[,] sala   = new Celula[tamanhoSala.x, tamanhoSala.y];
            this.tamanhoSala = tamanhoSala;
            int numeroPortas = tamanho.Next(Config.numeroMinPortas, Config.numeroMaxPortas);

            this.numeroPortas = numeroPortas;
            //Preenchendo a Sala;
            for (int i = 0; i < tamanhoSala.y; i++)
            {
                for (int j = 0; j < tamanhoSala.x; j++)
                {
                    if (j == 0 || i == 0 || j == (tamanhoSala.x - 1) || i == (tamanhoSala.y - 1))
                    {
                        Vetor2 coordPreenchida = new Vetor2(j, i);
                        Celula celulaPreencheu = new Celula(coordPreenchida, "pSala");
                        //adicionando subtipo*
                        if (j == 0 && i == 0)
                        {
                            celulaPreencheu.subTipoCelula = "quinaECp";
                        }
                        if (j == 0 && i == (tamanhoSala.y - 1))
                        {
                            celulaPreencheu.subTipoCelula = "quinaEBp";
                        }
                        if (j == 0 && i != (tamanhoSala.y - 1) && i != 0)
                        {
                            celulaPreencheu.subTipoCelula = "esquerdap";
                        }
                        if (j == (tamanhoSala.x - 1) && i == 0)
                        {
                            celulaPreencheu.subTipoCelula = "quinaDCp";
                        }
                        if (j == (tamanhoSala.x - 1) && i == (tamanhoSala.y - 1))
                        {
                            celulaPreencheu.subTipoCelula = "quinaDBp";
                        }
                        if (j == (tamanhoSala.x - 1) && i != (tamanhoSala.y - 1) && i != 0)
                        {
                            celulaPreencheu.subTipoCelula = "direitap";
                        }
                        if (i == 0 && j != 0 && j != (tamanhoSala.x - 1))
                        {
                            celulaPreencheu.subTipoCelula = "cimap";
                        }
                        if (i == tamanhoSala.y - 1 && j != 0 && j != (tamanhoSala.x - 1))
                        {
                            celulaPreencheu.subTipoCelula = "baixop";
                        }

                        celulaPreencheu.coordCelulaSala = coordPreenchida;
                        sala[j, i] = celulaPreencheu;
                    }
                    else
                    {
                        Vetor2 coordPreenchida = new Vetor2(j, i);
                        Celula celulaPreencheu = new Celula(coordPreenchida, "chao");
                        celulaPreencheu.coordCelulaSala = coordPreenchida;
                        sala[j, i] = celulaPreencheu;
                    }
                }
            }
            //Adicionando Portas.
            for (int i = 0; i < numeroPortas; i++)
            {
                int    xPorta           = tamanho.Next(2, tamanhoSala.x - 3);
                int    yPorta           = tamanho.Next(2, tamanhoSala.y - 3);
                int    ladoPorta        = tamanho.Next(1, 5);
                Vetor2 coordPreenchida2 = new Vetor2(0, 0);
                string subtipo          = "";
                switch (ladoPorta)
                {
                case 1:
                    coordPreenchida2 = new Vetor2(0, yPorta);
                    subtipo          = "esquerdap";
                    break;

                case 2:
                    coordPreenchida2 = new Vetor2(tamanhoSala.x - 1, yPorta);
                    subtipo          = "direitap";
                    break;

                case 3:
                    coordPreenchida2 = new Vetor2(xPorta, 0);
                    subtipo          = "cimap";
                    break;

                case 4:
                    coordPreenchida2 = new Vetor2(xPorta, tamanhoSala.y - 1);
                    subtipo          = "baixop";
                    break;
                }

                Celula celulaPreencheu = new Celula(coordPreenchida2, "porta");
                celulaPreencheu.ehPorta         = true;
                celulaPreencheu.subTipoCelula   = subtipo;
                celulaPreencheu.coordCelulaSala = coordPreenchida2;
                sala[coordPreenchida2.x, coordPreenchida2.y] = celulaPreencheu;
            }



            this.sala = sala;
        }