如何在java中根据特定条件为游戏生成随机棋盘?

如何在java中根据特定条件为游戏生成随机棋盘?,java,random,generator,Java,Random,Generator,我正在为大学项目制作一个棋盘游戏,它需要用java完成, 我陷入的部分是生成棋盘游戏现在想象一下,我们有一个正方形的棋盘,它的大小是可变的,这意味着玩家在游戏开始时决定, 电路板由单元组成,我定义了一个表示单元的类(下面的UML类) 而棋盘只是一个二维单元数组(游戏类的UML),每个单元都有一个生物群落(山、平原、沙漠、森林、海洋)生物群落在枚举中定义, 现在我的问题是,我需要为每场游戏生成一个随机棋盘,borad需要满足两个条件: 董事会的2/3必须是海洋 一座山、平原、森林或沙漠必须至少有一

我正在为大学项目制作一个棋盘游戏,它需要用java完成, 我陷入的部分是生成棋盘游戏现在想象一下,我们有一个正方形的棋盘,它的大小是可变的,这意味着玩家在游戏开始时决定, 电路板由单元组成,我定义了一个表示单元的类(下面的UML类) 而棋盘只是一个二维单元数组(游戏类的UML),每个单元都有一个生物群落(山、平原、沙漠、森林、海洋)生物群落在枚举中定义, 现在我的问题是,我需要为每场游戏生成一个随机棋盘,borad需要满足两个条件:

  • 董事会的2/3必须是海洋
  • 一座山、平原、森林或沙漠必须至少有一个不是海洋生物群落的邻居,我所说的邻居是指它的北部、南部、东部或西部。 第一个条件很容易实现,但第二个条件我不知道如何实现。我在网上四处看看,但没有什么与我的条件类似。 下图中有一个板的示例(蓝色单元格表示海洋,黄色单元格表示沙漠,浅绿色单元格表示平原,绿色单元格表示森林,棕色单元格表示山脉)
  • 生物群落名录代码

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

    我想你会一行一行或一列一列地填写你的董事会

    你知道:

    • 董事会的规模
    • 海洋要多少钱
    • 多少可以是其他的(节省多少可以是其他的ie
      int nonOceanBiomeLeft
    • 你已经填了多少
    填充时,对于每个字段,您将随机决定(取决于其权重)要设置的内容。放置非海洋生物群落时,会将
    nonOceanBiomeLeft
    减少一。如果它已经在另一个非Ocean附近,您就在这里停下来查看该字段,否则您需要再次减少
    nonOceanBioEleft
    ,并将其添加到类似
    int nonOceanBlocked
    (如果您的新字段没有邻居),这是为了确保你不会在某个地方创造一个新的海洋生物群落,也不会有满足条件的生物群落。所以如果你一无所有,你就无法创造一个海洋生物群落

    如果您有
    nonOceanBlocked>0
    ,您需要观察上面一行中的邻居,如果它是一个单独的非海洋生物群落(因此保存每个字段的邻居信息或动态计算)。如果上面一行中的邻居是单独的,您需要添加一个noOcean,然后从
    nonOceanBlocked
    中删除一个noOcean,因为这个邻居有一个邻居,您不需要再次增加
    nonOceanBlocked

    此外,如果你创建了一个新的海洋生物群落,而最后一个区域是一个单独的海洋生物群落,你也可以减少海洋生物群落的数量

    小心

    • 最后一行:您需要立即给邻居,不能等待下一行,因为没有
    • 如果只有
      nonOceanBioEleft
      等于1,则不能将其放置在没有邻居的位置,因为需要将其
    这只是对你能做什么的理论描述,但对于一个大学项目,我想你应该自己做大部分工作;) 我希望它能帮助你作为填补董事会空缺的起点