Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "IRremote.h"
- int receiver = 7;
- IRrecv irrecv(receiver);
- decode_results results;
- #define DS_pin 4
- #define STCP_pin 5
- #define SHCP_pin 6
- #define ship 0
- #define enemy 1
- #define killed 2
- int posX=0;
- int posY=0;
- int posZ=0;
- int distanciaX;
- int distanciaY;
- int distanciaZ;
- class Enemigo{
- public:
- Enemigo(int x, int y, int z);
- int getZ();
- int getX();
- int getY();
- void setZ(int z);
- void setY(int y);
- void setX(int x);
- void perseguirJugador();
- private:
- int _x;
- int _y;
- int _z;
- };
- Enemigo::Enemigo(int x, int y, int z){
- _x=x;
- _y=y;
- _z=z;
- }
- int Enemigo::getZ(){
- return _z;
- }
- int Enemigo::getY(){
- return _y;
- }
- int Enemigo::getX(){
- return _x;
- }
- void Enemigo::setZ(int z){
- _z = z;
- }
- void Enemigo::setY(int y){
- _y = y;
- }
- void Enemigo::setX(int x){
- _x = x;
- }
- void Enemigo::perseguirJugador(){
- distanciaX=posX - _x;
- distanciaY=posY - _y;
- distanciaZ=posZ - _z;
- if(_y+1==posY){
- _y++;
- distanciaY=0;
- }else if(_y-1 ==posY){
- _y--;
- distanciaY=0;
- }
- _y = constrain(_y, 0,3);
- if(distanciaX>0){
- _x++;
- }else if(distanciaX<0){
- _x--;
- }
- _x = constrain(_x, 0,3);
- if(distanciaY>0){
- _y++;
- _y = constrain(_y, 0,3);
- return;
- }else if(distanciaY<0){
- _y--;
- _y = constrain(_y, 0,3);
- return;
- }
- if(distanciaZ>0){
- _z++;
- }else if(distanciaZ<0){
- _z--;
- }
- _z = constrain(_z, 0,3);
- return;
- }
- int barrido=0;
- int contMov=0;
- int respuesta=0;
- int Arreglo[16];
- int contador=0;
- int SnakeHead=0;
- int randomCounter=0;
- int posiciones[6]={0,0,0,0,0,0};
- int decorado[6]={0,0,0,0,0,0};
- int Matrix[3][4][4][4]={
- {
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- }
- },
- {
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- }
- },
- {
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- },
- {
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0},
- {0,0,0,0}
- }
- }
- };
- Enemigo e1(3,3,3);
- void setup()
- {
- for(int i=0; i<7;i++){
- pinMode(i, OUTPUT);
- }
- irrecv.enableIRIn();
- }
- void ShiftRegister(){
- digitalWrite(STCP_pin, LOW);
- for(int i=15; i>=0; i--){
- digitalWrite(SHCP_pin, LOW);
- digitalWrite(DS_pin, Arreglo[i]);
- digitalWrite(SHCP_pin, HIGH);
- }
- digitalWrite(STCP_pin, HIGH);
- }
- void translateIR(){
- switch(results.value){
- case 0xFF30CF:
- SnakeHead=1;
- posiciones[SnakeHead-1]=!posiciones[SnakeHead-1]; break;
- case 0xFF18E7:
- SnakeHead=2;
- posiciones[SnakeHead-1]=!posiciones[SnakeHead-1]; break;
- case 0xFF10EF:
- SnakeHead=3;
- posiciones[SnakeHead-1]=!posiciones[SnakeHead-1]; break;
- case 0xFF5AA5:
- SnakeHead=4;
- posiciones[SnakeHead-1]=!posiciones[SnakeHead-1]; break;
- case 0xFF42BD:
- SnakeHead=5;
- posiciones[SnakeHead-1]=!posiciones[SnakeHead-1]; break;
- case 0xFF4AB5:
- SnakeHead=6;
- posiciones[SnakeHead-1]=!posiciones[SnakeHead-1]; break;
- }
- contMov=0;
- for(int i=0; i<6; i++)
- if(i!=SnakeHead-1)
- posiciones[i]=0;
- }
- void Hunt(int i){
- switch(i){
- case 1: posZ++; break;
- case 2: posY++; break;
- case 3: posX--; break;
- case 4: posX++; break;
- case 5: posZ--; break;
- case 6: posY--; break;
- }
- }
- void Mover(){
- if(irrecv.decode(&results)){
- translateIR();
- irrecv.resume();
- }
- if(posiciones[SnakeHead-1]==1)
- Hunt(SnakeHead);
- contMov=0;
- posX = constrain(posX,0,3);
- posY = constrain(posY,0,3);
- posZ = constrain(posZ,0,3);
- }
- void Dead(){
- Matrix[killed][posZ][posY][posX]=1;
- decorado[0]=posX-1;
- decorado[1]=posY-1;
- decorado[2]=posZ-1;
- decorado[3]=posX+1;
- decorado[4]=posY+1;
- decorado[5]=posZ+1;
- for(int i=0; i<6; i++)
- decorado[i]=constrain(decorado[i],0,3);
- for(int k=decorado[2]; k<=decorado[5]; k++){
- for(int i=decorado[1]; i<=decorado[4]; i++){
- for(int j=decorado[0]; j<=decorado[3]; j++){
- Matrix[killed][k][i][j]=1;
- }
- }
- }
- for(int scan=0; scan<5; scan++){
- barrido=0;
- do{
- barrido++;
- for(int Nivel=0; Nivel<4; Nivel++){
- for(int i=0; i<4; i++)
- for(int j=0; j<4; j++){
- Arreglo[contador]=Matrix[killed][Nivel][i][j];
- contador++;
- }
- ShiftRegister();
- digitalWrite(Nivel, LOW);
- limpiar(Nivel);
- }
- ShiftRegister();
- }while(barrido<300);
- }
- for(int Nivel=0; Nivel<4; Nivel++)
- for(int i=0; i<4; i++)
- for(int j=0; j<4; j++)
- Matrix[killed][Nivel][i][j]=0;
- }
- void reiniciar3D(){
- e1.setZ(3);
- e1.setY(3);
- e1.setX(3);
- posX=posY=posZ=0;
- for(int i=0; i<6; i++)
- posiciones[i]=0;
- limpiar3D();
- Matrix[ship][posZ][posY][posX]=1;
- Matrix[enemy][e1.getZ()][e1.getY()][e1.getX()]=1;
- }
- void limpiar(int Nivel){
- contador=0;
- for(int x=0; x<16;x++){
- Arreglo[x]=0;
- }
- ShiftRegister();
- digitalWrite(Nivel, HIGH);
- }
- void limpiar3D(){
- for(int z=0; z<4; z++)
- for(int x=0; x<4; x++)
- for(int y=0; y<4; y++){
- Matrix[ship][z][y][x]=0;
- Matrix[enemy][z][y][x]=0;
- }
- }
- void loop()
- {
- for(int scan=0; scan<200; scan++){
- for(int Nivel=0; Nivel<4; Nivel++){
- for(int i=0; i<4; i++)
- for(int j=0; j<4; j++){
- if(Matrix[enemy][Nivel][i][j]==1 && Matrix[ship][Nivel][i][j]==1){
- Dead();
- reiniciar3D();
- }
- if(Matrix[enemy][Nivel][i][j]==1){
- Arreglo[contador]=1;
- }
- else if(Matrix[ship][Nivel][i][j]==1){
- Arreglo[contador]=1;
- }else{
- Arreglo[contador]=0;
- }
- contador++;
- }
- ShiftRegister();
- digitalWrite(Nivel, LOW);
- limpiar(Nivel);
- }
- }
- Mover();
- e1.perseguirJugador();
- limpiar3D();
- Matrix[ship][posZ][posY][posX]=1;
- Matrix[enemy][e1.getZ()][e1.getY()][e1.getX()]=1;
- }
Add Comment
Please, Sign In to add comment