For the 8x8x8 RGB LEDCube

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers 3DSnake.h Source File

3DSnake.h

00001 #pragma once
00002 
00003 #include "LEDCUBE_RGB_888.h"
00004 
00005 #define MAX_BODY 8
00006 
00007 struct Vect{
00008     int x, y, z;
00009 };
00010 class Snake{
00011     public:
00012     bool Mf;
00013     Vect Body[MAX_BODY];
00014     COL color[2];
00015     Snake(int x, int y, int z, COL CH, COL C){
00016         Mf = true;
00017         for(int i = 0; i < MAX_BODY; i++){
00018             Body[i].x = x;
00019             Body[i].y = y;
00020             Body[i].z = z;
00021         }
00022         color[0] = CH;
00023         color[1] = C;
00024     }
00025     void moveHead(int D){
00026         D %= 12;
00027         int s = 1;
00028         //Vect m[6] = {{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}};
00029         int mx[12] = {1,0,0,-1,0,0,1,0,1,-1,0,-1};
00030         int my[12] = {0,1,0,0,-1,0,1,1,0,-1,-1,0};
00031         int mz[12] = {0,0,1,0,0,-1,0,1,1,0,-1,-1};
00032         Mf = true;
00033         Body[0].x += mx[D];
00034         if(Body[0].x < 0){Body[0].x = 0;Mf = false;}
00035         if(Body[0].x >= 8-s){Body[0].x = 7-s;Mf = false;}
00036         Body[0].y += my[D];
00037         if(Body[0].y < 0){Body[0].y = 0;Mf = false;}
00038         if(Body[0].y >= 8-s){Body[0].y = 7-s;Mf = false;}
00039         Body[0].z += mz[D];
00040         if(Body[0].z < 0){Body[0].z = 0;Mf = false;}
00041         if(Body[0].z >= 8-s){Body[0].z = 7-s;Mf = false;}
00042         if(D >= 5)Mf = true;
00043     };
00044     void moveBody(){
00045         if(!Mf)return;
00046         for(int i = MAX_BODY-1; i >= 1; i--){
00047             Body[i] = Body[i-1]; 
00048         }
00049     }
00050     void draw(){
00051         for(int i = 0; i < MAX_BODY; i++){
00052             PutPixel(
00053                 Body[i].x,
00054                 Body[i].y,
00055                 Body[i].z,
00056                 color[1]
00057             );
00058         }
00059     }
00060     void drawHB(){
00061         for(int i = 1; i < MAX_BODY; i++){
00062             PutPixel(
00063                 Body[i].x,
00064                 Body[i].y,
00065                 Body[i].z,
00066                 color[1]
00067             );
00068             DrawBox(
00069                 Body[i].x,
00070                 Body[i].y,
00071                 Body[i].z,
00072                 2,2,2,
00073                 color[1],
00074                 true
00075             );
00076         }
00077         PutPixel(
00078             Body[0].x,
00079             Body[0].y,
00080             Body[0].z,
00081             color[0]
00082         );
00083         DrawBox(
00084             Body[0].x,
00085             Body[0].y,
00086             Body[0].z,
00087             2,2,2,
00088             color[0],
00089             true
00090         );
00091     }
00092 };