public Room(int width, int height, int[] exitPos, bool exitOpen, int coinCount, int[,] coinPos,
            int enemyCount, List<Enemy> enemies, List<GameItem> items, Boss boss, Shopkeeper shopkeeper)
        {
            this.width = width;
            this.height = height;
            this.exitPos = exitPos;
            this.exitOpen = exitOpen;
            this.coinCount = coinCount;
            this.coinPos = coinPos;
            this.enemyCount = enemyCount;
            this.enemies = enemies;
            this.items = items;
            this.boss = boss;
            this.shopkeeper = shopkeeper;

            map = new char[height, (width + 1)];

            if (boss != null)
            {
                boss.y = 2;
                boss.x = (width - 1) / 2;
            }

            if (shopkeeper != null)
            {
                shopkeeper.y = 2;
                shopkeeper.x = (width - 1) / 2;
            }
        }
        public bool Update(Player player)
        {
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width + 1; x++)
                {
                    if (x == width)
                        map[y, x] = '\n';
                    else if (x == 0 || x == width - 1 || y == 0 || y == height - 1)
                        map[y, x] = '#';
                    else map[y, x] = '=';
                }
            }

            for (int i = 0; i < coinPos.GetLength(0); i++ )
            {
                if (player.y == coinPos[i, 0] && player.x == coinPos[i, 1])
                {
                    coinPos[i, 0] = 0;
                    coinPos[i, 1] = 0;

                    player.gold += (int)Math.Ceiling(player.level / 2.0);
                }

                if (!(coinPos[i, 0] == 0 && coinPos[i, 1] == 0))
                    map[coinPos[i, 0], coinPos[i, 1]] = 'c';

            }

            if (exitOpen)
            {
                map[exitPos[0], exitPos[1]] = '█';

                if (exitPos[0] == player.y && exitPos[1] == player.x)
                    return true;
            }

            List<Enemy> deadEnemies = new List<Enemy>();
            List<GameItem> collectedItems = new List<GameItem>();

            foreach (GameItem item in items)
            {
                map[item.y, item.x] = item.ToChar();

                if (item.x == player.x && item.y == player.y)
                {
                    player.inventory.Add(item);
                    collectedItems.Add(item);
                }
            }

            foreach (Enemy e in enemies)
            {
                e.Update(player);
                map[e.y, e.x] = e.ToChar();

                if (e.y == player.y && e.x == player.x)
                {
                    BattleScreen battle = new BattleScreen(player, e);
                    if (battle.DoBattle())
                        deadEnemies.Add(e);
                    else Environment.Exit(0);
                }
            }

            foreach (GameItem i in collectedItems)
            {
                items.Remove(i);
            }

            foreach (Enemy e in deadEnemies)
            {
                enemies.Remove(e);
            }

            if (shopkeeper != null)
            {
                map[shopkeeper.y, shopkeeper.x] = shopkeeper.ToChar();

                if (player.x == shopkeeper.x && player.y == shopkeeper.y)
                {
                    shopkeeper.Shop(player);
                    player.y++;
                }
            }

            if (boss != null)
            {
                map[boss.y, boss.x] = boss.ToChar();

                if (player.x == boss.x && player.y == boss.y)
                {
                    BattleScreen battle = new BattleScreen(player, boss);
                    if (battle.DoBattle())
                    {
                        player.y++;
                        exitOpen = true;
                        map[boss.y, boss.x] = boss.itemDrop.ToChar();
                        boss.itemDrop.x = boss.x;
                        boss.itemDrop.y = boss.y;
                        items.Add(boss.itemDrop);
                        boss = null;
                    }
                    else Environment.Exit(0);
                }
            }

            map[player.y, player.x] = '@';

            return false;
        }
        public Room(int width, int height, Boss boss)
        {
            random = new Random();

            this.width = width;
            this.height = height;
            this.coinCount = 0;
            this.enemyCount = 0;

            exitOpen = false;

            enemies = new List<Enemy>();
            items = new List<GameItem>();

            this.boss = boss;

            map = new char[height, (width + 1)];
            coinPos = new int[coinCount, 2];

            exitPos = new int[2] { height - 2, (width - 1) / 2 };

            boss.y = 2;
            boss.x = (width - 1) / 2;
        }