所有。我正在开发一个小型游戏,在这个游戏中创建一个2D数组来容纳" map"游戏游戏产生了一个玩家和一堆各种各样的物品。细胞看起来像这样:
private String [][] cells;
...
public void set(int cellX, int cellY, String str)
{
cells[cellX][cellY] = str;
}
每个String说明每个地方的单元格是什么样的。例如,有时墙会产生,有时会创建通道(这都是从文件中读取的)。所以问题是:
如何在某些细胞上随机生成物体?例如,如果我总共有36个单元格(6x6),但只有23个单元格可以移动#34;在玩家身上,我如何随机生成每个产生相等机会的物品?
到目前为止我的代码就是这个。
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();
}
答案 0 :(得分:2)
您可以创建一个有资格在其上放置项目的Points的ArrayList,然后使用[your ArrayList's name].get(Math.random() * [your ArrayList's name].size())
答案 1 :(得分:2)
所以,在与OP聊天时讨论了这个问题,从问题帖子看起来有点混乱:
Item
,例如Key
和Gem
。Item
有一个必须每轮产生的限制数。例如,每轮可能产生5 Gem
。所以,要解决这个问题,我的建议是:
ArrayList
Cell
。存放所有通道的细胞。看起来应该是这样的:
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
。所以,我给了他2条建议:
CellInfo
,可能是Wall
,Passage
,Item
等的父级。但是,这需要对实际工作进行大量更改。例如,他实际上是从文件中读取迷宫。ArrayList
Item
和Cell
应该绘制的draw
。在String
方法中,在绘制了所有墙和通道(迷宫中使用ArrayList
表示的唯一内容)之后,遍历此{{1}}并将它们绘制在相应的位置。