예제 #1
0
 public void AdicionarInfoPortas(Zona zonaInserida)
 {
     for (int i = 1; i < Config.tamanhoMatrizZona.x - 1; i++)
     {
         for (int j = 1; j < Config.tamanhoMatrizZona.y - 1; j++)
         {
             if (zonaInserida.zona[i, j] != null)
             {
                 //checar lados
                 //cima
                 if (zonaInserida.zona[i, j - 1] != null)
                 {
                     if (zonaInserida.zona[i, j - 1].secreta == false)
                     {
                         zonaInserida.zona[i, j].entradas[2] = zonaInserida.zona[i, j - 1].posicaoMatriz;
                     }
                     if (zonaInserida.zona[i, j - 1].secreta == true)
                     {
                         zonaInserida.zona[i, j].entradasSecretas[2] = zonaInserida.zona[i, j - 1].posicaoMatriz;
                     }
                 }
                 //baixo
                 if (zonaInserida.zona[i, j + 1] != null)
                 {
                     if (zonaInserida.zona[i, j + 1].secreta == false)
                     {
                         zonaInserida.zona[i, j].entradas[3] = zonaInserida.zona[i, j + 1].posicaoMatriz;
                     }
                     if (zonaInserida.zona[i, j + 1].secreta == true)
                     {
                         zonaInserida.zona[i, j].entradasSecretas[3] = zonaInserida.zona[i, j + 1].posicaoMatriz;
                     }
                 }
                 //esquerda
                 if (zonaInserida.zona[i - 1, j] != null)
                 {
                     if (zonaInserida.zona[i - 1, j].secreta == false)
                     {
                         zonaInserida.zona[i, j].entradas[0] = zonaInserida.zona[i - 1, j].posicaoMatriz;
                     }
                     if (zonaInserida.zona[i - 1, j].secreta == true)
                     {
                         zonaInserida.zona[i, j].entradasSecretas[0] = zonaInserida.zona[i - 1, j].posicaoMatriz;
                     }
                 }
                 //direita
                 if (zonaInserida.zona[i + 1, j] != null)
                 {
                     if (zonaInserida.zona[i + 1, j].secreta == false)
                     {
                         zonaInserida.zona[i, j].entradas[1] = zonaInserida.zona[i + 1, j].posicaoMatriz;
                     }
                     if (zonaInserida.zona[i + 1, j].secreta == true)
                     {
                         zonaInserida.zona[i, j].entradasSecretas[1] = zonaInserida.zona[i + 1, j].posicaoMatriz;
                     }
                 }
                 //FIM CHECAGEM
             }
         }
     }
 }
예제 #2
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));
                }
            }
        }
예제 #3
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));
                }
            }
        }