首页 > 解决方案 > 制作控制台应用游戏,我将如何随机生成房间的位置?

问题描述

这是我想要做的:我有一个名为 RandomRoomGenerator 的类,它有一个名为 GenerateRoom 的方法。这个 GenerateRoom 方法在我的主要方法中调用,基于网格大小(宽度或高度)乘以自身以获得房间总数。该方法本身使用从我的 ItemDB 和 RandomRoomValues 中随机选择的参数创建一个新房间。问题是,我需要一种方法来生成房间的位置,而不会与之前生成的房间重叠。到目前为止,我只能返回 1 个随机值,但会一遍又一遍地复制很多次。其他一切都很好,但我想澄清一下 Random 在 C# 中的工作原理。在我的 GenerateRandomItems 方法中,当我将第一个 .Next() 参数设置为 0 时,无论最大值有多大,它都不会返回一个项目。这里'

public class RandomRoomGenerator
{
    public Room GenerateRoom(int gridSize, ref List<Room> rooms)
    {
        RandomRoomDescriptions randomRoomDescriptions = new RandomRoomDescriptions();
        ItemDB itemDb = new ItemDB();

        string description = randomRoomDescriptions.roomDescriptions[new Random().Next(0, randomRoomDescriptions.roomDescriptions.Count)];

        Room room = new Room(description, GenerateXPos, GenerateYPos, new Random().Next(1, 7), new Random().Next(1, 7), new Random().Next(1, 7), GenerateRandomItems(itemDb));
        return room;
    }





    private List<Item> GenerateRandomItems(ItemDB itemDb)
    {
        List<Item> items = new List<Item>();

        for (int i = 0; i < new Random().Next(0, 2); i++)
        {
            items.Add(itemDb.healItems[new Random().Next(0, itemDb.healItems.Count)]);
        }

        for (int i = 0; i < new Random().Next(0, 2); i++)
        {
            items.Add(itemDb.cleanseItems[new Random().Next(0, itemDb.cleanseItems.Count)]);
        }

        for (int i = 0; i < new Random().Next(0, 2); i++)
        {
            items.Add(itemDb.foodItems[new Random().Next(0, itemDb.foodItems.Count)]);
        }

        for (int i = 0; i < new Random().Next(0, 2); i++)
        {  
            items.Add(itemDb.drinkItems[new Random().Next(0, itemDb.drinkItems.Count)]);
        }

        return items;
    }
}

标签: c#console-application

解决方案


推荐阅读