ArrayList<Integer> x = new ArrayList<Integer>(), y = new ArrayList<Integer>();
int w = 30, h = 30, bs = 20, dir = 2;
int foodx = 10, foody = 14;
int[] dx = {0, 0, 1, -1}, dy = {1, -1, 0, 0};
boolean gameover = false;
for(int i = 0; i < w; i++) line(i*bs, 0, i*bs, height);
for(int i = 0; i < h; i++) line(0, i*bs, width, i*bs);
for(int i = 0; i < x.size(); i++) {
rect(x.get(i)*bs, y.get(i)*bs, bs, bs);
rect(foodx*bs, foody*bs, bs, bs);
x.add(0,x.get(0) + dx[dir]);
y.add(0,y.get(0) + dy[dir]);
if(x.get(0) < 0 || y.get(0) < 0 || x.get(0) >= w || y.get(0) >= h) gameover = true;
for(int i = 1; i < x.size(); i++) if(x.get(0)==x.get(i) && y.get(0)==y.get(i)) gameover = true;
if(x.get(0)==foodx && y.get(0)==foody){
foodx = (int)random(0, w);
foody = (int)random(0, h);
text("GAME OVER, PRESS SPACE", width/2, height/2);
text("Your Length Was "+length+"!", width/2, height/2+50);
if(keyPressed&&key==' '){
int newdir = key=='s' ? 0 : (key=='w' ? 1 : (key=='d' ? 2 : (key=='a' ? 3 : -1)));
if(newdir != -1 && (x.size() <= 1 || !(x.get(1)==x.get(0)+dx[newdir] && y.get(1)==y.get(0)+dy[newdir]))) dir = newdir;