示例#1
0
        public EntityBase(Color foreground, Color background, int glyph, Map map, bool haveVision = false, int visionRange = 20) : base(1, 1)
        {
            Animation.CurrentFrame[0].Foreground = foreground;
            Animation.CurrentFrame[0].Background = background;
            Animation.CurrentFrame[0].Glyph      = glyph;

            EntityStatus = new EntityStatus();

            Inventory = new Inventory(EntityStatus.MaxWeight);

            this.map = map;

            HaveVision = haveVision;
            if (HaveVision)
            {
                fovmap      = new FOV(map);
                VisionRange = visionRange;
            }

            Equip = new ItemBase("Pickaxe", 10f);
            Equip.ItemBehaviour = ItemBehaviourHelper.Mine();

            random = RandomNumberServiceLocator.GetService();
            logger = LoggingServiceLocator.GetService();

            ID = random.NextUint();
        }
示例#2
0
        public static Map Generate(int w, int h, float oreProbability = 30)
        {
            Console.WriteLine("generating a {0}x{1} map", w, h);
            Map map = new Map(w, h);

            GoRogue.MapGeneration.Generators.CellularAutomataGenerator.Generate(map, RandomNumberServiceLocator.GetService(), connectUsingDefault: false);
            //GoRogue.MapGeneration.Generators.RandomRoomsGenerator.Generate(this, 50, 9, 20, 5);
            SpawnMineral(map, oreProbability);

            //map.Tiles[map.GetCellIndex(5, 5)] = new MineralVein(MineralVein.MineralType.Copper);

            return(map);
        }
示例#3
0
        protected override void Initialize()
        {
            // Generally you don't want to hide the mouse from the user
            IsMouseVisible = true;

            // Finish the initialization of SadConsole
            base.Initialize();

            RandomWrapper randomWrapper = new RandomWrapper(2);

            RandomNumberServiceLocator.Provide(randomWrapper);

            // Create the map
            AdventureScreen = new AdventureScreen();
            AdventureScreen.LoadMap(MapGenerator.Generate(200, 200));
            AdventureScreen.SpawnPlayer();

            SadConsole.ControlsConsole startingConsole = new SadConsole.ControlsConsole(SCREEN_WIDTH, SCREEN_HEIGHT);

            var bt1 = new SadConsole.Controls.Button(5);

            startingConsole.Add(bt1);

            SadConsole.Global.CurrentScreen = startingConsole;

            SadConsole.Global.CurrentScreen.Children.Add(AdventureScreen);

            //SimplexNoiseViewer simplexNoiseViewer = new SimplexNoiseViewer(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
            //simplexNoiseViewer.LoadMap(200, 200, 0.03f);
            //SadConsole.Global.CurrentScreen = simplexNoiseViewer;

            //SadConsole.Window window = new SadConsole.Window(10, 10);
            //window.Title = "status";
            //window.Dragable = true;
            //window.Show();
            //SadConsole.Global.CurrentScreen = startingConsole;
            //SadConsole.Global.CurrentScreen.Children.Add(window);
        }
        public AdventureScreen()
        {
            DungeonScreen             = new DungeonScreen(0, 0, 100, 39, SadConsole.Global.Fonts["IBM"].GetFont(SadConsole.Font.FontSizes.One));
            StatusScreen              = new StatusConsole(110, 2, 40, 19);
            ScrollingConsole          = new ScrollingConsole(40, 15, 10000);
            ScrollingConsole.Position = new Point(110, 22);
            InventoryViewerWindow     = new InventoryViewerWindow()
            {
                Position = new Point(5, 5),
                Dragable = true
            };
            InventoryViewerWindow.Closed += InventoryViewerWindow_Closed;
            Prompt = new Prompt(12, 5, "Exit?", "Warning")
            {
                Position = new Point(70, 15)
            };
            Prompt.Closed += (o, e) =>
            {
                if (Prompt.DialogResult)
                {
                    Environment.Exit(0);
                }
            };
            Children.Add(DungeonScreen);
            Children.Add(StatusScreen);
            Children.Add(ScrollingConsole);
            Children.Add(InventoryViewerWindow);
            Children.Add(Prompt);

            Logger logger = new Logger(ScrollingConsole);

            LoggingServiceLocator.Provide(logger);
            this.logger = LoggingServiceLocator.GetService();

            this.random = RandomNumberServiceLocator.GetService();
        }
示例#5
0
 public ItemBase(string name, float weight, uint id = 0)
 {
     Name   = name;
     Weight = weight;
     ID     = id == 0 ? RandomNumberServiceLocator.GetService().NextUint() : id;
 }
示例#6
0
        private static void SpawnMineral(Map map, float oreProbability)
        {
            List <OreSpawnSetting> list = new List <OreSpawnSetting>()
            {
                new OreSpawnSetting(MineralVein.MineralType.Rock, 150, int.MaxValue, 10, 60),
                new OreSpawnSetting(MineralVein.MineralType.Coal, 100, int.MaxValue, 7, 60),
                new OreSpawnSetting(MineralVein.MineralType.Copper, 60, int.MaxValue, 5, 60),
                new OreSpawnSetting(MineralVein.MineralType.Tin, 60, int.MaxValue, 5, 40),
                new OreSpawnSetting(MineralVein.MineralType.Iron, 40, int.MaxValue, 5, 30),
                new OreSpawnSetting(MineralVein.MineralType.MetalCrystal, 20, int.MaxValue, 3, 15),
                new OreSpawnSetting(MineralVein.MineralType.WaterCrystal, 20, int.MaxValue, 3, 15)
            };

            var random = RandomNumberServiceLocator.GetService();

            foreach (var ore in list)
            {
                int spawncount = 0;
                int spawntry   = 0;
                while (spawntry < ore.MaxSpawnTry && spawncount < ore.MaxSpawnCount)
                {
                    int x = random.Next(0, map.Width);
                    int y = random.Next(0, map.Height);

                    if (map.Tiles[y * map.Width + x] is Wall)
                    {
                        if (random.Next(0, 100) < ore.SpawnProbability)
                        {
                            spawncount += SpawnOreVein(x, y, ore);
                        }
                    }
                    spawntry++;
                }
                Console.WriteLine("spawned {1} {0} cell", ore.OreType, spawncount);
            }

            int SpawnOreVein(int x, int y, OreSpawnSetting ore)
            {
                int       veinLength = 1;
                Direction dir;

                map.Tiles[y * map.Width + x] = new MineralVein(ore.OreType);

                while (veinLength < ore.MaxVeinLength)
                {
                    dir = (Direction)random.Next(0, 9);
                    if (dir == Direction.Center || dir == Direction.Void)
                    {
                        break;
                    }

                    HelperMethod.GetNearbyPoint(x, y, dir, out int xd, out int yd);

                    int cellIndex = yd * map.Width + xd;
                    if ((cellIndex < 0) || (cellIndex > (map.Width * map.Height - 1)))
                    {
                        break;
                    }

                    map.Tiles[cellIndex] = new MineralVein(ore.OreType);
                    veinLength++;
                }

                return(veinLength);
            }
        }