【问题标题】:How to generate random board for a game in java but according to specefic conditions?如何根据特定条件在java中为游戏生成随机棋盘?
【发布时间】:2021-05-10 11:32:12
【问题描述】:

我正在为大学项目制作棋盘游戏,需要用 Java 完成, 我被困在的部分是生成棋盘游戏现在想象一下我们有一个方形的棋盘,它的大小是可变的,这意味着玩家在游戏开始时就决定了, 并且板由单元组成,我定义了一个代表单元的类(下面的类的 UML) 并且棋盘只是一个二维单元格数组(游戏类的 UML),每个单元格都有一个生物群落 (MOUNTAIN, PLAIN, DESERT, FOREST, OCEAN) 生物群落在枚举中定义, 现在我的问题是我需要为每个游戏生成一个随机棋盘,并且棋盘需要满足两个条件:

  1. 董事会的 2/3 必须是 OCEAN
  2. 山、平原、森林或沙漠必须至少有一个不是海洋生物群系的邻居,我的邻居是指在其北部、南部、东部或西部。 第一个条件很容易实现,但第二个条件我不知道如何在网上环顾四周,但没有什么与我的条件相似。 下图中有一个棋盘示例(蓝色单元格是海洋,黄色单元格是沙漠,浅绿色是平原,绿色是森林,棕色是山地)。

生物群系枚举代码

public enum Biome {
    MOUNTAIN, PLAIN, DESERT, FOREST, OCEAN;
}

【问题讨论】:

    标签: java random generator


    【解决方案1】:

    我猜你会逐行或逐列填满你的板子。

    你知道的:

    • 电路板尺寸
    • 一定是海洋
    • 可以是多少其他(除了可以是其他多少,即int nonOceanBiomeLeft
    • 你已经填了多少

    当您填写时,对于每个字段,您随机决定(取决于其权重)您将设置什么。当你放置一个非海洋生物群系时,你会将nonOceanBiomeLeft 减一。如果它已经在另一个非海洋附近,则在该字段中停下来,否则您需要再减少一次 nonOceanBiomeLeft 并在 int nonOceanBlocked 之类的东西上添加一个(如果您的新字段没有邻居),这是为了确保您没有在某处创建新的 noOcean 生物群系,并且没有任何人可以满足条件。因此,如果您一无所有,您就无法创建 noOcean 生物群系。

    如果您有nonOceanBlocked > 0,如果它是一个单独的非海洋生物群系,则需要注意上面一行中的邻居(因此请保存每个字段的邻居信息或即时计算)。如果上一行中的邻居是一个人,您需要添加一个 noOcean 并从 nonOceanBlocked 中删除一个 由于这个邻居有一个邻居,您不需要再次增加 nonOceanBlocked

    此外,如果您创建了一个新的 noOcean 生物群系,并且最后一个字段是一个单独的 noOcean,您也可以减少 nnoOceanBlocked

    小心

    • 最后一行:那里你需要立即给邻居,不能等待下一行,因为没有。
    • 如果只有 nonOceanBiomeLeft 等于 1,则您不能将其放置在没有邻居的地方,因为您需要 d

    这只是对您可以做什么的理论上的描述,但对于大学项目,我想您应该自己完成大部分工作;) 我希望它可以帮助您作为填写董事会的起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多