Hi,

Welcome to the forum!

Please note that you can format your code using the `</>`

button when editing your message on the forum or enclose your code with backticks : ``` your code ``` → `your code`

There’s some errors in your code, I don’t know if it’s the copy pasting stuff but you rather want : `x--;`

instead of `x-;`

line 35

I think that you are doing too much conditions here and if you want the ellipse to go back, it’s going to add even more complexity. You have 4 conditions for switching before one direction to the other and 4 conditions to move the ball depending on it’s direction.

What I would do is : create a `t`

variable representing the time of your animation between `0`

and `1`

. So if I say `0.5`

, then it’s representing the ball at half the animation.

Also you manually specified the values of the border of the window (`270`

, `30`

for example) but what if I want the window size to change? And the ball size?

I would go like this :

```
// Ball parameters
float ballSize = 60;
float ballRadius = ballSize / 2;
// Time parameters
float t = 0;
float timeOffset = 0.005;
// The direction of the ball
boolean forward = true;
void setup() {
size(300, 300);
}
void draw() {
background(0);
float x, y;
// Test for each portions
if (t >= 0 && t < 0.25) { // Up
x = map(t, 0, 0.25, ballRadius, width - ballRadius);
y = ballSize / 2;
} else if (t >= 0.25 && t < 0.5) { // Right
x = width - ballRadius;
y = map(t, 0.25, 0.5, ballRadius, height - ballRadius);
} else if (t >= 0.5 && t < 0.75) { // Down
x = map(t, 0.5, 0.75, width - ballRadius, ballRadius);
y = height - ballRadius;
} else { // Left
x = ballRadius;
y = map(t, 0.75, 1, height - ballRadius, ballRadius);
}
// Display the circle
circle(x, y, ballSize);
// Move forward or backward in the animation
if (forward) {
t += timeOffset;
} else {
t -= timeOffset;
}
// If the animation is finished, invert the direction
if (t > 1 || t < 0) {
forward = !forward;
}
}
```

Since the window is a square, I am dividing the animation in 4 steps for the sides. `1 / 4 = 0.25`

so each time I check if the time is between `[0, 0.25[`

or `[0.25, 0.5[`

or `[0.5, 0.75[`

… then based on that I use the `map()`

function to get the x and y location of the ball based on the time.

I made a little sketch to explain that :

Hope it helps!