Index / 2017 / Advanced Snake
600×600 · p5.js instance mode
Advanced_Snake.pde 54 lines
ArrayList<Integer> x = new ArrayList<Integer>(), y = new ArrayList<Integer>();
int w=30, h=30, bs=20, dir=2, ax=12, ay=10;
int[]dx={0, 0, 1, -1}, dy={1, -1, 0, 0};
boolean gameover=false;

void setup() { 
  size(600, 600); 
  x.add(5); 
  y.add(5);
}

void draw() {  
  background(#EAEAEA);
  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);
  fill(0, 255, 0); 
  for (int i = 0; i < x.size(); i++) rect(x.get(i)*bs, y.get(i)*bs, bs, bs);
  if (!gameover) {  
    fill(255, 0, 0); 
    stroke(255);
    strokeWeight(5);
    rect(ax*bs, ay*bs, bs, bs); 
    if (frameCount%5==0) {
      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)==ax && y.get(0)==ay) { 
        ax = (int)random(0, w); 
        ay = (int)random(0, h);
      } else { 
        x.remove(x.size()-1); 
        y.remove(y.size()-1);
      }
    }
  } else {
    fill(0); 
    textSize(30); 
    textAlign(CENTER); 
    text("GAME OVER. Press space", width/2, height/2);
    if (keyPressed&&key==' ') { 
      x.clear(); 
      y.clear(); 
      x.add(5);  
      y.add(5); 
      gameover = false;
    }
  }
}

void keyPressed() { 
  int nd=key=='s'? 0:(key=='w'?1:(key=='d'?2:(key=='a'?3:-1)));
  if (nd!=-1&&(x.size()<=1||!(x.get(1)==x.get(0)+dx[nd]&&y.get(1)==y.get(0)+dy[nd]))) dir=nd;
}
read-only archive source from /2017/Useful References/Advanced_Snake/Advanced_Snake.pde

Description

This page is generated from the Processing project folder at /2017/Useful References/Advanced_Snake/Advanced_Snake.pde.

Archive

No companion assets were found in this sketch folder.