public userMapClass(int minimumWidth, int maximumWidth, int minumumHeight, int maximumHeight, int numberOfEnemies, int numberOfGold)
        {
            this.width  = rnd.Next(minimumWidth, maximumWidth + 1);
            this.height = rnd.Next(minumumHeight, maximumHeight + 1);



            this.map = new userTileClass[height, width];


            int max_num_enemies = ((width - 2) * (height - 2)) - 1;

            if (numberOfEnemies > max_num_enemies)


            {
                numberOfEnemies = max_num_enemies;
            }


            this.userEnemies = new EnemyClass[numberOfEnemies];

            createAnEmptyMap();
            this.hero = (HeroClass)create(userTileClass.tileType.Hero);
            map[hero.getY(), hero.getX()] = hero;


            for (int i = 0; i < userEnemies.Length; ++i)
            {
                userEnemies[i] = (EnemyClass)create(userTileClass.tileType.Enemy);
                map[userEnemies[i].getY(), userEnemies[i].getX()] = userEnemies[i];
            }



            int maximumAmountOfGold = ((width - 2) * (height - 2)) - 1 - userEnemies.Length;

            if (numberOfGold > maximumAmountOfGold)
            {
                numberOfGold = maximumAmountOfGold;
            }


            this.items = new ItemClass[numberOfGold];


            for (int i = 0; i < items.Length; ++i)

            {
                items[i] = (GoldClass)create(userTileClass.tileType.Gold);
                map[items[i].getY(), items[i].getX()] = items[i];
            }

            updateVision();
        }
        public String attackEnemy(CharacterClass.Movement move)
        {
            HeroClass     h      = map.provideHero();
            userTileClass target = new emptyUserTileClass(0, 0);

            switch (move)
            {
            case CharacterClass.Movement.MoveUp:
                target = map.provideMap()[h.getY() - 1, h.getX()];
                break;

            case CharacterClass.Movement.MoveDown:
                target = map.provideMap()[h.getY() + 1, h.getX()];
                break;

            case CharacterClass.Movement.MoveLeft:
                target = map.provideMap()[h.getY(), h.getX() - 1];
                break;

            case CharacterClass.Movement.MoveRight:
                target = map.provideMap()[h.getY(), h.getX() + 1];
                break;
            }

            if (target is EnemyClass)
            {
                h.Attack((CharacterClass)target);
                CharacterClass c_target = (CharacterClass)target;

                if (c_target.died())
                {
                    map.MapRemoval(c_target);
                }

                movementOfEnemies();

                if (!c_target.died())
                {
                    return("1" + c_target.ToString());
                }
                else
                {
                    return("The enemy has died");
                }
            }
            else
            {
                return("0");
            }
        }
        public void givenHero(HeroClass hero)

        {
            this.hero = hero;
        }