gpt4 book ai didi

java - 在二维数组中创建随机生成的对象

转载 作者:行者123 更新时间:2023-12-01 18:18:43 25 4
gpt4 key购买 nike

全部。我正在开发一个小游戏,其中创建一个 2D 数组来容纳游戏“ map ”的每个图 block 。游戏会产生一个玩家和一堆各种各样的元素。细胞看起来像这样:

private String [][] cells;

...

public void set(int cellX, int cellY, String str)
{
cells[cellX][cellY] = str;
}

每个字符串说明每个位置的单元格的样子。例如,有时会生成一面墙,有时会创建 channel (这都是从文件中读入的)。所以问题是这样的:

如何在某些单元格上随机生成对象?例如,如果我总共有 36 个单元格 (6x6),但其中只有 23 个可以被玩家“移动”,我如何随机生成在每个单元格上产生相同机会的元素?

到目前为止我的代码是这样的。

public void draw()
{
for (int x = 0; x < cells.length; x++)
{
for (int y = 0; y < cells[w].length; y++)
{
if(cells[x][y] == "W"){
Cell wall = new Cell(config.wallImage());
wall.draw(config, x, y);
if(cells[x][y] == "P"){
Cell passage = new CellPassage(config.passageImage());

// This is where I need to check to see if the item is okay
// to be placed. If it is unable, nothing will be added to
// the Cell passage.
//passage.attemptToAdd(item);

passage.draw(config, x, y);
}
}
}
hero.draw();
}

最佳答案

所以,在与OP的聊天中进行了讨论,这就是问题所在,从问题帖子来看,这似乎有点令人困惑:

  1. 每轮都可能会产生元素,例如 key gem
  2. 这些Item有每轮必须产生的数量限制。例如,每轮可能会产生 5 个 gem
  3. 它们必须以相同的概率在 channel 中生成。

因此,为了解决这个问题,我的建议是:

  1. 创建 CellArrayList。储存所有传代细胞。
  2. 生成一个介于 0 和数组长度 - 1 之间的随机数。
  3. 重复此操作,直到达到所需项目的限制。

它应该看起来像这样:

public void addItem(Item item, int limit) 
{
ArrayList<Cell> passages = new ArrayList<Cell>();

for(int x = 0; x < cells.length; x++)
{
for (int y = 0; y < cells[w].length; y++)
{
if (cells[x][y] == "P") //if it's a passage
passages.add(new Cell(x,y));
}
}


Random rand = new Random();
while(spawnedItems < limit){

if(passages.size() == 0)
throw LimitImpossibleError();

int randomNum = rand.nextInt(passages.size());

items.add(new ItemPosition(item, passages.get(randomNum))); //assuming that you have a global ArrayList of Item and respective Cell (ItemPosition) to draw them later
}
}

讨论中OP的另一个问题是稍后如何绘制Item。于是,我给了他两条建议:

  1. 将迷宫的表示更改为代表迷宫中内容的某个对象。例如,CellInfo,它可能是 WallPassageItem 等的父项。但是,需要对实际工作进行很大的改变。例如,他实际上是从文件中读取迷宫。
  2. 拥有一个 ArrayList,其中包含 Item 以及应在其中绘制它的相应 Cell。在draw方法中,绘制完所有的墙壁和 channel (迷宫中唯一用String表示的东西)之后,遍历这个ArrayList并绘制他们在各自的位置。

关于java - 在二维数组中创建随机生成的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com