# Randomise Asteroids from sky

Good evening programmers!
I want to program a game where asteroids fall from the sky. Does anyone know how I can happen this to come from above? The asteroids are just normal circles.
Kind regards

Make the circles move, e.g. increase the y-value of the coordinates over time. If you start with y=0 and then increase y it should look as if they are falling down.

Hi,

When you have a problem like this, the first thing to do is to identify the properties of the object that you are going to model. In this case, itâ€™s an Asteroid :

• It can fall from the sky (in fact the top of the screen) so it needs a location in 2D space (since a screen is in two dimensions)

• Every asteroid is not the same so the donâ€™t fall at the same speed, you need to take that into account (their velocity)

• It has a certain shape, here itâ€™s a circle with a size, its diameter

With that you have a description of your Asteroid but how do you translate it to code? Naively you could do it like this :

``````int xAsteroid = 50, yAsteroid = 100;
int velocity = 5;
int diameter = 10;

// Move it...
``````

This can work for a single asteroid (even itâ€™s not recommended) but you need to have multiple rocks. So you are going to duplicate all the above variables? This is not possible if you have 100 asteroidsâ€¦

So what is the solution? Luckily for us, Java is an object oriented programming language. This means that we can create objects in code. Objects are defined by a class, itâ€™s a data representation of the objects you want to model. Enough theory, this is how to apply it to the Asteroid :

``````class Asteroid {
float diameter;
PVector location, velocity;
}
``````

This simply says that our Asteroid class is storing a diameter, location and velocity (defined as PVector since they are vectorsâ€¦). This is exactly what we want. Think of it as a container for your data.

Now how do I create an Asteroid? I need a way to construct an asteroid by specifying itâ€™s properties (like initial location). This is the role of the constructor :

``````class Asteroid {
float diameter;
PVector location, velocity;

// Constructor of the class
Asteroid(float diameter, PVector location, PVector velocity) {
this.diameter = diameter;
this.location = location;
this.velocity = velocity;
}
}
``````

Here we just pass the values for the variables we defined earlier and then just say the current objectâ€™s diameter equals the diameter that we pass to the constructor. This is more clear when we use it :

``````// Create an asteroid with a size of 50,
// at location 0, 0 and speed to fall from the top
Asteroid asteroid = new Asteroid(50, new PVector(0, 0), new PVector(0, 1));
``````

(notice that here we also used new to create the vectors since they are objects)

Now we have a class representing our asteroid but we can do a lot more! For example updating itâ€™s location, display itâ€¦

If you already know this, you know what to do next! Otherwise I encourage you to check this tutorial from the Processing website :

After you should see why object oriented programming is the way to go

2 Likes