Your three ellipses are drawn at (250,250), (250,270), and (250,290). Notice that only the Y position changes. It starts at 250, and increases by 20 each time.
Your looping variable, i starts at 0, and then is 1, and then 2.
Consider what the value of (150 + 20 * i) is for each of these values for i.
Now try drawing an ellipse inside your loop. What is the X position? What is the Y position?!?
remember to hit ctrl-t to get auto-format in processing.
Then you’ll see you had one misplaced }.
I rewrote some of the code. See below.
What you should do: Think of how the snake moves when it’s longer. Best use an array (or two arrays, one for xValues and one yValues) to keep track of the positions of each cell/ellipse within the snake. Your for loop essentially just displays each position / ellipse of the array.
Moving the snake means to copy from the head into the array and move each data one slot down the array.
Chrisir
Rewritten code
with not much changes
final int SNAKE_SIZE=20;
final int X_SPEED = 1;
final int Y_SPEED = 1;
int x = 250;
int y = 250;
int SNAKE_LENGTH=3;
// ---------------------------------------------------------------------------
void setup() {
size(500, 500);
background(220);
y=250;
}
//ellipse(250,290,SNAKE_SIZE,SNAKE_SIZE);
void draw() {
background(220);
if (x >= 500 || x <= 0) {
background(0);
}
if (y >= 500 || y <= 0) {
background(0);
}
drawSnake();
}
void drawSnake() {
int y2=0;
for (int i=0; i<SNAKE_LENGTH; i++) {
ellipse(x, y+y2, SNAKE_SIZE, SNAKE_SIZE);
y2+=20;
}
}
void keyPressed() {
if (key=='w') {
drawSnake();
y -= Y_SPEED;
}
if (key=='s') {
drawSnake();
y += Y_SPEED;
}
if (key=='a') {
drawSnake();
x -= X_SPEED;
}
if (key=='d') {
drawSnake();
x += X_SPEED;
}
}
//
thank you so much my problem is getting the snake to increase in size after it eats food my formula is not working
int growth = 3;
final int X_SPEED = 1;
final int Y_SPEED = 1;
final int SNAKE_SIZE=15;
final int SNAKE_LENGTH=SNAKE_SIZE*growth;
int x = width/2;
int y =height/2;
float foodX = random(0, 500);
float foodY = random(0, 500);
int foodSize = 15;
boolean hit = false; //controls hit detection logic for when the snake hits the food
int totalHits = 0; //the game will start at 0 points and in increase by 1 with each food catpure
final int MAX_HITS =5;
//final int SNAKE_LENGTH=3;
// ---------------------------------------------------------------------------
void setup() {
size(500, 500);
background(220);
y=250;
}
//ellipse(250,290,SNAKE_SIZE,SNAKE_SIZE);
void draw() {
background(220);
if (x >= 500 || x <= 0) {
background(0);
}
if (y >= 500 || y <= 0) {
background(0);
}
moveSnake();
checkIfKeyPressed();
drawTarget();
checkIfHitTarget();
}
void moveSnake() {
//int y2=0;
fill(#FFFFFF);
for (int iY=0; iY<SNAKE_LENGTH; iY++) {
if(key == 'w'){
ellipse(x, y-iY*SNAKE_SIZE, SNAKE_SIZE, SNAKE_SIZE);
}
else if(key == 's'){
ellipse(x, y+iY*SNAKE_SIZE, SNAKE_SIZE, SNAKE_SIZE);
}
for (int iX=0; iX<SNAKE_LENGTH; iX++) {
if(key == 'd'){
ellipse(x - iX*SNAKE_SIZE, y, SNAKE_SIZE, SNAKE_SIZE);
}
else if(key == 'a'){
ellipse(x + iX*SNAKE_SIZE, y, SNAKE_SIZE, SNAKE_SIZE);
}
//y2+=20;
}
}
}
void checkIfKeyPressed() {
if (key=='w') {
moveSnake();
y -= Y_SPEED;
}
else if (key=='s') {
moveSnake();
y += Y_SPEED;
}
else if (key=='a') {
moveSnake();
x -= X_SPEED;
}
else if (key=='d') {
moveSnake();
x += X_SPEED;
}
}
void drawTarget(){
fill(0);
rect(foodX,foodY, foodSize,foodSize);
}
void checkIfHitTarget(){
if (dist(x, y, foodX, foodY)<=foodSize-5)
{
foodX = random(0+foodSize/2, 500-foodSize/2);
foodY = random(0+foodSize/2, 500-foodSize/2);
hit = true;
}
if (hit)
{
totalHits += 1;
hit=!hit;
growth++;
}
}paste code here