For the 8x8x8 RGB LEDCube
3DSnake.h
- Committer:
- zgtk_r
- Date:
- 2017-01-29
- Revision:
- 0:f3abe0df0567
File content as of revision 0:f3abe0df0567:
#pragma once #include "LEDCUBE_RGB_888.h" #define MAX_BODY 8 struct Vect{ int x, y, z; }; class Snake{ public: bool Mf; Vect Body[MAX_BODY]; COL color[2]; Snake(int x, int y, int z, COL CH, COL C){ Mf = true; for(int i = 0; i < MAX_BODY; i++){ Body[i].x = x; Body[i].y = y; Body[i].z = z; } color[0] = CH; color[1] = C; } void moveHead(int D){ D %= 12; int s = 1; //Vect m[6] = {{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}}; int mx[12] = {1,0,0,-1,0,0,1,0,1,-1,0,-1}; int my[12] = {0,1,0,0,-1,0,1,1,0,-1,-1,0}; int mz[12] = {0,0,1,0,0,-1,0,1,1,0,-1,-1}; Mf = true; Body[0].x += mx[D]; if(Body[0].x < 0){Body[0].x = 0;Mf = false;} if(Body[0].x >= 8-s){Body[0].x = 7-s;Mf = false;} Body[0].y += my[D]; if(Body[0].y < 0){Body[0].y = 0;Mf = false;} if(Body[0].y >= 8-s){Body[0].y = 7-s;Mf = false;} Body[0].z += mz[D]; if(Body[0].z < 0){Body[0].z = 0;Mf = false;} if(Body[0].z >= 8-s){Body[0].z = 7-s;Mf = false;} if(D >= 5)Mf = true; }; void moveBody(){ if(!Mf)return; for(int i = MAX_BODY-1; i >= 1; i--){ Body[i] = Body[i-1]; } } void draw(){ for(int i = 0; i < MAX_BODY; i++){ PutPixel( Body[i].x, Body[i].y, Body[i].z, color[1] ); } } void drawHB(){ for(int i = 1; i < MAX_BODY; i++){ PutPixel( Body[i].x, Body[i].y, Body[i].z, color[1] ); DrawBox( Body[i].x, Body[i].y, Body[i].z, 2,2,2, color[1], true ); } PutPixel( Body[0].x, Body[0].y, Body[0].z, color[0] ); DrawBox( Body[0].x, Body[0].y, Body[0].z, 2,2,2, color[0], true ); } };