Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Rainbowduino.h>
- #include <Wire.h>
- #include "MMA7660.h"
- MMA7660 accelemeter;
- int grid[8][8];
- int headX = 4; int headY = 4;
- int foodY=2; int foodX=2; int food=0;
- int tempdir=1; int dir=1;
- int tailval=63;
- int i=0; int j=0;
- int num=0;
- int del=400;int sense=5;
- int gamemode=0; int menu=1;
- int red=255; int blue=255; int green=255;
- void setup()
- {
- //Initializes rainbowduino library
- Rb.init();
- //Initializes accelerometer library
- accelemeter.init();
- //Reads from an unconneted pin to generate random numbers
- randomSeed(analogRead(0));
- }
- void loop()
- {
- //Initializes and reads from the accelerometer
- int8_t x;
- int8_t y;
- int8_t z;
- float ax,ay,az;
- accelemeter.getXYZ(&x,&y,&z);
- while(menu==1){
- int8_t x;
- int8_t y;
- int8_t z;
- float ax,ay,az;
- accelemeter.getXYZ(&x,&y,&z);
- if(x>0){
- if(green>35){
- green=255-x*14;
- blue=255-x*14;
- }
- else{
- green=0;
- blue=0;
- for(int i=0;i<8;i++)
- for(int j=0;j<8;j++)
- Rb.setPixelXY(i,j,red,green,blue);
- delay(2000);
- Rb.blankDisplay();
- gamemode=1;
- menu=0;
- break;
- }
- }
- if(x<0){
- if(red>35){
- red=255+x*14;
- blue=255+x*14;
- }
- else{
- red=0;
- blue=0;
- for(int i=0;i<8;i++)
- for(int j=0;j<8;j++)
- Rb.setPixelXY(i,j,red,green,blue);
- delay(2000);
- Rb.blankDisplay();
- gamemode=0;
- menu=0;
- break;
- }
- }
- for(int i=0;i<8;i++)
- for(int j=0;j<8;j++)
- Rb.setPixelXY(i,j,red,green,blue);
- delay(200);
- }
- if(menu==0){
- //Goes through each value in the matrix and if it's over 0, subtracts one from it
- for(i=0;i<8;i++)
- for(j=0;j<8;j++)
- if(grid[i][j]>0)
- grid[i][j]--;
- //Lights a pixel up at the x and y of the food with a random color
- Rb.setPixelXY(foodX, foodY, random(1,255),random(1,255),random(1,255));
- //Interprets the input from the accelerometer and interprets it as a temporary direction
- if(x>sense){tempdir=4;}
- if(x<-sense){tempdir=3;}
- if(y>sense){tempdir=1;}
- if(y<-sense){tempdir=2;}
- //Prevents snake from doubing back on itself, turns temporary direction into actuall direction
- switch(dir)
- {
- case 1:
- if(tempdir==2){dir=1;}
- else{dir=tempdir;}
- break;
- case 2:
- if(tempdir==1){dir=2;}
- else{dir=tempdir;}
- break;
- case 3:
- if(tempdir==4){dir=3;}
- else{dir=tempdir;}
- break;
- case 4:
- if(tempdir==3){dir=4;}
- else{dir=tempdir;}
- break;
- }
- //Interprets direction into movement in the matrix
- switch(dir)
- {
- case 1:
- if(headY<8){headY++;}
- if(headY>7){headY=0;}
- break;
- case 2:
- if(headY<8){headY--;}
- if(headY<0){headY=7;}
- break;
- case 3:
- if(headX<8){headX--;}
- if(headX<0){headX=7;}
- break;
- case 4:
- if(headX<8){headX++;}
- if(headX>7){headX=0;}
- break;
- }
- //Death condition
- if(grid[headX][headY]>tailval)
- {
- //Flashes snake different colors
- for(i=0;i<8;i++){
- for(j=0;j<8;j++){
- if(grid[i][j]>=tailval){Rb.setPixelXY(i, j, 0x00FF00);}
- }
- }
- delay(500);
- for(i=0;i<8;i++){
- for(j=0;j<8;j++){
- if(grid[i][j]>=tailval){Rb.setPixelXY(i, j, 0x0000FF);}
- }
- }
- delay(500);
- for(i=0;i<8;i++){
- for(j=0;j<8;j++){
- if(grid[i][j]>=tailval){Rb.setPixelXY(i, j, 0x00FF00);}
- }
- }
- //Prints "GAMEOVER" to the screen
- while(num==0)
- {
- Rb.blankDisplay();
- Rb.drawChar(0x47,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x41,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x4d,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x45,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x4f,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x56,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x45,0,0,0xFFFFFF);
- delay(500);
- Rb.blankDisplay();
- Rb.drawChar(0x52,0,0,0xFFFFFF);
- delay(500);
- }
- }
- //Adds a delay to the game
- delay(del);
- //Randomly generates a new food x and y when it's eaten
- if(foodX == headX && foodY == headY)
- {
- tailval--;
- if(gamemode==1){del-15;}
- grid[foodX][foodY]==0;
- foodX=random(0,8);
- foodY=random(0,8);
- while(grid[foodX][foodY]>0){
- foodX=random(0,8);
- foodY=random(0,8);
- }
- Rb.setPixelXY(foodX, foodY, 0xFFFFFF);
- food==1;
- }
- //Sets the values of wherever the food and head are to -3 and 64 respectively so they can be marked for lighting
- grid[headX][headY] = 64;
- grid[foodX][foodY] =-3;
- //Blanks the display for a clean slate
- Rb.blankDisplay();
- if(gamemode==1){del--;}
- //Lights the head and body of the snake
- for(i=0;i<8;i++){
- for(j=0;j<8;j++){
- if(grid[i][j]>tailval && grid[i][j]<64){Rb.setPixelXY(i, j, 0xFF0000);}
- if(grid[i][j]==64){Rb.setPixelXY(i, j, 0xFF8000);}
- }
- }
- if(del<=0){gamemode=0;}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement