Exemplo n.º 1
0
        public bool Equals(Coordonnée coor)
        {
            if ((object)coor == null)
            {
                return(false);
            }

            return((getX() == (coor.getX())) && (getY() == (coor.getY())));
        }
Exemplo n.º 2
0
 public bool Equals(Coordonnée coor)
 {
     if ((object)coor == null)
     {
         return false;
     }
     
     return (getX() == (coor.getX())) && (getY() == (coor.getY()));
 }
Exemplo n.º 3
0
        private void BoardSetup(int sizeMap)
        {
            boardHolder = new GameObject("Board").transform;

            Map maze = Map.creerLabyrinthe(sizeMap, sizeMap);

            GameObject instance;

            Coordonnée coorDepart = new Coordonnée();
            Coordonnée coorExit   = new Coordonnée();

            for (int x = 0; x < maze.getSize().getX(); x++)
            {
                for (int y = 0; y < maze.getSize().getY(); y++)
                {
                    if (maze.getVal(x, y) == 1)
                    {
                        PlaceWall(maze, x, y);
                    }
                    else if (maze.getVal(x, y) == 2)
                    {
                        coorDepart.setVal(x + 1, y + 1);
                        PlaceEntryExit(maze, x, y, depart);
                    }
                    else if (maze.getVal(x, y) == 3)
                    {
                        instance = Instantiate(lockExit, new Vector3(x + 1, y + 1, 0f), Quaternion.identity) as GameObject;
                        instance.transform.SetParent(boardHolder);

                        PlaceEntryExit(maze, x, y, exit);
                    }
                    else
                    {
                        instance = Instantiate(floor, new Vector3(x + 1, y + 1, 0f), Quaternion.identity) as GameObject;
                        instance.transform.SetParent(boardHolder);
                    }
                }
            }

            for (int x = 0; x < maze.getSize().getX() + 2; x++) // add of invisible wall around the maze
            {
                for (int y = 0; y < maze.getSize().getY() + 2; y++)
                {
                    if (x == 0 || x == (maze.getSize().getX() + 1) || y == 0 || y == (maze.getSize().getY() + 1))
                    {
                        instance = Instantiate(invisibleWall, new Vector3(x, y, 0f), Quaternion.identity) as GameObject;
                        instance.transform.SetParent(boardHolder);
                    }
                }
            }

            instance = Instantiate(player, new Vector3(coorDepart.getX(), coorDepart.getY(), 0f), Quaternion.identity) as GameObject;
            instance.transform.SetParent(boardHolder);

            PlaceKeyAndGhost(boardHolder, maze, coorDepart, coorExit);
        }
Exemplo n.º 4
0
        private void BoardSetup(int sizeMap)
        {
            boardHolder = new GameObject("Board").transform;
            
            Map maze = Map.creerLabyrinthe(sizeMap, sizeMap);

            GameObject instance;

            Coordonnée coorDepart = new Coordonnée();
            Coordonnée coorExit = new Coordonnée();

            for (int x = 0; x < maze.getSize().getX(); x++)
            {
                for (int y = 0; y < maze.getSize().getY(); y++)
                {
                    if (maze.getVal(x, y) == 1)
                        PlaceWall(maze, x, y);
                    else if (maze.getVal(x, y) == 2)
                    {
                        coorDepart.setVal(x + 1, y + 1);
                        PlaceEntryExit(maze, x, y, depart);
                    }
                    else if (maze.getVal(x, y) == 3)
                    {
                        instance = Instantiate(lockExit, new Vector3(x + 1, y + 1, 0f), Quaternion.identity) as GameObject;
                        instance.transform.SetParent(boardHolder);

                        PlaceEntryExit(maze, x, y, exit);
                    }
                    else
                    {
                        instance = Instantiate(floor, new Vector3(x + 1, y + 1, 0f), Quaternion.identity) as GameObject;
                        instance.transform.SetParent(boardHolder);
                    }
                    
                }
            }

            for (int x = 0; x < maze.getSize().getX() + 2; x++) // add of invisible wall around the maze
            {
                for (int y = 0; y < maze.getSize().getY() + 2; y++)
                {
                    if (x == 0 || x == (maze.getSize().getX() + 1) || y == 0 || y == (maze.getSize().getY() + 1))
                    {
                        instance = Instantiate(invisibleWall, new Vector3(x, y, 0f), Quaternion.identity) as GameObject;
                        instance.transform.SetParent(boardHolder);
                    }
                }
            }

            instance = Instantiate(player, new Vector3(coorDepart.getX(), coorDepart.getY(), 0f), Quaternion.identity) as GameObject;
            instance.transform.SetParent(boardHolder);

            PlaceKeyAndGhost(boardHolder, maze, coorDepart, coorExit);
        }
Exemplo n.º 5
0
 public bool CheckDistance(Coordonnée a, Coordonnée b, int distance)
 {
     if ((Mathf.Abs(a.getX() - b.getX()) + Mathf.Abs(a.getY() - b.getY())) < distance)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Exemplo n.º 6
0
        public void PlaceKeyAndGhost(Transform boardHolder, Map carte, Coordonnée depart, Coordonnée exit)
        {
            List <Coordonnée> listCoorKey   = new List <Coordonnée>();
            List <Coordonnée> listCoorGhost = new List <Coordonnée>();

            int sizeMap       = Mathf.Min(carte.getSize().getX(), carte.getSize().getY());
            int distanceKey   = (sizeMap - (sizeMap % 1)) / 2;
            int distanceGhost = (sizeMap + 1) * 3 / 4;

            for (int x = 1; x < carte.getSize().getX() - 1; x++) // ajout de mur invisible autour du labyrinthe
            {
                for (int y = 1; y < carte.getSize().getY() - 1; y++)
                {
                    int contactWall = 0;
                    if (carte.getVal(x, y) == 0)
                    {
                        for (int i = x - 1; i < x + 2; i++)
                        {
                            for (int j = y - 1; j < y + 2; j++)
                            {
                                if (i == x || j == y)
                                {
                                    if (carte.getVal(i, j) == 1)
                                    {
                                        contactWall++;
                                    }
                                }
                            }
                        }
                        if (contactWall == 3 && CheckDistance(new Coordonnée(x, y), depart, distanceKey) && CheckDistance(new Coordonnée(x, y), exit, distanceKey))
                        {
                            listCoorKey.Add(new Coordonnée(x, y));
                        }
                        else if (CheckDistance(new Coordonnée(x, y), depart, distanceGhost))
                        {
                            listCoorGhost.Add(new Coordonnée(x, y));
                        }
                    }
                }
            }
            Coordonnée coorKey  = listCoorKey[Random.Range(0, listCoorKey.Count)];
            GameObject instance = Instantiate(key, new Vector3(coorKey.getX() + 1, coorKey.getY() + 1, 0f), Quaternion.identity) as GameObject;

            instance.transform.SetParent(boardHolder);

            Coordonnée coorGhost = listCoorGhost[Random.Range(0, listCoorGhost.Count)];

            instance = Instantiate(ghost, new Vector3(coorGhost.getX() + 1, coorGhost.getY() + 1, 0f), Quaternion.identity) as GameObject;
            instance.transform.SetParent(boardHolder);
        }
Exemplo n.º 7
0
        public static bool quickContact(Map carte, Coordonnée newBloc)
        {
            int x = newBloc.getX();
            int y = newBloc.getY();

            for (int i = x - 1; i < x + 2; i++)
            {
                for (int j = y - 1; j < y + 2; j++)
                {
                    if (i != x || j != y)
                    {
                        if (carte.getVal(i, j) == 1)
                        {
                            return(false);
                        }
                    }
                }
            }
            return(true);
        }
Exemplo n.º 8
0
        public static void caseDA(Coordonnée taille, ref Coordonnée depart, ref Coordonnée arrivee)
        {
            int cote = Random.Range(1, 5);
            int a;
            int d;

            switch (cote)
            {
            case 1:
                d = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                a = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                depart.setX(d);
                depart.setY(taille.getY() - 1);

                arrivee.setX(a);
                arrivee.setY(0);
                break;

            case 2:
                d = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                a = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                depart.setX(taille.getX() - 1);
                depart.setY(d);

                arrivee.setX(0);
                arrivee.setY(a);
                break;

            case 3:
                d = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                a = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                depart.setX(d);
                depart.setY(0);

                arrivee.setX(a);
                arrivee.setY(taille.getY() - 1);
                break;

            case 4:
                d = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                a = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                depart.setX(0);
                depart.setY(d);

                arrivee.setX(taille.getX() - 1);
                arrivee.setY(a);
                break;
            }
        }
Exemplo n.º 9
0
 public void setVal(Coordonnée coor, int valeur)
 {
     map[coor.getY() * sizeX + coor.getX()] = valeur;
 }
Exemplo n.º 10
0
        public static Map creerLabyrinthe(int largeur, int hauteur)
        {
            //on rend les dimensions impaire si elles ne le sont pas déjà
            int x = largeur - (largeur % 2) + 1;
            int y = hauteur - (hauteur % 2) + 1;
            Coordonnée taille = new Coordonnée(x, y);

            Map carte = new Map(taille);

            for (int i = 0; i < x; i++)
            {
                carte.setVal(i, 0, 4);
                carte.setVal(i, y - 1, 4);
            }

            for (int j = 0; j < y; j++)
            {
                carte.setVal(0, j, 4);
                carte.setVal(x - 1, j, 4);
            }

            //on calcule le nombre de mur à créer avec une formule magique
            int arret = (x - 3) * (y - 3) / 2;

            //on crée la liste des blocs dans lesquels il est possible de faire un mur
            List<Coordonnée> listeLibre = new List<Coordonnée>();
            for (int i1 = 1; i1 < x - 1; i1++)
            {
                for (int j1 = 1; j1 < y - 1; j1++)
                {
                    if (i1 % 2 == 0 || j1 % 2 == 0)
                    {
                        listeLibre.Add(new Coordonnée(i1, j1));
                    }
                }
            }

            List<Coordonnée> listeBloc = new List<Coordonnée>();
            for (int i = 1; i < carte.getSize().getX() - 1; i++)
            {
                for (int j = 1; j < carte.getSize().getY() - 1; j++)
                {
                    if (carte.getVal(i, j) == 0)
                    {
                        listeBloc.Add(new Coordonnée(i, j));
                    }
                }
            }

            int mur = 0;

            int iteration = 0;
            
            while (mur < arret && listeLibre.Count != 0)   //boucle de création des murs
            {
                int nbRand = Random.Range(0, listeLibre.Count);
                Coordonnée bloc = listeLibre[nbRand];

                carte.setVal(bloc.getX(), bloc.getY(), 1);
                mur++;
                if(!quickContact(carte, bloc))
                {
                    if (!contact(carte, bloc, listeBloc, 0))
                    {
                        carte.setVal(bloc.getX(), bloc.getY(), 0);
                        mur--;
                    }
                    else listeBloc.Remove(bloc);
                }
                else listeBloc.Remove(bloc);
                
                listeLibre.RemoveAt(nbRand);
                iteration++;
            }

            //on change les murs extérieurs en murs normaux
            for (int i = 0; i < x; i++)
            {
                carte.setVal(i, 0, 1);
                carte.setVal(i, y - 1, 1);
            }

            for (int j = 0; j < x; j++)
            {
                carte.setVal(0, j, 1);
                carte.setVal(x - 1, j, 1);
            }

            Coordonnée depart = new Coordonnée();
            Coordonnée arrivee = new Coordonnée();
            caseDA(taille, ref depart, ref arrivee);
            carte.setVal(depart.getX(), depart.getY(), 2);
            carte.setVal(arrivee.getX(), arrivee.getY(), 3);
            
            return carte;
        }
Exemplo n.º 11
0
 public static bool quickContact(Map carte, Coordonnée newBloc)
 {
     
     int x = newBloc.getX();
     int y = newBloc.getY();
     for (int i = x-1; i < x+2; i++)
     {
         for(int j = y-1; j < y+2; j++)
         {
             if(i != x || j != y)
             {
                 if (carte.getVal(i, j) == 1) return false;
             }
         }
     }
     return true;
 }
Exemplo n.º 12
0
        public static void caseDA(Coordonnée taille, ref Coordonnée depart, ref Coordonnée arrivee)
        {
            int cote = Random.Range(1, 5);            
            int a;
            int d;
            switch (cote)
            {
                case 1:
                    d = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                    a = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                    depart.setX(d);
                    depart.setY(taille.getY() - 1);

                    arrivee.setX(a);
                    arrivee.setY(0);
                    break;

                case 2:
                    d = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                    a = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                    depart.setX(taille.getX() - 1);
                    depart.setY(d);

                    arrivee.setX(0);
                    arrivee.setY(a);
                    break;

                case 3:
                    d = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                    a = (Random.Range(0, (taille.getX() - 1) / 2)) * 2 + 1;
                    depart.setX(d);
                    depart.setY(0);

                    arrivee.setX(a);
                    arrivee.setY(taille.getY() - 1);
                    break;

                case 4:
                    d = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                    a = (Random.Range(0, (taille.getY() - 1) / 2)) * 2 + 1;
                    depart.setX(0);
                    depart.setY(d);

                    arrivee.setX(taille.getX() - 1);
                    arrivee.setY(a);
                    break;
            }
        }
Exemplo n.º 13
0
 public int getVal(Coordonnée coor)
 {
     return(map[coor.getY() * sizeX + coor.getX()]);
 }
Exemplo n.º 14
0
 public bool CheckDistance(Coordonnée a, Coordonnée b, int distance)
 {
     if ((Mathf.Abs(a.getX() - b.getX()) + Mathf.Abs(a.getY() - b.getY())) < distance) return false;
     else return true;
 }
Exemplo n.º 15
0
        public static Map creerLabyrinthe(int largeur, int hauteur)
        {
            //on rend les dimensions impaire si elles ne le sont pas déjà
            int        x      = largeur - (largeur % 2) + 1;
            int        y      = hauteur - (hauteur % 2) + 1;
            Coordonnée taille = new Coordonnée(x, y);

            Map carte = new Map(taille);

            for (int i = 0; i < x; i++)
            {
                carte.setVal(i, 0, 4);
                carte.setVal(i, y - 1, 4);
            }

            for (int j = 0; j < y; j++)
            {
                carte.setVal(0, j, 4);
                carte.setVal(x - 1, j, 4);
            }

            //on calcule le nombre de mur à créer avec une formule magique
            int arret = (x - 3) * (y - 3) / 2;

            //on crée la liste des blocs dans lesquels il est possible de faire un mur
            List <Coordonnée> listeLibre = new List <Coordonnée>();

            for (int i1 = 1; i1 < x - 1; i1++)
            {
                for (int j1 = 1; j1 < y - 1; j1++)
                {
                    if (i1 % 2 == 0 || j1 % 2 == 0)
                    {
                        listeLibre.Add(new Coordonnée(i1, j1));
                    }
                }
            }

            List <Coordonnée> listeBloc = new List <Coordonnée>();

            for (int i = 1; i < carte.getSize().getX() - 1; i++)
            {
                for (int j = 1; j < carte.getSize().getY() - 1; j++)
                {
                    if (carte.getVal(i, j) == 0)
                    {
                        listeBloc.Add(new Coordonnée(i, j));
                    }
                }
            }

            int mur = 0;

            int iteration = 0;

            while (mur < arret && listeLibre.Count != 0)   //boucle de création des murs
            {
                int        nbRand = Random.Range(0, listeLibre.Count);
                Coordonnée bloc   = listeLibre[nbRand];

                carte.setVal(bloc.getX(), bloc.getY(), 1);
                mur++;
                if (!quickContact(carte, bloc))
                {
                    if (!contact(carte, bloc, listeBloc, 0))
                    {
                        carte.setVal(bloc.getX(), bloc.getY(), 0);
                        mur--;
                    }
                    else
                    {
                        listeBloc.Remove(bloc);
                    }
                }
                else
                {
                    listeBloc.Remove(bloc);
                }

                listeLibre.RemoveAt(nbRand);
                iteration++;
            }

            //on change les murs extérieurs en murs normaux
            for (int i = 0; i < x; i++)
            {
                carte.setVal(i, 0, 1);
                carte.setVal(i, y - 1, 1);
            }

            for (int j = 0; j < x; j++)
            {
                carte.setVal(0, j, 1);
                carte.setVal(x - 1, j, 1);
            }

            Coordonnée depart  = new Coordonnée();
            Coordonnée arrivee = new Coordonnée();

            caseDA(taille, ref depart, ref arrivee);
            carte.setVal(depart.getX(), depart.getY(), 2);
            carte.setVal(arrivee.getX(), arrivee.getY(), 3);

            return(carte);
        }
Exemplo n.º 16
0
 public int getVal(Coordonnée coor)
 {
     return map[coor.getY() * sizeX + coor.getX()];
 }
Exemplo n.º 17
0
 public void setVal(Coordonnée coor, int valeur)
 {
     map[coor.getY() * sizeX + coor.getX()] = valeur;
 }