Alyson Castiblanco
/
JUEGO_DEF
Codigo con interfaz gráfica. Falta juntar los dos programas. Ya accede a ambos juegos
Diff: main.cpp
- Revision:
- 0:aa4d235c4151
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Nov 18 01:43:14 2018 +0000 @@ -0,0 +1,560 @@ +#include "mbed.h" +#include "MPU6050.h" +#include "figs.h" +Ticker bajar; +Serial command(USBTX,USBRX); +AnalogIn joy(A0); +AnalogIn joy1(A1); +float vx=0; +float vy=0; +DigitalIn cambios(PB_8); +int cc=0, punto=1; +uint8_t movimiento=0; +float VEL= 500; +uint8_t matrix_act [11]={0,0,0,0,0,0,0,0,0,0,0}; +uint8_t matrix_temp [8]={0,0,0,0,0,0,0,0}; +uint8_t matrix_temp1[8]={0,0,0,0,0,0,0,0}; +uint8_t fila=1,cont=0,columna=1,rotacion=1,figura=0; +SPI deviceM(PB_15, PB_14, PB_13); +DigitalOut ssel (PB_12); +Serial a(USBTX,USBRX); +Ticker cambio; +MPU6050 Wire(PB_9,PB_8); +InterruptIn iz(PA_14); +InterruptIn de(PA_13); +#define uint8_t unsigned char +float q[3]; +int pos; +float vel=200; +int b; +uint8_t cam[3]={0b01100000,0b00011000,0b00000110}; +uint8_t Matr[9]={0,0,0,0,0,0,0,0,0}; +uint8_t entorno={0b10000001}; +uint8_t carro={0b00011000}; +uint8_t obs=0b01100000; +void derecha(); +void izquierda(); +void colision(); +void juego(); +void accelerometro(); +void cambiof(); +int con; +int az; + +void sendSPI(uint8_t d1, uint8_t d2) +{ + deviceM.unlock(); + ssel=0; + deviceM.write(d1); + deviceM.write(d2); + ssel=1; + deviceM.lock(); +} + +void borrar() +{ + for(int i;i<=8;i++) { + sendSPI(i,0); + } +} + +void inicializar(){ + + a.baud(9600); + sendSPI(0x0c,1); + sendSPI(0x09,0); + sendSPI(0x0A,0x01); + sendSPI(0x0F,1); + wait (0.5); + sendSPI(0x0F,0); + wait(0.5); + sendSPI(0xB,0x7); + borrar(); + vel=200; + carro=0b00011000; + } + +void imprimir() +{ + + + int c_d; //carro, obstaculo y entorno + int c_e; //carro y entorno + int din; + for(int i=1;i<=7;i++){ + sendSPI(i,entorno); + } + for(int j=1;j<=10;j++){ + din=(obs>>b) | entorno ; + c_d= carro | din; + c_e=carro | entorno; + sendSPI(8,c_e); + if(j<=7){ + sendSPI(j,din); + } + + if(j>1 && j<=8) + sendSPI(j-1,din); + + if(j>2 && j<=9){ + sendSPI(j-2,entorno); + } + if(j>=8&&j<=9){ + sendSPI(8,c_d); + } + if(j>10){ + sendSPI(8,c_e); + } + + if( (obs>>b)==carro && j==8 ){ + colision(); + } + + wait_ms(vel); + con++; + if(con==10){ + vel=vel-10;} + } + +} + +void carro_juego () +{ + cambio.attach(&cambiof,0.2); + while(1){ + accelerometro(); + //juego(); + } + } + +void juego(){ + inicializar(); + de.fall(&derecha); + iz.fall(&izquierda); + a.printf("inicio\n"); + while(1){ + con=0; + b=2*(rand()%3); + a.printf("numero %d\n",b); + imprimir(); + } + } + +void derecha() +{ + if(carro==0b00011000 || carro==0b01100000) + carro=carro>>2; + a.printf("entra der \n"); + return; +} +void izquierda() +{ + if( carro==0b00000110 || carro==0b00011000 ) + carro=carro<<2; + a.printf("entra izq \n"); + return; +} + +void colision () +{ + borrar(); + sendSPI(0x0F,0); + sendSPI(3,0b01111110); + sendSPI(4,0b01111110); + sendSPI(5,0b01111110); + sendSPI(6,0b01111110); + wait(2); + juego(); +} + +void accelerometro(){ + + Wire.getAccelero(q); + a.printf("accelero: \t x= %f,\t y= %f, \t z= %f \n",q[0],q[1],q[2]); + int accelero[3]; + Wire.getAcceleroRaw(accelero); + int valor=accelero[1]; + if(valor<=(2000) && valor>=(1000)){ + az=1;} + if(valor<(1000) && valor>=(-1000)){ + az=2;} + if(valor<(-1000) && valor>=(-2000)){ + az=3;} + a.printf("acel : \t %d \n",az); + wait(0.8); + } + +void cambiof(){ + + switch (az){ + case 1: carro=cam[1]; + break; + case 2: carro=cam[2]; + break; + case 3: carro=cam[3]; + break; + } + + + } + + ///////////////////////////////////////////////////////////////////////////////////// + + void init_display() +{ + sendSPI(0x0c,1); + sendSPI(0x0b,7); + sendSPI(0x09,0); + sendSPI(0x0A,0x0E); + int j; + for (j=0;j<4;j++){ + sendSPI(0x0F,1); + wait (0.2); + sendSPI(0x0f,0); + wait (0.2); + } +} + +void copy_matrix(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig,uint8_t columna) +{ + if(((matrix_act[cont-2]& *(fig+c)>>columna-1)==0)&&((matrix_act[cont-1]& *(fig+b)>>columna-1)==0)&&((matrix_act[cont]& *(fig+a)>>columna-1)==0)){ + matrix_temp[0]= *(fig+5)>>columna-1; + matrix_temp[1]= *(fig+a)>>columna-1; + matrix_temp[2]= *(fig+b)>>columna-1; + matrix_temp[3]= *(fig+c)>>columna-1; + } +} + +void borraraa() +{ + int i; + for(i=0;i<=8;i++) + { + sendSPI(i,0); + matrix_act[i]=0; + } +}; + +void buscar_fila(){ + for (uint8_t i=0;i<9;i++){ + if((matrix_act[i]& matrix_temp[3])==0){ + fila=i; + } + if(((matrix_act[i]& matrix_temp[3])!=0)&& (i!=9)){ + fila=i-1; + command.printf("Fila pos 1: %d \n", fila); + i=9; + } + if(((matrix_act[i]& matrix_temp[2])!=0)&& (i!=9)){ + fila=i; + i=9; + command.printf("Fila pos 2: %d \n", fila); + } + if(((matrix_act[i]& matrix_temp[1])!=0)&& (i!=9)){ + fila=i+1; + i=9; + command.printf("Fila pos 3: %d \n", fila); + } + } + if(fila>8) + fila=8; + if(fila<=1){ + punto=1; + VEL=500; + wait_ms(VEL); + borrar(); + fila=8; + } +}; + +void guardar(){ + matrix_act[fila-3]=matrix_temp1[0]; + matrix_act[fila-2]=matrix_temp1[1]; + matrix_act[fila-1]=matrix_temp1[2]; + matrix_act[fila ]=matrix_temp1[3]; + }; + +void reada() +{ vx=0; + vy=0; + vx=joy.read(); + vy=joy1.read(); + cc=cambios.read(); + } + +void bajaf() +{ + movimiento=4;} +void movimiento_fig(){ + reada(); + command.printf("vy = %f \n", vy); + command.printf("vx = %f \n", vx); + command.printf("cc = %f \n", cambios.read()); + if(vy<0.2) + movimiento=1; + if(vy>0.8) + movimiento=4; + if(vx<0.2) + movimiento=3; + if(vx>0.80) + movimiento=2; + command.printf("movimiento = %d \n", movimiento); + switch (movimiento){ + + case 4: + cont++; + //printf("%f", joy.read()); + if(cont>8)cont=8; + break; + + case 1: + if( (matrix_temp[1]==2) || (matrix_temp[1]==1)|| (matrix_temp[1]==3)) + columna--; + rotacion++; + if(rotacion>4) + rotacion=1; + break; + + case 2: + if((matrix_temp[2]==7 || matrix_temp[3]==7)||(matrix_temp[2]==3 && matrix_temp[3]==6)) { + command.printf("a"); + columna=6; + } + else if((matrix_temp[1]==2 && matrix_temp[2]==2 && matrix_temp[3]==2)){ + command.printf("b"); + columna=8; + } + else if (columna<7){ + command.printf("c"); + columna++; + } + //printf("%f", joy1.read()); + break; + + case 3: + columna--; + if(columna<1) + columna=1; + //printf("%f", joy.read()); + break; + + } + } + + +void print_matrix(uint8_t *temp){ + matrix_temp1[0]=(matrix_temp[0]+ matrix_act[cont-3]); + matrix_temp1[1]=(matrix_temp[1]+ matrix_act[cont-2]); + matrix_temp1[2]=(matrix_temp[2]+ matrix_act[cont-1]); + matrix_temp1[3]=(matrix_temp[3]+ matrix_act[cont]); + sendSPI(cont-3,matrix_temp1[0]); + sendSPI(cont-2,matrix_temp1[1]); + sendSPI(cont-1,matrix_temp1[2]); + sendSPI(cont ,matrix_temp1[3]); //pasa de i+2 a i+1 + if(punto%3==0) + { + VEL=VEL/3; + if(VEL<=50) + VEL=50; + } + wait_ms(VEL); +} + +void crear_fig(char type_fig,char rotacion,char columna) +{ + switch (type_fig){ + case 1: if(columna>7) + columna=7; + copy_matrix(5,1,1,PLANT,columna); break; + + case 2: if(rotacion==1 || rotacion==3) + copy_matrix(0,0,0,PLANT,columna); + if(rotacion==2 || rotacion==4) + copy_matrix(5,5,2,PLANT,columna); + break; + + case 3: if(rotacion==1) + copy_matrix(0,0,1,PLANT,columna); + if(rotacion==2) + copy_matrix(5,2,0,PLANT,columna); + if(rotacion==3) + copy_matrix(1,3,3,PLANT,columna); + if(rotacion==4) + copy_matrix(5,6,2,PLANT,columna); + break; + + case 4: if(rotacion==1) + copy_matrix(5,3,2,PLANT,columna); + if(rotacion==2) + copy_matrix(0,1,0,PLANT,columna); + if(rotacion==3) + copy_matrix(5,2,3,PLANT,columna); + if(rotacion==4) + copy_matrix(3,1,3,PLANT,columna); + break; + + case 5: if(rotacion==1 || rotacion==3) + copy_matrix(5,4,1,PLANT,columna); + if(rotacion==2 || rotacion==4) + copy_matrix(0,1,3,PLANT,columna); + break; + } +} + +void figuras(){ + figura= rand() % 5+1; + rotacion= rand() % 4+1; + columna= 4; + } + +void elimina_linea(){ + for(uint8_t i=0;i<9;i++){ + if(matrix_act[i]==255){ + for(uint8_t a=i;a>=1;a--){ + sendSPI(a,matrix_act[a-1]); + matrix_act[a]=matrix_act[a-1]; + } + punto++; + printf("%f", punto); + } + } +} + +void tetris() { + bajar.attach(&bajaf, 0.1); + init_display(); + borrar(); + while(1){ + figuras(); + buscar_fila(); + cont=0; + elimina_linea(); + while (cont<fila){ + movimiento_fig(); + crear_fig(figura,rotacion,columna); + buscar_fila(); + print_matrix(matrix_temp); + } + guardar(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + + void hacer_carita() + { + int k; + uint8_t carita[8]={0b00000000, 0, 0b00100100,0b00100100,0,0, 0b01000010,0b00111100}; + for(k=1;k<=8;k++) + { + sendSPI(k ,carita[k]);} + } + void inicializar_menu(){ + sendSPI(0x0c,1); + sendSPI(0x0b,7); + sendSPI(0x09,0); + sendSPI(0x0A,0x0E); + int j=0; + for (j=0;j<4;j++){ + hacer_carita(); + wait (0.2); + borraraa(); + wait (0.2); + } + } + +void eleccion_tetris() +{ + int k; + uint8_t elec[8]={0b00000000, 0,0, 0b00000000,0b11010011,0b11011010,0b00001010, 0}; + for(k=1;k<=8;k++) + { + sendSPI(k ,elec[k]);} + /* reada(); + if(vx>0.6){ + borraraa(); + carro_juego();} + }*/ + } + +void eleccion_carrito() +{ + int k; + uint8_t elec1[8]={0b00000000, 0,0,0b00111000,0b01111100,0b00101000, 0, 0b11111111}; + for(k=1;k<=8;k++) + { + sendSPI(k ,elec1[k]);} + /*reada(); + if(vx>0.6){ + borraraa(); + tetris();}*/ + } + + int main() +{ int game=0; + int pant=1; + borraraa(); + inicializar_menu(); + //eleccion_tetris(); + while(1) + { + game=0; + reada(); + if(vy<0.48) + game=1; + if(vy>0.58) + game=2; + + switch(game) + { + case 1: + pant++; + if(pant%2!=0) + {borraraa(); + eleccion_tetris(); + if(vx>0.6){ + borraraa(); + carro_juego();} + } + if(pant%2==0) + {borraraa(); + eleccion_carrito(); + if(vx>0.6){ + borraraa(); + tetris();} + } + break; + + case 2: + pant++; + if(pant%2!=0) + {borraraa(); + eleccion_tetris(); + if(vx>0.6){ + borraraa(); + carro_juego();} + } + if(pant%2==0) + { borraraa(); + eleccion_carrito(); + if(vx>0.6){ + borraraa(); + tetris();} + } + break; + } + //printf(" pantalla %d \n", pant); + wait(0.5); + //printf("entra a %d \n", game); + //wait(1); + //printf(" vx %f \n", vx); + + } + } + + + /* + wait(1); + borraraa(); + eleccion_carrito(); + wait(1);*/ +