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
        );
    }
};