IDEA:
One of my favorite games I played back in my childhood was the snake game. I thought recreating the snake game would be a nice aim for the midterm. However, since I do not want to replicate it but make my own version of it, I am going to get creative with it. I am still not set with the creative part; however, I am thinking of shifting to a new mode after reaching a certain amount of points.
For now, I have almost made the classic snake game. After I figure out all the features I would like to add for my new mode, I will add it as an if statement when the score reaches a certain amount.
https://youtu.be/v1hmxYABemE
Code:
ArrayList<Integer> x = new ArrayList<Integer>(), y = new ArrayList<Integer>();
int w=30, h=30, blocks=20, direction=2, foodX=15, foodY=15, speed = 8, fc1 = 255, fc2 = 255, fc3 = 255; PFont f;
int[]Xdirection={0, 0, 1, -1}, Ydirection={1, -1, 0, 0}; //coordinates for x and y
boolean gameover=false;
void setup() {
size(600, 600);
f = createFont("Georgia", 35);
x.add(0); y.add(15); //snake starting position
}
void draw() {
background(0);
fill(3, 252, 169); //snakes color
for (int i = 0; i < x.size(); i++) rect(x.get(i)*blocks, y.get(i)*blocks, blocks, blocks);
if (!gameover) {
fill(fc1, fc2, fc3); //food color red
ellipse(foodX*blocks+10, foodY*blocks+10, blocks, blocks); //food
textAlign(LEFT); //score
textFont(f);
textSize(25);
fill(255);
text("score : " + x.size(), 30, 30, width - 20, 50);
//makes the snake longer
if (frameCount%speed==0) {
x.add(0, x.get(0) + Xdirection[direction]);
y.add(0, y.get(0) + Ydirection[direction]);
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) { //new food
if (x.size() %5==0 && speed>=2) speed-=1; // every 5 points speed increases
foodX = (int)random(0, w); //new food
foodY = (int)random(0, h);
} else {
x.remove(x.size()-1);
y.remove(y.size()-1);
}
}
} else {
fill(255);
textSize(30);
textFont(f);
textAlign(CENTER);
text("GAME OVER \n Your Score is: "+ x.size() +"\n Press ENTER", width/2, height/3+30);
if (keyCode == ENTER) {
x.clear();
y.clear();
x.add(0);
y.add(15);
direction = 2;
speed = 8;
gameover = false;
}
}
}
void keyPressed() {
int newdir=keyCode == DOWN? 0:(keyCode == UP?1:(keyCode == RIGHT?2:(keyCode == LEFT?3:-1)));
if (newdir != -1) direction = newdir;
}