Bom, eu dei uma modificada no código e fiz uma função para gerar as flores aleatoriamente, para a minha surpresa funcionou , porem vez em nunca duas ou três flores se sobrepõe, com posições próximas ou, em raras vezes, com a mesma posição. Como impedir que isso aconteça?
Segunda duvida é, a função floresAleatorias me parece uma macarronada, eu tô com a sensação que deveria dividi-la em umas duas pelo menos, tô certo? E se sim como seria a forma mais adequada?
edit* - a função floresAleatorias também impedem as flores de serem geradas fora do canvas, ou serem cortadas nas bordas.
Seque o codigo:
<canvas width="600" height="400"></canvas>
<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);
function numeroAleatorio () {
return Math.round(Math.random() * 1000);
}
function desenhaCirculo(x, y, raio, cor) {
pincel.fillStyle = cor;
pincel.beginPath();
pincel.arc(x, y, raio, 0, 2*3.14);
pincel.fill();
}
function desenhaFlor (x, y, raio) {
desenhaCirculo(x, y, raio, "red");
desenhaCirculo(x, y - (raio * 2), raio, "yellow");
desenhaCirculo(x, y + (raio * 2), raio, "blue");
desenhaCirculo(x - (raio * 2), y, raio, "orange");
desenhaCirculo(x + (raio * 2), y, raio, "black");
}
function floresAleatorias (numeroFlores, raio) {
for (var i = 0; i < numeroFlores; i++) {
var cordenadas = [];
var valida = false;
while (valida == false) {
var cordenada = numeroAleatorio();
if (cordenada <= 600 - (raio * 3) && cordenada >= 0 + (raio * 3)) {
cordenadas.push(cordenada);
break;
}
}
while (valida == false) {
var cordenada = numeroAleatorio();
if (cordenada <= 400 - (raio * 3) && cordenada >= 0 + (raio * 3)) {
cordenadas.push(cordenada);
break;
}
}
desenhaFlor(cordenadas[0], cordenadas[1], raio);
}
}
var raio = 5;
floresAleatorias(5, raio)
</script>