O resultado é quase o mesmo, porém a minha bolinha se move de varias maneiras pulsando sem parar e a cada batida muda de direção e cor. PS: Para ficar mais intuitivo aumentei a velocidade da bolinha. Segue código;
<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);
var cor = ["red", "green", "blue", "purple", "black", "orange", "yellow", "brown", "gray", "pink"];
var indice = 0;
function desenhaCirculo(x, y, raio) {
pincel.fillStyle = cor[indice];
pincel.beginPath();
pincel.arc(x, y, raio, 0, 2 * Math.PI);
pincel.fill();
}
function limpaTela() {
pincel.clearRect(0, 0, 600, 400);
}
var x = 20;
var direção = 1;
var y = 20;
var sobeDesce = 1;
var raio = 20;
var raioMaxMin = 1;
function criaBolinha() {
limpaTela();
if(indice >= cor.length) {
indice = 0;
}
if(raio > 30) {
raioMaxMin = -1;
}else if(raio < 20) {
raioMaxMin = 1;
}
if(x > 560) {
direção = -1;
indice++;
}else if(x < 40) {
direção = 1;
indice++;
}if(y > 360) {
sobeDesce = -1;
indice++;
}else if(y < 40) {
sobeDesce = 1;
indice++;
}
desenhaCirculo(x, y, raio);
y = y + sobeDesce;
x = x + direção;
raio = raio + raioMaxMin;
}
setInterval(criaBolinha, 5);
</script>