Пример #1
0
        /// <summary>
        /// Creates a new instance of everything.  New hero, clears mobs and items
        /// </summary>
        public static void InitMaze()
        {
            GetResourcesPath();
              ReloadImages();

              if(items == null)
            items = new ArrayList();

              if(mobs == null)
            mobs = new ArrayList();

              hero = new Hero();
              items.Clear();
              mobs.Clear();

              GenerateMaze();
        }
Пример #2
0
        /// <summary>
        /// Generates a single level of the dungeon.
        /// Creates the maze, sets walls, places stair tiles, items, mobs and the hero.
        /// Does noterase the inventory of the hero, but will clear the items and mobs lists prior to placement.
        /// </summary>
        public static void GenerateMaze()
        {
            if( hero == null )
            hero = new Hero();

              // new level means old lists are gone forever
              items.Clear();
              mobs.Clear();

              if(grid == null)
              {
            // no existing dungeon - set initial values
            dungeonLevel = 1;
            width = minWidth;
            height = minHeight;
            pathWidth = maxPathWidth;
              }
              else
              {
            // dungeon exists - figure new values based on which way the Hero went (up or down)
            if(grid[hero.x, hero.y].type == FloorType.StairsDown)
              dungeonLevel++;
            else if(grid[hero.x, hero.y].type == FloorType.StairsUp)
              if(--dungeonLevel < 1) // can't go to level zero or -1 or something silly
            dungeonLevel = 1;

            pathWidth = Math.Max(maxPathWidth-dungeonLevel, minPathWidth);
            width     = Math.Max(minWidth, Math.Min(dungeonLevel, maxWidth));
            height    = Math.Max(minHeight, Math.Min(dungeonLevel, maxHeight));
              }

              // request a maze from MazeGenerator with the new parameters
              //grid = MazeGenerator.GenerateMaze( width,
              //                                   height,
              //                                   pathWidth,
              //                                   1.25f - Random(50)/100.0f  // yields 75% to 125%, so a 50% chance to have less than 100% of the maze full.
              //                                 );

              //
              // DEBUG Stuff
              //
              //Generator.MazeType debugMazeType = Generator.MazeType.Castle;
              float debugPercentFull = 1.25f - Random(50) / 100.0f;
              //grid = MazeGenerator.GenerateMaze(width,
              //                                   height,
              //                                   pathWidth,
              //                                   debugMazeType,
              //                                   debugPercentFull
              //                                 );
              grid = MazeGenerator.GenerateMaze(width,
                                         height,
                                         pathWidth,
                                         type,
                                         debugPercentFull
                                       );

              //
              // End DEBUG stuff
              //

              // define new visibility mask for minimap
              visibility = new bool[grid.GetLength(0), grid.GetLength(1)];

              // define now minimap
              if(miniMap != null)
            miniMap.Dispose();

              miniMap = new Bitmap(mmScale*grid.GetLength(0), mmScale*grid.GetLength(1));
              Graphics mmg = Graphics.FromImage(miniMap);
              mmg.Clear(Color.Black);
              mmg.Dispose();

              // set each floorTile to the right type (wall/floor) based on mazeMask values (true = wall up, false = wall down = floor)
              //for(int i=0; i<grid.GetLength(0); i++)
              //  for(int j=0; j<grid.GetLength(1); j++)
              //    grid[i, j] = new FloorTile(i, j, mazeMask[i, j] ? FloorType.Wall : FloorType.Floor );

              //
              // DEBUG - testing purposes, only place the hero for now.
              //

              // put all the stuff that makes it a level.
              hero.x = grid.GetLength(0)/2;
              hero.y = grid.GetLength(1)/2;

              if(!true)
              {
            PlaceHero();                  // hero 1st - we check their position when placing mobs.  If they're not there, this check will cause a crash.
            PlaceStairs(width / 2, 1);    // warp to another level
            PlaceMobs(width * 2);       // throw some bad guys in for the Hero to beat up
            PlaceItems(width);          // OMGWTFPWN3DBBQLootz!!1!
              }
        }