You can use a 2D regular grid of points (P0, P1, P2, P3, ..., P (m * n) when m is the width and n is the height of this grid)
Each point is associated with 1) a Boolean statement that this grid point was used or not, and 2) a βshiftβ from this grid position to avoid too much regularity. (or you can put the point + shear coordinates in your allready grid)
Then, when you need a new point, just select a random point on your grid that has not been used, select that point as βusedβ and use the Point + shift in your game.
Depending on the n, m, width / height of your 2D space and the number of points you are going to use, this might just be great.
source share