首页 > 解决方案 > 如何根据特定条件在java中为游戏生成随机棋盘?

问题描述

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

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

生物群系枚举代码

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

类 Cell 的 UML 类游戏的UML 板子示例

标签: javarandomgenerator

解决方案


我猜你会逐行或逐列填写你的董事会。

你知道:

  • 板子尺寸
  • 多少必须是海洋
  • 可以是多少其他(保存多少可以是其他ie int nonOceanBiomeLeft
  • 你已经填了多少

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

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

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

小心

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

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


推荐阅读