Untitled
unknown
plain_text
4 years ago
4.8 kB
7
Indexable
//BY Ian151 (ChromeWing) //inspired by the original snake game //this is a test for creating small games in processing. int angle=0; int snakesize=5; int gameSize = 400; int time=0; int speed = 5; int[] headx= new int[2500]; int[] heady= new int[2500]; int applex=(round(random(47))+1)*8; int appley=(round(random(47))+1)*8; boolean redo=true; boolean stopgame=false; void setup() { restart(); size(400,400); textAlign(CENTER); } void draw() { if (stopgame) { //do nothing because of game over (stop playing) } else { //draw stationary stuff time+=1; fill(255,0,0); stroke(0); rect(applex,appley,8,8); fill(0); stroke(0); rect(0,0,width,8); rect(0,height-8,width,8); rect(0,0,8,height); rect(width-8,0,8,height); //by modulating time by 5, we create artificial frames each 5 frames //(otherwise the game would go WAY too fast!) if ((time % speed)==0) { travel(); display(); checkdead(); } } } //controls: void keyPressed() { if (key == CODED) { //what key was pressed? is the previous angle the opposite direction? //we wouldn't want to go backwards into our body, that would hurt! //also, is the previous body segment in front of the direction? //(based on the previous question, but added for secure turning without suicide) if (keyCode == UP && angle!=270 && (heady[1]-8)!=heady[2]) { angle=90; } if (keyCode == DOWN && angle!=90 && (heady[1]+8)!=heady[2]) { angle=270; }if (keyCode == LEFT && angle!=0 && (headx[1]-8)!=headx[2]) { angle=180; }if (keyCode == RIGHT && angle!=180 && (headx[1]+8)!=headx[2]) { angle=0; } if (keyCode == SHIFT) { //restart the game by pressing shift restart(); } } } void travel() { for(int i=snakesize;i>0;i--) { if (i!=1) { //shift all the coordinates back one array headx[i]=headx[i-1]; heady[i]=heady[i-1]; } else { //move the new spot for the head of the snake, which is //always at headx[1] and heady[1]. switch(angle) { case 0: headx[1]+=8; break; case 90: heady[1]-=8; break; case 180: headx[1]-=8; break; case 270: heady[1]+=8; break; } } } } void display() { //is the head of the snake eating the apple? if (headx[1]==applex && heady[1]==appley) { //grow and spawn the apple somewhere away from the snake //(currently some of the code below might not be working, but the game still works.) spawnApple(); } //draw the new head of the snake... stroke(sinecolor(1),sinecolor(0),sinecolor(.5)); fill(0); rect(headx[1],heady[1],8,8); //...then erase the back end of the snake. stroke(255); fill(255); rect(headx[snakesize],heady[snakesize],8,8); } void spawnApple() { snakesize+=round(random(3)+1); redo=true; while(redo) { applex=(round(random(47))+1)*8; appley=(round(random(47))+1)*8; for(int i=1;i<snakesize;i++) { if (applex==headx[i] && appley==heady[i]) { redo=true; } else { redo=false; i=1000; } } } } void checkdead() { for(int i=2;i<=snakesize;i++) { //is the head of the snake occupying the same spot as any of the snake chunks? if (headx[1]==headx[i] && heady[1]==heady[i]) { fill(255); rect(125,125,160,100); fill(0); text("GAME OVER",200,150); text("Score: "+str(snakesize-1)+" units long",200,175); text("To restart, press Shift.",200,200); stopgame=true; } //is the head of the snake hitting the walls? if (headx[1]>=(width-8) || heady[1]>=(height-8) || headx[1]<=0 || heady[1]<=0) { fill(255); rect(125,125,160,100); fill(0); text("GAME OVER",200,150); text("Score: "+str(snakesize-1)+" units long",200,175); text("To restart, press Shift.",200,200); stopgame=true; } } } void restart() { //by pressing shift, all of the main variables reset to their defaults. background(255); headx[1]=200; heady[1]=200; for(int i=2;i<1000;i++) { headx[i]=0; heady[i]=0; } stopgame=false; applex=(round(random(47))+1)*8; appley=(round(random(47))+1)*8; snakesize=5; time=0; angle=0; redo=true; } float sinecolor(float percent) { float slime=(sin(radians((((time +(255*percent)) % 255)/255)*360)))*255; return slime; }
Editor is loading...