Esempio n. 1
0
 private static void AddPath(WcfGrid grid, List <OpinionatedItem <Bitmap> > hTraverse, int doorwayY)
 {
     for (var x = 2; x < grid.Width - 2; x++)
     {
         grid.SuperPositions[x, doorwayY, 0].CollapseToItems(hTraverse.Select(i => i.Id).ToList(), true);
         grid.handlePropagation(grid.SuperPositions[x, doorwayY, 0]);
     }
 }
Esempio n. 2
0
 private static void AddDoor(WcfGrid grid, IOpinionatedItem doorItem, int doorwayY)
 {
     //grid.SuperPositions[0, 5, 0].Uncollapse();
     //grid.SuperPositions[grid.Width-1, 5, 0].Uncollapse();
     grid.SuperPositions[0, doorwayY, 0].CollapseToItem(doorItem.Id);
     grid.handlePropagation(grid.SuperPositions[0, doorwayY, 0]);
     grid.SuperPositions[grid.Width - 1, doorwayY, 0].CollapseToItem(doorItem.Id);
     grid.handlePropagation(grid.SuperPositions[grid.Width - 1, doorwayY, 0]);
 }
Esempio n. 3
0
            public override void Init(Random random, IntentionGrid grid, TilesetConfiguration tilesConfig)
            {
                Grid        = grid;
                Random      = random;
                TilesConfig = tilesConfig;

                Converter = new MyMeaningConverter();

                WcfGrid = Helpers.InitWcfGrid(random, grid, TilesConfig);
            }
Esempio n. 4
0
        public static WcfGrid InitWcfGrid(Random random, IntentionGrid grid, TilesetConfiguration TilesConfig)
        {
            var WcfGrid = new WcfGrid(random);

            WcfGrid.Init(grid.Width, grid.Height, 1, TilesConfig.MainDistinct.Select(x => (IOpinionatedItem)x).ToList());
            List <WcfVector> shape = WcfVector.GetCross3dShape();

            WcfGrid.SetInfluenceShape(shape);
            WcfGrid.handlePropagation(WcfGrid.SuperPositions[WcfGrid.Width / 2, WcfGrid.Height / 2, 0]);
            return(WcfGrid);
        }
Esempio n. 5
0
            public override void Init(Random random, IntentionGrid grid, TilesetConfiguration tilesConfig)
            {
                Grid        = grid;
                Random      = random;
                TilesConfig = tilesConfig;

                Converter = new BasicCircuitProcess.MyMeaningConverter();

                WcfGrid = Helpers.InitWcfGrid(random, grid, TilesConfig);
                WcfGrid.eventHandler = this;
            }
Esempio n. 6
0
 public override void ClearForReuse(Random random)
 {
     Random = random;
     Grid.Clear();
     if (WcfGrid.Width != Grid.Width || WcfGrid.Height != Grid.Height)
     {
         WcfGrid = Helpers.InitWcfGrid(random, Grid, TilesConfig);
     }
     else
     {
         WcfGrid.ClearForReuse();
         WcfGrid.SetRandom(random);
     }
     WcfGrid.eventHandler = this;
 }
Esempio n. 7
0
        private List <List <Bitmap> > ToTilesList(WcfGrid grid)
        {
            var Tiles = new List <List <Bitmap> >();

            for (var x = 0; x < grid.Width; x++)
            {
                for (var y = 0; y < grid.Height; y++)
                {
                    if (y == 0)
                    {
                        Tiles.Add(new List <Bitmap>());
                    }

                    Tiles.Last().Add(grid.SuperPositions[x, y, 0].FinalPayloadIfExists <Bitmap>(_cautionTile, _errorTile));
                }
            }
            return(Tiles);
        }
Esempio n. 8
0
        private static List <List <Bitmap> > ToTilesList(WcfGrid grid)
        {
            var Tiles = new List <List <Bitmap> >();

            for (var x = 0; x < grid.Width; x++)
            {
                for (var y = 0; y < grid.Height; y++)
                {
                    if (y == 0)
                    {
                        Tiles.Add(new List <Bitmap>());
                    }

                    Tiles.Last().Add(grid.SuperPositions[x, y, 0].FirstRemainingPayload <Bitmap>());
                }
            }
            return(Tiles);
        }
Esempio n. 9
0
 private static void AddBorder(WcfGrid grid, IOpinionatedItem borderElement, int doorwayY)
 {
     for (var x = 0; x < grid.Width; x++)
     {
         for (var y = 0; y < grid.Height; y++)
         {
             if (x > 0 && x < grid.Width - 1 && y > 0 && y < grid.Height - 1)
             {
                 continue;
             }
             if (y == doorwayY)
             {
                 continue;
             }
             grid.SuperPositions[x, y, 0].CollapseToItem(borderElement.Id);
             var result = grid.handlePropagation(grid.SuperPositions[x, y, 0]);
         }
     }
 }
Esempio n. 10
0
        public void InitWcfGrid(int?seed = null)
        {
            if (seed != null)
            {
                _random = new Random(seed.Value);
            }
            else
            {
                _random = null;
            }
            if (_random == null)
            {
                _grid = new WcfGrid();
            }
            else
            {
                _grid = new WcfGrid(_random);
            }
            _grid.Init(_levelWidth, _levelHeight, 1, _wfcTiles);
            List <WcfVector> shape = WcfVector.GetCross3dShape();

            _grid.SetInfluenceShape(shape);
        }
Esempio n. 11
0
        public static bool ApplyIntentionToGrid(IntentionGrid grid, WcfGrid wcfGrid, TilesetConfiguration tilesconfig, iMeaningConverter converter)
        {
            for (var x = 0; x < grid.Width; x++)
            {
                for (var y = 0; y < grid.Height; y++)
                {
                    if (y == 8 && x == 7)
                    {
                        var breaka = "here";
                    }
                    var intentions = grid.Positions[x, y].Intentions;
                    if (intentions.Count != 0)
                    {
                        List <OpinionatedItem <Bitmap> > crossedTiles = new List <OpinionatedItem <Bitmap> >();
                        var firsttime = true;
                        foreach (var intention in intentions)
                        {
                            if (firsttime)
                            {
                                crossedTiles.AddRange(converter.MeaningToTiles(intention.Meaning, tilesconfig));
                                firsttime = false;
                            }
                            else
                            {
                                crossedTiles = crossedTiles.Where(c => converter.MeaningToTiles(intention.Meaning, tilesconfig).Any(n => n.Id == c.Id)).ToList();
                            }
                        }
                        if (crossedTiles.Count == 0)
                        {
                            Console.WriteLine("Crossing Tile Intentions yeilded no items!");
                        }
                        //DebugWfcPrint(crossedTiles, wcfGrid, x, y, tilesconfig.WFCdebugFolderPath);
                        wcfGrid.SuperPositions[x, y, 0].CollapseToItems(crossedTiles.Select(c => c.Id).ToList(), true);
                        if (!wcfGrid.SuperPositions[x, y, 0].slots.Any(s => !s.Collapsed))
                        {
                            Console.WriteLine("Collapse To Specific Item failed for Intentions:");
                            foreach (var meaning in intentions.Select(i => i.Meaning))
                            {
                                Console.WriteLine(" -" + meaning.ToString());
                            }
                            DebugWfcPrint(crossedTiles, wcfGrid, x, y, tilesconfig.WFCdebugFolderPath);
                        }

                        var result = wcfGrid.handlePropagation(wcfGrid.SuperPositions[x, y, 0]);

                        if (!result)
                        {
                            Console.WriteLine("WcfGrid fucke dup");
                            //throw new Exception("WcfGrid fucke dup");
                            return(false);
                        }
                    }
                }
            }

            var recurseresult = wcfGrid.CollapseAllRecursive();

            if (!recurseresult)
            {
                Console.WriteLine("WcfGrid collapse recursive fucke dup");
                //throw new Exception("WcfGrid collapse recursive fucke dup");
                return(false);
            }

            return(true);
        }
Esempio n. 12
0
        public static void DebugWfcPrint(List <OpinionatedItem <Bitmap> > Attempted, WcfGrid WcfGrid, int x, int y, string folderPath)
        {
            if (folderPath == null)
            {
                return;
            }


            Console.WriteLine("Collapse To Specific Item failed.");
            List <Bitmap> topBmps    = new List <Bitmap>();
            List <Bitmap> bottomBmps = new List <Bitmap>();
            List <Bitmap> leftBmps   = new List <Bitmap>();
            List <Bitmap> rightBmps  = new List <Bitmap>();

            if (y - 1 >= 0)
            {
                topBmps = WcfGrid.SuperPositions[x, y - 1, 0].slots.Where(s => !s.Collapsed).Select(s => (Bitmap)s.item.GetItem()).ToList();
            }
            if (y + 1 < WcfGrid.Height)
            {
                bottomBmps = WcfGrid.SuperPositions[x, y + 1, 0].slots.Where(s => !s.Collapsed).Select(s => (Bitmap)s.item.GetItem()).ToList();
            }
            if (x - 1 >= 0)
            {
                leftBmps = WcfGrid.SuperPositions[x - 1, y, 0].slots.Where(s => !s.Collapsed).Select(s => (Bitmap)s.item.GetItem()).ToList();
            }
            if (x + 1 < WcfGrid.Width)
            {
                rightBmps = WcfGrid.SuperPositions[x + 1, y, 0].slots.Where(s => !s.Collapsed).Select(s => (Bitmap)s.item.GetItem()).ToList();
            }

            List <Bitmap> currentBmps  = Attempted.Select(s => (Bitmap)s.GetItem()).ToList();
            List <Bitmap> existingBmps = WcfGrid.SuperPositions[x, y, 0].slots.Where(s => !s.Collapsed).Select(s => (Bitmap)s.item.GetItem()).ToList();
            //string folderPath = ConfigurationManager.AppSettings["WfcDebugFolder"].ToString();//../../WfcDebug/Current/";
            var subPath  = "Top/";
            var FileInfo = new FileInfo(folderPath + subPath);

            if (!FileInfo.Directory.Exists)
            {
                FileInfo.Directory.Create();
            }
            Helpers.clearFolder(folderPath + subPath);
            for (var i = 0; i < topBmps.Count(); i++)
            {
                var filename = "bmp_" + i.ToString() + ".bmp";
                BitmapOperations.SaveBitmapToFile(folderPath + subPath + filename, topBmps[i]);
            }
            subPath  = "Bottom/";
            FileInfo = new FileInfo(folderPath + subPath);
            if (!FileInfo.Directory.Exists)
            {
                FileInfo.Directory.Create();
            }
            Helpers.clearFolder(folderPath + subPath);
            for (var i = 0; i < bottomBmps.Count(); i++)
            {
                var filename = "bmp_" + i.ToString() + ".bmp";
                BitmapOperations.SaveBitmapToFile(folderPath + subPath + filename, bottomBmps[i]);
            }
            subPath  = "Left/";
            FileInfo = new FileInfo(folderPath + subPath);
            if (!FileInfo.Directory.Exists)
            {
                FileInfo.Directory.Create();
            }
            Helpers.clearFolder(folderPath + subPath);
            for (var i = 0; i < leftBmps.Count(); i++)
            {
                var filename = "bmp_" + i.ToString() + ".bmp";
                BitmapOperations.SaveBitmapToFile(folderPath + subPath + filename, leftBmps[i]);
            }
            subPath  = "Right/";
            FileInfo = new FileInfo(folderPath + subPath);
            if (!FileInfo.Directory.Exists)
            {
                FileInfo.Directory.Create();
            }
            Helpers.clearFolder(folderPath + subPath);
            for (var i = 0; i < rightBmps.Count(); i++)
            {
                var filename = "bmp_" + i.ToString() + ".bmp";
                BitmapOperations.SaveBitmapToFile(folderPath + subPath + filename, rightBmps[i]);
            }
            subPath  = "CurrentOptions/";
            FileInfo = new FileInfo(folderPath + subPath);
            if (!FileInfo.Directory.Exists)
            {
                FileInfo.Directory.Create();
            }
            Helpers.clearFolder(folderPath + subPath);
            for (var i = 0; i < currentBmps.Count(); i++)
            {
                var filename = "bmp_" + i.ToString() + ".bmp";
                BitmapOperations.SaveBitmapToFile(folderPath + subPath + filename, currentBmps[i]);
            }

            subPath  = "Existing/";
            FileInfo = new FileInfo(folderPath + subPath);
            if (!FileInfo.Directory.Exists)
            {
                FileInfo.Directory.Create();
            }
            Helpers.clearFolder(folderPath + subPath);
            for (var i = 0; i < existingBmps.Count(); i++)
            {
                var filename = "bmp_" + i.ToString() + ".bmp";
                BitmapOperations.SaveBitmapToFile(folderPath + subPath + filename, existingBmps[i]);
            }
        }
Esempio n. 13
0
 public static Bitmap ToBitmap(WcfGrid grid, TilesetConfiguration TilesConfig)
 {
     return(BitmapOperations.CreateBitmapFromTiles(ToTilesList(grid, TilesConfig)));
 }
Esempio n. 14
0
        static void Main(string[] args)
        {
            var tl     = new OpinionatedItem <String>("┌", "┌", WcfVector.GetCross3dShape());
            var tr     = new OpinionatedItem <String>("┐", "┐", WcfVector.GetCross3dShape());
            var bl     = new OpinionatedItem <String>("└", "└", WcfVector.GetCross3dShape());
            var br     = new OpinionatedItem <String>("┘", "┘", WcfVector.GetCross3dShape());
            var h      = new OpinionatedItem <String>("-", "-", WcfVector.GetCross3dShape());
            var v      = new OpinionatedItem <String>("|", "|", WcfVector.GetCross3dShape());
            var em     = new OpinionatedItem <String>(" ", " ", WcfVector.GetCross3dShape());
            var no     = new OpinionatedItem <String>("X", "X", WcfVector.GetCross3dShape());
            var ladder = new OpinionatedItem <String>("L", "L", WcfVector.GetCross3dShape());
            var all    = new List <IOpinionatedItem> {
                tl, tr, br, bl, em, h, v, no, ladder
            };

            em.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl, em, no, v
            }, 1, 0, 0);
            em.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br, em, no, v
            }, -1, 0, 0);
            em.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr, em, no, h
            }, 0, 1, 0);
            em.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br, em, no, h
            }, 0, -1, 0);

            tl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br
            }, 1, 0, 0);
            tl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br
            }, -1, 0, 0);
            tl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br
            }, 0, 1, 0);
            tl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br
            }, 0, -1, 0);

            tr.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl
            }, 1, 0, 0);
            tr.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl
            }, -1, 0, 0);
            tr.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br
            }, 0, 1, 0);
            tr.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br
            }, 0, -1, 0);

            bl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br
            }, 1, 0, 0);
            bl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br
            }, -1, 0, 0);
            bl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr
            }, 0, 1, 0);
            bl.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr
            }, 0, -1, 0);

            br.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl
            }, 1, 0, 0);
            br.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl
            }, -1, 0, 0);
            br.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr
            }, 0, 1, 0);
            br.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr
            }, 0, -1, 0);

            h.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br, h
            }, 1, 0, 0);
            h.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl, h
            }, -1, 0, 0);
            h.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                em, tr, tl
            }, 0, 1, 0);
            h.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                em, br, bl
            }, 0, -1, 0);

            v.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl, em, no, v
            }, 1, 0, 0);
            v.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br, em, no, v
            }, -1, 0, 0);
            v.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                br, bl, v
            }, 0, 1, 0);
            v.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, tl, v
            }, 0, -1, 0);

            no.SetAcceptableInAllDirection(new List <IOpinionatedItem>()
            {
                em
            });
            no.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl, v
            }, 1, 0, 0);
            no.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br, v
            }, -1, 0, 0);
            no.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr, h
            }, 0, 1, 0);
            no.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br, h
            }, 0, -1, 0);

            ladder.SetAcceptableInAllDirection(new List <IOpinionatedItem>()
            {
                em
            });
            ladder.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, bl, v
            }, 1, 0, 0);
            ladder.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tr, br, v
            }, -1, 0, 0);
            ladder.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                tl, tr, h
            }, 0, 1, 0);
            ladder.SetAcceptableInDirection(new List <IOpinionatedItem>()
            {
                bl, br, h
            }, 0, -1, 0);
            ladder.requirements.Add(new Tuple <int, Guid, RequirementComparison>(1, h.Id, RequirementComparison.GreaterThanOrEqualTo));

            /*var tl = new OpinionatedItem<String>("_", "top-left");
             * var tr = new OpinionatedItem<String>(" ", "top-right");
             * var t = new OpinionatedItem<String>(".", "terminator");
             * tl.SetAcceptableInAllDirection(new List<IOpinionatedItem>() { tr, t, tl });
             * tr.SetAcceptableInAllDirection(new List<IOpinionatedItem>() { tr, t, tl });
             * t.SetAcceptableInAllDirection(new List<IOpinionatedItem>() { tr, t, tl });
             *
             * tl.ClearAcceptableInDirection(1, 0, 0);
             * tl.ClearAcceptableInDirection(-1, 0, 0);
             * tl.SetAcceptableInDirection(new List<IOpinionatedItem>() { tl, t }, 1, 0, 0);
             * tl.SetAcceptableInDirection(new List<IOpinionatedItem>() { tl, t }, -1, 0, 0);
             *
             * tr.ClearAcceptableInDirection(1, 0, 0);
             * tr.ClearAcceptableInDirection(-1, 0, 0);
             * tr.SetAcceptableInDirection(new List<IOpinionatedItem>() { t, tr },1,0,0);
             * tr.SetAcceptableInDirection(new List<IOpinionatedItem>() { t, tr }, -1, 0, 0);
             *
             * var wcf = new WcfGrid(0);
             * wcf.Init(10,10,1,new List<IOpinionatedItem>() { tl, tr, t });*/

            var keyVal = ' ';
            var seed   = 21;

            while (keyVal != 'Q' && keyVal != 'q')
            {
                var wcf = new WcfGrid(seed++);
                wcf.Init(20, 10, 1, all);
                List <WcfVector> shape = WcfVector.GetCross3dShape();
                wcf.SetInfluenceShape(shape);

                wcf.CollapseAllRecursive();

                wcf.PrintStatesToConsole2d();
                Console.WriteLine("Press any key to quit.");
                keyVal = Console.ReadKey().KeyChar;
            }
        }
Esempio n. 15
0
        private static void Execute()
        {
            Bitmap tileset = Image.FromFile(ConfigurationManager.AppSettings["TilesetInput"]) as Bitmap;

            tileset = tileset.AddHorizontalMirror();
            List <List <Bitmap> > tiles = BitmapOperations.GetBitmapTiles(tileset, 5, 5);

            Bitmap hTraverseBmp = Image.FromFile(ConfigurationManager.AppSettings["hTraverseInput"]) as Bitmap;
            List <List <Bitmap> > hTraverseDbl = BitmapOperations.GetBitmapTiles(hTraverseBmp, 5, 5);
            Bitmap quickcheck = BitmapOperations.CreateBitmapFromTiles(hTraverseDbl, true);

            BitmapOperations.SaveBitmapToFile(ConfigurationManager.AppSettings["TilesetOutput"], quickcheck);
            List <Bitmap> hTraverse = new List <Bitmap>();

            foreach (var list in hTraverseDbl)
            {
                hTraverse.AddRange(list);
            }

            Bitmap vTraverseBmp = Image.FromFile(ConfigurationManager.AppSettings["vTraverseInput"]) as Bitmap;
            List <List <Bitmap> > vTraverseDbl = BitmapOperations.GetBitmapTiles(vTraverseBmp, 5, 5);
            List <Bitmap>         vTraverse    = new List <Bitmap>();

            foreach (var list in vTraverseDbl)
            {
                vTraverse.AddRange(list);
            }

            var distinctTiles = GetDistinctBitmaps(tiles);

            List <List <Bitmap> > distinctElements = new List <List <Bitmap> >();

            distinctElements.Add(distinctTiles);
            Bitmap tilemapWithSpacing = BitmapOperations.CreateBitmapFromTiles(distinctElements, true);

            BitmapOperations.SaveBitmapToFile(ConfigurationManager.AppSettings["TilesetOutput"], tilemapWithSpacing);


            var opinionatedItemsDistinct = ToOpinionatedList(distinctTiles);

            SetAcceptableItems(opinionatedItemsDistinct, tiles);

            var vTraverseOpinionated = opinionatedItemsDistinct.Where(element => vTraverse.Any(bmp => BitmapOperations.Compare(bmp, element.actualItem))).ToList();
            var hTraverseOpinionated = opinionatedItemsDistinct.Where(element => hTraverse.Any(bmp => BitmapOperations.Compare(bmp, element.actualItem))).ToList();


            for (var i = 0; i < 5; i++)
            {
                var wcf = new WcfGrid();
                wcf.Init(20, 10, 1, opinionatedItemsDistinct);
                List <WcfVector> shape = WcfVector.GetCross3dShape();
                wcf.SetInfluenceShape(shape);


                //Manual Edits
                //in and out
                AddDoor(wcf, opinionatedItemsDistinct[1], 5);
                //border
                AddBorder(wcf, opinionatedItemsDistinct[0], 5);
                //add path
                AddPath(wcf, hTraverseOpinionated, 5);


                var result = wcf.CollapseAllRecursive();
                //if (result == false)
                //continue;

                var collapsedTiles = ToTilesList(wcf);
                wcf.PrintStatesToConsole2d();

                Bitmap tilesetRedux = BitmapOperations.CreateBitmapFromTiles(collapsedTiles);
                BitmapOperations.SaveBitmapToFile(
                    ConfigurationManager.AppSettings["BitmapOutput"].Replace(
                        ".bmp",
                        i.ToString() + ".bmp"
                        ),
                    tilesetRedux);
            }
        }