///////////////////////////////////////////////////// ///// SNEK ////// ///// Snek is the superior version of snake. ////// ///// (beacuse I couldent get snake to work) ////// ///// An Interactive Toy by Michael Arcadi ////// ///////////////////////////////////////////////////// float playerX;//player positions float playerY; float playerSize=20;//standard player size boolean goLeft=false;//moevment bools boolean goRight=false; boolean goUp=false; boolean goDown=false; int foodPosRx = int(random(0, 20));//this line and the one below it randomize the food X coordinate int foodPosX = foodPosRx * 20; int foodPosPx = foodPosRx;// previous position of food X coordinate, used to make sure that it dosent spawn in the same place twice int foodPosRy = int(random(0, 20)); //this line and the one below it randomize the food Y coordinate int foodPosY = foodPosRx * 20; int foodPosPy = foodPosRy; //previous position of food Y coondinate int scan = -20;//for drawing the scan lines ane making them move int scanFill= 0; boolean about = false;//menu variables boolean play = false; boolean back = false; color snek = color(86, 204, 0);//snek colour, for making it flash //PFont digi;//I tried using a custom font. It didnt work. void setup() { size(400, 400); frameRate(20); //gotta go slow playerX=width/2; playerY=height/2; //I think it didnt work beacsue processing 2 has a limited selection of file formats that it can read fonts from and the font I was trying to use wasn't the right format. Or something. //digi = createFont("AlphaSmart3000", 32); } void draw() { background(28, 66, 0); noStroke(); //boot up menu if (about == false) { //clear(); background(28, 66, 0); scanLines(); dampen(); title(); } //opens the about screen if (about == true) { //clear(); background(28, 66, 0); scanLines(); dampen(); callAbout(); } //starts the game if (play == true) { //clear(); background(28, 66, 0); snake(); food(); scanLines(); dampen(); } } void keyPressed() { //key presses. pretty self explanatory if (key == 'w') { goUp=true; goDown=false; goLeft=false; goRight=false; } else if (key == 'a') { goLeft=true; goRight = false; goUp = false; goDown = false; } else if (key == 's') { goDown = true; goUp = false; goLeft = false; goRight = false; } else if (key == 'd') { goRight=true; goUp = false; goDown = false; goLeft = false; } } void snake() { //draws the snek fill(snek); rect(playerX, playerY, playerSize, playerSize); //movement in 4 directions if (goLeft == true) { playerX = playerX - playerSize; //if player reaches edge of screen loop to other side if (playerX < 0) { playerX = 380; } } else if (goRight == true) { playerX = playerX + playerSize; //if player reaches edge of screen loop to other side if (playerX > 380) { playerX = 0; } } else if (goUp == true) { playerY = playerY - playerSize; //if player reaches edge of screen loop to other side if (playerY < 0) { playerY = 380; } } else if (goDown == true) { //if player reaches edge of screen loop to other side playerY = playerY + playerSize; if (playerY > 380) { playerY = 0; } } } void food() { //draws the food fill(86, 204, 0); rect(foodPosX, foodPosY, 20, 20); //re-locates the food once the player hits it if (playerX == foodPosX && playerY == foodPosY) { foodPosRx = int(random(0, 20)); foodPosX = foodPosRx * 20; foodPosRy = int(random(0, 20)); foodPosY = foodPosRy * 20; // if the food is in the same place as it was last time re-randomize its location if (foodPosRx == foodPosPx && foodPosRy == foodPosPy) { foodPosRx = int(random(0, 20)); foodPosX = foodPosRx * 20; foodPosRy = int(random(0, 20)); foodPosY = foodPosRy * 20; } foodPosPx = foodPosRx; foodPosPy = foodPosRy; //makes the snek flash when it gets the food snek = color(255, 255, 255); //the "flash of light" the snek emits whenever it gets food fill(255, 100); ellipseMode(CORNER); ellipse(playerX-10, playerY, 40, 40); ellipseMode(CENTER); } else { // keeps the snake its normal color snek = color(86, 204, 0); } } void scanLines() { stroke(129, 255, 33, 40); strokeWeight(2); // fills the screen w/ scan lines while (scanFill < 450) { line(0, scan+scanFill, 400, scan+scanFill); scanFill = scanFill + 20; } scanFill = 0; //moves the scan lines down scan++; //reset the scanline position every time a line is moved off screen, giving the illusion of movement if (scan >= 20) { scan = -20; } } void dampen() { //I was working on this part seperately, and it dosent like it if the variables are outside the function so thats why they're here. int alpha = 0; int size = 360; int ring = 0; strokeWeight(10); //this is the thing that gives us that cool effect around the screen while (alpha < 300) { noFill(); stroke(0, alpha); ellipse(width/2, height/2, size, size*2); alpha = alpha + 3; size = size + 5; ring = ring + 10; } } void title() { noStroke(); //draw the s fill(86, 204, 0); rect(65, 150, 15, 15); rect(80, 150, 15, 15); rect(95, 135, 15, 15); rect(65, 120, 15, 15); rect(80, 120, 15, 15); rect(50, 105, 15, 15); rect(65, 90, 15, 15); rect(80, 90, 15, 15); //draw the n rect(130, 150, 15, 15); rect(130, 135, 15, 15); rect(130, 120, 15, 15); rect(130, 105, 15, 15); rect(130, 90, 15, 15); rect(145, 105, 15, 15); rect(145, 120, 15, 15); rect(160, 135, 15, 15); rect(175, 150, 15, 15); rect(175, 135, 15, 15); rect(175, 120, 15, 15); rect(175, 105, 15, 15); rect(175, 90, 15, 15); //draw the e rect(210, 150, 15, 15); rect(210, 135, 15, 15); rect(210, 120, 15, 15); rect(210, 105, 15, 15); rect(210, 90, 15, 15); rect(225, 90, 15, 15); rect(240, 90, 15, 15); rect(255, 90, 15, 15); rect(210, 120, 15, 15); rect(225, 120, 15, 15); rect(240, 120, 15, 15); rect(255, 120, 15, 15); rect(210, 150, 15, 15); rect(225, 150, 15, 15); rect(240, 150, 15, 15); rect(255, 150, 15, 15); //draw the k rect(290, 150, 15, 15); rect(290, 135, 15, 15); rect(290, 120, 15, 15); rect(290, 105, 15, 15); rect(290, 90, 15, 15); rect(305, 120, 15, 15); rect(320, 105, 15, 15); rect(320, 135, 15, 15); rect(335, 90, 15, 15); rect(335, 150, 15, 15); //title screen buttons stroke(86, 204, 0); strokeWeight(1); fill(0, 50); //play button if (mouseX > 100 && mouseX < 300 && mouseY > 220 && mouseY < 270) { fill(50, 50); } rect(100, 220, 200, 50); fill(86, 204, 0); textSize(30); text("PLAY", 165, 255); //about button fill(0, 50); if (mouseX > 100 && mouseX < 300 && mouseY > 300 && mouseY < 350) { fill(50, 50); } rect(100, 300, 200, 50); fill(86, 204, 0); text("ABOUT", 150, 335); } void mouseClicked() { //title screen shenanigans, this one makes the about page appear if (mouseX > 100 && mouseX < 300 && mouseY > 300 && mouseY < 350) { about = true; back = false; } //this one makes the game start if (mouseX > 100 && mouseX < 300 && mouseY > 220 && mouseY < 270) { play = true; } //this one takes you back to the main menu from the about page if (mouseX > 10 && mouseX < 60 && mouseY > 340 && mouseY < 390) { back = true; about = false; } } void callAbout() { fill(86, 204, 0); //about text for Snek textSize(18); text("Snek is like Snake,", 120, 20); text("but Snek is much smarter than Snake.", 35, 40); text("Instead of wasting valuable nutrients on", 25, 60); text("growing in size, Snek instead converts all", 19, 80); text("those nutrients into energy which it then", 23, 100); text("lets off in a flash of light.", 90, 120); text("As a result Snek never has to worry about", 15, 140); text("biting its own tail and killing itself.", 45, 160); text("Because Snek doesn't have to worry about", 15, 180); text("killing itself, it is effectively immortal and", 20, 200); text("can spend its days running around and ", 30, 220); text("eating food for all eternity.", 80, 240); //draw the back button fill(0, 50); if (mouseX > 10 && mouseX < 60 && mouseY > 340 && mouseY < 390) { fill(50, 50); } stroke(86, 204, 0); strokeWeight(1); rect(10, 340, 50, 50); fill(86, 204, 0); rect(35, 355, 20, 20); triangle(35, 385, 35, 345, 12, 365); }