Exemplo n.º 1
0
        private int RandomizeIndex(int lenghtList)
        {
            int index = seed % lenghtList;

            seed = SeedHelp.EnhanceSeed(seed, index);
            return(Mathf.Abs(index));
        }
        public void UseRandomCubes()
        {
            this.seed = SeedHelp.CreateSeed();

            List <GameObject> allTheCubeLeft = new List <GameObject>(allTheCubes);

            cubesUsed.Clear();

            for (int i = 0; i < numberOfDifferentCubes; i++)
            {
                var index = RandomizeIndex(allTheCubeLeft.Count);
                cubesUsed.Add(allTheCubeLeft[index]);
                allTheCubeLeft.RemoveAt(index);
            }
        }
Exemplo n.º 3
0
        public void MakeMap(int seedChoosen = -1)
        {
            GetComponent <DernierRecours>().DestroyEveryCubes();

            compteur = 0;


            seed = (seedChoosen < 1) ? SeedHelp.CreateSeed() : seedChoosen;
            // seed = 15364;
            Debug.LogWarning("Attention, la seed utilisé est la suivante : " + seed);
            seedWriter.text = "La seed actuelle est : " + seed;
            UseRandomCubes();

            if (cubesUsed.Count != numberOfDifferentCubes)
            {
                Debug.LogError("Il y a " + ((cubesUsed.Count < numberOfDifferentCubes) ? "pas assez" : "trop") +
                               " de cubes dans la liste (" + cubesUsed.Count + ").");
                return;
            }

            indexMax = new Vector2Int(squareLenght - 1, squareLenght - 1);
            BuildMap();


            positionInitialCube     = new List <Vector2Int>();
            choosenInitialCube      = new List <GameObject>();
            positionOfPossibilities = new List <Vector2Int>();


            for (int i = 0; i < squareLenght; i++)
            {
                for (int j = 0; j < squareLenght; j++)
                {
                    positionOfPossibilities.Add(new Vector2Int(i, j));
                }
            }

            int possibilitesLeft = 0;
            List <Vector2Int> possibilityLeftReal = new List <Vector2Int>(positionOfPossibilities);


            do
            {
                for (int g = 0; g < 1; g++)
                {
                    var index = RandomizeIndex(possibilityLeftReal.Count);
                    //Debug.Log(index + " ; " + positionOfPossibilities.Count);
                    positionInitialCube.Add(
                        possibilityLeftReal[index]);

                    index = RandomizeIndex(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x,
                                                    positionInitialCube[positionInitialCube.Count - 1].y].Count);

                    choosenInitialCube.Add(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x,
                                                    positionInitialCube[positionInitialCube.Count - 1].y][index]);

                    //Debug.Log("La position initial est : " + positionInitialCube[positionInitialCube.Count - 1]);
                    //Debug.Log("Le cube de départ choisi est " + choosenInitialCube[choosenInitialCube.Count - 1].name);
                    //if (choosenInitialCube.Count - 1 == 0)
                    //{
                    //    // choosenInitialCube[0].GetComponent<MeshRenderer>().material.color = Color.black;
                    //    Debug.Log("Le premier choisi est " + choosenInitialCube[0].name);
                    //}

                    // int remover = 0;
                    var testList = new List <GameObject>(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x,
                                                                  positionInitialCube[positionInitialCube.Count - 1].y]);
                    for (int i = 0;
                         i < testList.Count;
                         i++)
                    {
                        var item = testList[i];
                        if (item != choosenInitialCube[choosenInitialCube.Count - 1])
                        {
                            CollapseMap(positionInitialCube[positionInitialCube.Count - 1], positionInitialCube, item);
                            // ++remover;
                        }
                    }

                    possibilitesLeft = 0;
                    possibilityLeftReal.Clear();
                    for (int i = 0; i < positionOfPossibilities.Count; i++)
                    {
                        if (positionOfPossibilities[i] != Vector2.down)
                        {
                            possibilitesLeft++;
                            possibilityLeftReal.Add(positionOfPossibilities[i]);
                        }
                    }

                    //Debug.Log(possibilitesLeft);
                }
            } while (possibilitesLeft > 0);

            for (int i = 0; i < squareLenght; i++)
            {
                for (int j = 0; j < squareLenght; j++)
                {
                    for (int k = 0; k < mapCubes[i, j].Count; k++)
                    {
                        var pos = mapCubes[i, j][k].transform.position;
                        pos.y = k;
                        mapCubes[i, j][k].transform.position = pos;
                    }
                }
            }
        }
        public void MakeMap()
        {
            seed = SeedHelp.CreateSeed();
            UseRandomCubes();

            if (cubesUsed.Count != numberOfDifferentCubes)
            {
                Debug.LogError("Il y a " + ((cubesUsed.Count < numberOfDifferentCubes) ? "pas assez" : "trop") + " de cubes dans la liste (" + cubesUsed.Count + ").");
                return;
            }

            indexMax = new Vector2Int(squareLenght - 1, squareLenght - 1);
            BuildMap();

            positionInitialCube     = new List <Vector2Int>();
            choosenInitialCube      = new List <GameObject>();
            positionOfPossibilities = new List <Vector2Int>();


            for (int i = 0; i < squareLenght; i++)
            {
                for (int j = 0; j < squareLenght; j++)
                {
                    positionOfPossibilities.Add(new Vector2Int(i, j));
                }
            }
            var index = RandomizeIndex(positionOfPossibilities.Count);

            //Debug.Log(index + " ; " + positionOfPossibilities.Count);
            positionInitialCube.Add(
                positionOfPossibilities[index]);

            index = RandomizeIndex(cubesUsed.Count);
            choosenInitialCube.Add(cubesUsed[index]);

            for (int i = 0; i < squareLenght; i++)
            {
                for (int j = 0; j < squareLenght; j++)
                {
                    mapCubes[i, j] = new List <GameObject>(cubesUsed);
                }
            }


Research:
            //Debug.Log(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][0].name);
            //foreach (var item in (mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y]))
            for (int i = 0; i < mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y].Count; i++)
            {
                var item = mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][i];
                if (item != choosenInitialCube[choosenInitialCube.Count - 1])
                {
                    CollapseMap(positionInitialCube[positionInitialCube.Count - 1], new List <Vector2>(0), item);
                }
            }

            int possibilitesLeft = 0;

            List <Vector2Int> possibilityLeftReal = new List <Vector2Int>();

            for (int i = 0; i < positionOfPossibilities.Count; i++)
            {
                if (positionOfPossibilities[i] != Vector2.down)
                {
                    possibilitesLeft++;
                    possibilityLeftReal.Add(positionOfPossibilities[i]);
                }
            }
            if (possibilitesLeft > 0)
            {
                index = RandomizeIndex(possibilitesLeft);
                positionInitialCube.Add(possibilityLeftReal[index]);
                //Debug.Log("Possibility left : " + possibilitesLeft);
                //Debug.Log("index : " + positionInitialCube[positionInitialCube.Count - 1].x + " , " + positionInitialCube[positionInitialCube.Count - 1].y);
                index = RandomizeIndex(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y].Count);
                choosenInitialCube.Add(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][index]);
                goto Research;
            }

            Positionneur positionneur = GetComponent <Positionneur>();

            positionneur.SetListeCube(mapCubes, squareLenght);
            positionneur.GenerateList();
            positionneur.PositionnementCubes(squareLenght);
        }