 # Placing houses on random generated map?

EDIT: Fixed it by checking distance between houses.

If I create a random generated map with 2 dimension array like , how could I add random houses?
I thought about putting a random number inside every array field and if the number is like 7, then a house will be generated there.
I would have to edit the surrounding arrays to make it like a house shape.

But the problem is, what if many houses spawn close together? Then it would be weird having houses inside each other.
Is there some other solution?

``````int mapArray[][]= new int;
``````
``````
public void createMap(){
Random rand = new Random();

for (int x = 0; x < mapArray.length; x++) {
for (int y = 0; y < mapArray[x].length; y++) {
int i = rand.nextInt(200);
if (i==199) mapArray[x][y] = 2;
else if (i > 150) mapArray[x][y] = 1;
else mapArray[x][y] = 0;
}
}
}

``````

2 means a house should be build. 0 is grass tile and 1 earth.

I draw Map like this:

``````
public void drawMap(Graphics g){
for (int x = 0; x < mapArray.length; x++) {
for (int y = 0; y < mapArray[x].length; y++) {
switch (mapArray[x][y]) {
case 0: g.drawImage(grass, x * 64, y * 64);
break;
case 1: g.drawImage(earth, x * 64, y * 64);
break;
case 2: g.drawImage(stone, x * 64, y * 64);
break;
}
}
}
}

``````

Hi, GustavXIII!

The way I usually do is for every object I’ve created in the map, it will hold his position AND size, like (x, y, width, height). And all of them will be added to a List (Array, LinkedList, etc)

So, any time you will try to create an object, you check before, using simple rectangle collision between the new one and all of the array, like so:

``````class ObjectCreator(){

public static void createObject(){

MyObject newObject = new MyObject(random_x, random_y, type_of_object_width, type_of_object_height);

boolean collide = false;

for(MyObject myobj : arrayOfMyObjects){
if(collides(myobj, newObject)){
//OBJECTS ARE COLLIDING, SO YOU DON'T ADD
collide = true;
return; //just one collide is enough, don't need to continue walkin the array
}
}

if(!collide){
}

}
public boolean collides(MyObject A, MyObject B){

Rectangle rA = new Rectangle(A.x, A.y, A.width, A.height);
Rectangle rB = new Rectangle(B.x, B.y, B.width, B.height);

return rA.intersects(rB);
}

}
``````

This way you can have multiple objects with different sizes.

Hope it can help!