Files
archive/Processing.js/Snake/main.pds
2017-11-10 00:13:57 +01:00

157 lines
4.0 KiB
Plaintext

boolean gameOver = false;
int SizeX = 600;
int SizeY = 600;
sn snake1 = new sn();
apple a = new apple();
void setup(){
frameRate(10);
size(SizeX, SizeY);
}
void draw(){
if(focused){
background(0);
if(gameOver){
if(keyPressed){
snake1 = new sn();
a = new apple();
gameOver = false;
}
textSize(64);
fill(255);
text("GAME OVER!!!", 100, 180);
textSize(32);
fill(0,0,255);
text("Score: " + (snake1.Length - 20), 220, 250);
fill(255,0,0);
text("PRESS ANY KEY TO RESTART",100, 300);
} else {
textSize(12);
fill(255);
text("Speed (Pixel per Second): " + (round(frameRate * 10)), 0, 12);
text("Score: " + (snake1.Length - 20), 0, 28);
if(snake1.Length < 10)
frameRate(10);
else
frameRate(snake1.Length);
snake1.Draw();
a.Draw();
if(a.Collision(snake1.parts[0].X, snake1.parts[0].Y, snake1.parts[0].size)) {
snake1.parts[snake1.Length] = new Part(snake1.parts[snake1.Length -1].X, snake1.parts[snake1.Length -1].Y);
snake1.Length ++;
a = new apple();
}
}
gameOver = snake1.Lose();
}
}
void keyPressed(){
snake1.keyPressed();
}
class apple{
int posX;
int posY;
int size = 10;
public apple(){
posX = (int)random(0, (SizeX - size) / 10) * 10;
posY = (int)random(0, (SizeY - size) / 10) * 10;
}
void Draw(){
fill(255,0,0);
rect(posX, posY, size, size);
}
public boolean Collision(int x, int y, int s){
if(posX == x && posY == y) {
return true;
} else {
return false;
}
}
}
class sn{
public int Length = 20;
public String direction = "up";
public Part[] parts = new Part[1000];
public sn(){
int rx = (int)random(0,SizeX / 10) * 10;
int ry = (int)random(0,SizeY / 10) * 10;
for(int i = 0; i < Length; i++){
parts[i] = new Part(rx, ry);
ry += 10;
}
}
boolean move(){
for(int i = Length - 2; i >= 0; i--){
parts[i + 1] = parts[i];
}
if(direction == "up") {
parts[0] = new Part(parts[0].X, parts[0].Y - parts[0].size);
}
if(direction == "down") {
parts[0] = new Part(parts[0].X, parts[0].Y + parts[0].size);
}
if(direction == "left") {
parts[0] = new Part(parts[0].X - parts[0].size, parts[0].Y);
}
if(direction == "right") {
parts[0] = new Part(parts[0].X + parts[0].size, parts[0].Y);
}
return true;
}
boolean Lose(){
//Crossing Border
if(parts[0].X < 0 || parts[0].X + parts[0].size > SizeX || parts[0].Y < 0 || parts[0].Y + parts[0].size > SizeY ){
return true;
}
//Snake internal collision
for(int i = 1; i < Length; i++)
if(parts[i].X == parts[0].X && parts[i].Y == parts[0].Y){
return true;
}
return false;
}
void Draw(){
fill(255);
for (int i = Length - 1; i >= 0; i--) {
parts[i].Draw();
println(i + " | " + parts[i].X + " | " + parts[i].Y);
}
move();
}
void keyPressed(){
if(keyCode == DOWN && direction != "up")
direction = "down";
if(keyCode == UP && direction != "down")
direction = "up";
if(keyCode == LEFT && direction != "right")
direction = "left";
if(keyCode == RIGHT && direction != "left")
direction = "right";
}
}
class Part{
public int size = 10;
public int X;
public int Y;
public Part(int x, int y){
X = x;
Y = y;
}
void Draw(){
rect(X, Y, size, size);
}
}