c# - 制作控制台应用游戏,我将如何随机生成房间的位置?
问题描述
这是我想要做的:我有一个名为 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;
}
}
解决方案
推荐阅读
- lisp - 当您尝试打印变量时,有没有办法打印错误消息?
- node.js - 是否可以使用 frontend-maven-plugin 在开发模式下启动 Web 应用程序(vuejs+springboot)?
- python - 如何解决 ValueError 长度不匹配 预期轴有 0 个元素,新值有 7 个元素
- c# - .NET Core 2.2 如何正确防御 XSS
- sql - 有没有办法在 Presto 中执行 FOR LOOP?
- android - android.support.v4.media.MediaBrowserCompat$CallbackHandler 错误的原因
- mysql - SQL 中的对称对与 JOIN
- python - 使用小部件后端时如何删除 matplotlib 图的窗口标题
- java - 如何测试 java.net.http (Java 11) 请求 BodyPublisher?
- spring-boot - Spring boot config log4j2使用Web查找不起作用