Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:b09782a64039, 2018-11-16 (annotated)
- Committer:
- cristianvillarraga
- Date:
- Fri Nov 16 13:27:25 2018 +0000
- Revision:
- 0:b09782a64039
- Child:
- 1:ebfb091d5b63
Juegode tetris y pingpong con interfaz;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cristianvillarraga | 0:b09782a64039 | 1 | #include "mbed.h"//biblioteca por defecto |
| cristianvillarraga | 0:b09782a64039 | 2 | #include "algo.h"//biblioteca creada que contiene las figuras del juego de tetris |
| cristianvillarraga | 0:b09782a64039 | 3 | #define MAXDAT 3 |
| cristianvillarraga | 0:b09782a64039 | 4 | Ticker anal; |
| cristianvillarraga | 0:b09782a64039 | 5 | AnalogIn vrx(A0);//puertos de entrada para lectura del joystick |
| cristianvillarraga | 0:b09782a64039 | 6 | AnalogIn vry(A1);//puertos de entrada para lectura del joystick |
| cristianvillarraga | 0:b09782a64039 | 7 | SPI deviceM(PB_15, PB_14, PB_13);//puertos usados para conectar la matriz |
| cristianvillarraga | 0:b09782a64039 | 8 | DigitalOut ssel (PB_12);//puertos usados para conectar la matriz |
| cristianvillarraga | 0:b09782a64039 | 9 | Serial pc(USBTX,USBRX);//conexion por puerto USB |
| cristianvillarraga | 0:b09782a64039 | 10 | |
| cristianvillarraga | 0:b09782a64039 | 11 | int j=1,op;//variable puntero |
| cristianvillarraga | 0:b09782a64039 | 12 | double a=0.4;// variable que representa la velocidad del juego |
| cristianvillarraga | 0:b09782a64039 | 13 | int dir=0; //movimiento de la pelota: 0=derecha,1=izquierda |
| cristianvillarraga | 0:b09782a64039 | 14 | int up=0; //movimiento de la pelota: 0=arriba,1=abajo |
| cristianvillarraga | 0:b09782a64039 | 15 | uint8_t FIG_J[6]={0x22,0x22,0xe2,0xa2,0xe7,0x0};//arreglo que contiene las iniciales T y P (iniciales de tetris y pin pon) |
| cristianvillarraga | 0:b09782a64039 | 16 | uint8_t FIG_U[8]={0xe7,0xa5,0xa7,0xa1,0xe7,0x0,0x0,0x0};//arreglo de 8 posiciones que contiene las iniciales de game over |
| cristianvillarraga | 0:b09782a64039 | 17 | uint8_t FIG_P[8]={0x38,0x10,0x0,0x0,0x0,0x0,0x0,0x0};//arreglo de 8 posiciones que contiene la barra y la pelota, cada bit representa los 8 leds de cada columna, ya el dexplazamiento de bit a bit representa los leds de las filas |
| cristianvillarraga | 0:b09782a64039 | 18 | float mx;//variable donde se guarda los voltajes leidos |
| cristianvillarraga | 0:b09782a64039 | 19 | float msx;//variable donde se escalan los voltajes leidos |
| cristianvillarraga | 0:b09782a64039 | 20 | float my;//variable donde se guarda los voltajes leidos |
| cristianvillarraga | 0:b09782a64039 | 21 | float msy;//variable donde se escalan los voltajes leidos |
| cristianvillarraga | 0:b09782a64039 | 22 | void inicio(); |
| cristianvillarraga | 0:b09782a64039 | 23 | void mostrar(); |
| cristianvillarraga | 0:b09782a64039 | 24 | void mostrarg(); |
| cristianvillarraga | 0:b09782a64039 | 25 | void mostrarj(); |
| cristianvillarraga | 0:b09782a64039 | 26 | void borrar(); |
| cristianvillarraga | 0:b09782a64039 | 27 | void barra(); |
| cristianvillarraga | 0:b09782a64039 | 28 | void barra_ini(); |
| cristianvillarraga | 0:b09782a64039 | 29 | void inicio(); |
| cristianvillarraga | 0:b09782a64039 | 30 | uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla. |
| cristianvillarraga | 0:b09782a64039 | 31 | uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0}; |
| cristianvillarraga | 0:b09782a64039 | 32 | uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0}; //Matriz temporal de las fichas. |
| cristianvillarraga | 0:b09782a64039 | 33 | uint8_t dat[MAXDAT]={0,0,0}; |
| cristianvillarraga | 0:b09782a64039 | 34 | uint8_t fila=0,save=0,i=0,cont=0,mcol=0,num=0,grad=0; |
| cristianvillarraga | 0:b09782a64039 | 35 | |
| cristianvillarraga | 0:b09782a64039 | 36 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| cristianvillarraga | 0:b09782a64039 | 37 | |
| cristianvillarraga | 0:b09782a64039 | 38 | //FUNCIONES EN COMUN |
| cristianvillarraga | 0:b09782a64039 | 39 | |
| cristianvillarraga | 0:b09782a64039 | 40 | void sendSPI(uint8_t d1, uint8_t d2)//envia datos a la tarjeta, cierra y abre puertos |
| cristianvillarraga | 0:b09782a64039 | 41 | { |
| cristianvillarraga | 0:b09782a64039 | 42 | deviceM.unlock(); |
| cristianvillarraga | 0:b09782a64039 | 43 | ssel=0; |
| cristianvillarraga | 0:b09782a64039 | 44 | deviceM.write(d1); |
| cristianvillarraga | 0:b09782a64039 | 45 | deviceM.write(d2); |
| cristianvillarraga | 0:b09782a64039 | 46 | ssel=1; |
| cristianvillarraga | 0:b09782a64039 | 47 | deviceM.lock(); |
| cristianvillarraga | 0:b09782a64039 | 48 | } |
| cristianvillarraga | 0:b09782a64039 | 49 | |
| cristianvillarraga | 0:b09782a64039 | 50 | void test() //Test |
| cristianvillarraga | 0:b09782a64039 | 51 | { |
| cristianvillarraga | 0:b09782a64039 | 52 | sendSPI(0x09,0); //No decodificacion |
| cristianvillarraga | 0:b09782a64039 | 53 | sendSPI(0x0B,0x07); //Usa 8 leds |
| cristianvillarraga | 0:b09782a64039 | 54 | sendSPI(0x0C,1); //No se apaga |
| cristianvillarraga | 0:b09782a64039 | 55 | sendSPI(0x0A,0x0); |
| cristianvillarraga | 0:b09782a64039 | 56 | for (int i=0;i<2;i++) |
| cristianvillarraga | 0:b09782a64039 | 57 | { |
| cristianvillarraga | 0:b09782a64039 | 58 | sendSPI(0x0F,1); |
| cristianvillarraga | 0:b09782a64039 | 59 | wait (0.1); |
| cristianvillarraga | 0:b09782a64039 | 60 | sendSPI(0x0f,0); |
| cristianvillarraga | 0:b09782a64039 | 61 | wait (0.1); |
| cristianvillarraga | 0:b09782a64039 | 62 | } |
| cristianvillarraga | 0:b09782a64039 | 63 | |
| cristianvillarraga | 0:b09782a64039 | 64 | } |
| cristianvillarraga | 0:b09782a64039 | 65 | void borrar() //borra toda la matriz; |
| cristianvillarraga | 0:b09782a64039 | 66 | { |
| cristianvillarraga | 0:b09782a64039 | 67 | for(int i=0;i<=8;i++)//contador para recorrer posiciones |
| cristianvillarraga | 0:b09782a64039 | 68 | { |
| cristianvillarraga | 0:b09782a64039 | 69 | sendSPI(0x0+i,0x00);//recorre bit por bit colocando solo 0 |
| cristianvillarraga | 0:b09782a64039 | 70 | } |
| cristianvillarraga | 0:b09782a64039 | 71 | } |
| cristianvillarraga | 0:b09782a64039 | 72 | |
| cristianvillarraga | 0:b09782a64039 | 73 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| cristianvillarraga | 0:b09782a64039 | 74 | |
| cristianvillarraga | 0:b09782a64039 | 75 | //FUNCIONES PIN PON |
| cristianvillarraga | 0:b09782a64039 | 76 | |
| cristianvillarraga | 0:b09782a64039 | 77 | void analogo()//lee los voltajes generados por el joystick, los escala, e imprime dicho valor |
| cristianvillarraga | 0:b09782a64039 | 78 | { |
| cristianvillarraga | 0:b09782a64039 | 79 | mx=vrx.read();//lectura del volytaje en el eje x |
| cristianvillarraga | 0:b09782a64039 | 80 | msx=mx;//multiplica por este 3300 con el fin escalar el valor leido |
| cristianvillarraga | 0:b09782a64039 | 81 | my=vry.read();//lectura del voltaje en el eje y |
| cristianvillarraga | 0:b09782a64039 | 82 | msy=my;//multiplica por este 3300 con el fin escalar el valor leido |
| cristianvillarraga | 0:b09782a64039 | 83 | printf("movimiento_x = %f",msx);//imprimir en pantalla los valores leidos |
| cristianvillarraga | 0:b09782a64039 | 84 | printf("movimiento_y = %f",msy);//imprimir en pantalla los valores leidos |
| cristianvillarraga | 0:b09782a64039 | 85 | } |
| cristianvillarraga | 0:b09782a64039 | 86 | |
| cristianvillarraga | 0:b09782a64039 | 87 | void barra()//desplaza la barra de lado a lado segun los movimientos en el joystick |
| cristianvillarraga | 0:b09782a64039 | 88 | { |
| cristianvillarraga | 0:b09782a64039 | 89 | if(msx<0.2)//condicion segun la lectura del voltaje |
| cristianvillarraga | 0:b09782a64039 | 90 | { |
| cristianvillarraga | 0:b09782a64039 | 91 | int temp1 = FIG_P[0]&(0x80);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit mas significativo es 1 y asi limitar el dezplazamiento de la barra |
| cristianvillarraga | 0:b09782a64039 | 92 | if(temp1==0)//condicion segun el resultado de la operacion |
| cristianvillarraga | 0:b09782a64039 | 93 | { |
| cristianvillarraga | 0:b09782a64039 | 94 | FIG_P[0]=FIG_P[0]<<1; //dezplazamiento hacia la izquierda en la matriz |
| cristianvillarraga | 0:b09782a64039 | 95 | } |
| cristianvillarraga | 0:b09782a64039 | 96 | } |
| cristianvillarraga | 0:b09782a64039 | 97 | else if(msx>0.7)//condicion segun la lectura del voltaje |
| cristianvillarraga | 0:b09782a64039 | 98 | { |
| cristianvillarraga | 0:b09782a64039 | 99 | int temp1 = FIG_P[0]&(0x01);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit menos significativo es 1 y asi limitar el dezplazamiento de la barra |
| cristianvillarraga | 0:b09782a64039 | 100 | if(temp1==0)//condicion segun el resultado de la operacion |
| cristianvillarraga | 0:b09782a64039 | 101 | { |
| cristianvillarraga | 0:b09782a64039 | 102 | FIG_P[0]=FIG_P[0]>>1; //dezplazamiento hacia la derecha en la matriz |
| cristianvillarraga | 0:b09782a64039 | 103 | } |
| cristianvillarraga | 0:b09782a64039 | 104 | } |
| cristianvillarraga | 0:b09782a64039 | 105 | |
| cristianvillarraga | 0:b09782a64039 | 106 | } |
| cristianvillarraga | 0:b09782a64039 | 107 | |
| cristianvillarraga | 0:b09782a64039 | 108 | void barra_ini()//inicialmente se muestra la barra y la pelota, para que se dezplacen al tiempo antes de iniciar el juego |
| cristianvillarraga | 0:b09782a64039 | 109 | { |
| cristianvillarraga | 0:b09782a64039 | 110 | if(msx<0.3)//condicion segun la lectura del voltaje |
| cristianvillarraga | 0:b09782a64039 | 111 | { |
| cristianvillarraga | 0:b09782a64039 | 112 | int temp1 = FIG_P[0]&(0x80);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit mas significativo es 1 y asi limitar el dezplazamiento de la barra |
| cristianvillarraga | 0:b09782a64039 | 113 | if(temp1==0)//condicion segun el resultado de la operacion |
| cristianvillarraga | 0:b09782a64039 | 114 | { |
| cristianvillarraga | 0:b09782a64039 | 115 | FIG_P[0]=FIG_P[0]<<1; |
| cristianvillarraga | 0:b09782a64039 | 116 | FIG_P[1]=FIG_P[1]<<1;//desplaza hacia la izquierda al tiempo de la barra y la pelota antes de comenzar el juego |
| cristianvillarraga | 0:b09782a64039 | 117 | |
| cristianvillarraga | 0:b09782a64039 | 118 | } |
| cristianvillarraga | 0:b09782a64039 | 119 | } |
| cristianvillarraga | 0:b09782a64039 | 120 | else if(msx>0.7)//condicion segun la lectura del voltaje |
| cristianvillarraga | 0:b09782a64039 | 121 | { |
| cristianvillarraga | 0:b09782a64039 | 122 | int temp1 = FIG_P[0]&(0x01);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit menos significativo es 1 y asi limitar el dezplazamiento de la barra |
| cristianvillarraga | 0:b09782a64039 | 123 | if(temp1==0)//condicion segun el resultado de la operacion |
| cristianvillarraga | 0:b09782a64039 | 124 | { |
| cristianvillarraga | 0:b09782a64039 | 125 | FIG_P[0]=FIG_P[0]>>1; |
| cristianvillarraga | 0:b09782a64039 | 126 | FIG_P[1]=FIG_P[1]>>1; //desplaza hacia la derecha al tiempo de la barra y la pelota antes de comenzar el juego |
| cristianvillarraga | 0:b09782a64039 | 127 | |
| cristianvillarraga | 0:b09782a64039 | 128 | } |
| cristianvillarraga | 0:b09782a64039 | 129 | } |
| cristianvillarraga | 0:b09782a64039 | 130 | |
| cristianvillarraga | 0:b09782a64039 | 131 | } |
| cristianvillarraga | 0:b09782a64039 | 132 | |
| cristianvillarraga | 0:b09782a64039 | 133 | void move_fig()//mueve la palota por toda la matriz, y limita sus desplazamientos con cambios de direccion simulando un rebote contra paredes |
| cristianvillarraga | 0:b09782a64039 | 134 | { |
| cristianvillarraga | 0:b09782a64039 | 135 | barra();//llamado a la funcion barra para poder dezplazar mientras la pelota se mueve |
| cristianvillarraga | 0:b09782a64039 | 136 | if(dir==0) //condicional para el valor de la variable que controla el desplazamiento hacia los lados de la pelota |
| cristianvillarraga | 0:b09782a64039 | 137 | { |
| cristianvillarraga | 0:b09782a64039 | 138 | if (up==0)//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota |
| cristianvillarraga | 0:b09782a64039 | 139 | { |
| cristianvillarraga | 0:b09782a64039 | 140 | FIG_P[j+1] = FIG_P[j]>>1;//desplazamiento diagonal derecha ascendente de la pelota |
| cristianvillarraga | 0:b09782a64039 | 141 | FIG_P[j] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza |
| cristianvillarraga | 0:b09782a64039 | 142 | } |
| cristianvillarraga | 0:b09782a64039 | 143 | else//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota |
| cristianvillarraga | 0:b09782a64039 | 144 | { |
| cristianvillarraga | 0:b09782a64039 | 145 | FIG_P[j+1] = FIG_P[j+2]>>1;//desplazamiento diagonal derecha descendente de la pelota |
| cristianvillarraga | 0:b09782a64039 | 146 | FIG_P[j+2] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza |
| cristianvillarraga | 0:b09782a64039 | 147 | } |
| cristianvillarraga | 0:b09782a64039 | 148 | |
| cristianvillarraga | 0:b09782a64039 | 149 | } |
| cristianvillarraga | 0:b09782a64039 | 150 | else //condicional para el valor de la variable que controla el desplazamiento hacia los lados de la pelota |
| cristianvillarraga | 0:b09782a64039 | 151 | { |
| cristianvillarraga | 0:b09782a64039 | 152 | if(up==0)//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota |
| cristianvillarraga | 0:b09782a64039 | 153 | { |
| cristianvillarraga | 0:b09782a64039 | 154 | FIG_P[j+1] = FIG_P[j]<<1;//desplazamiento diagonal izquierda ascendente de la pelota |
| cristianvillarraga | 0:b09782a64039 | 155 | FIG_P[j] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza |
| cristianvillarraga | 0:b09782a64039 | 156 | } |
| cristianvillarraga | 0:b09782a64039 | 157 | else//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota |
| cristianvillarraga | 0:b09782a64039 | 158 | { |
| cristianvillarraga | 0:b09782a64039 | 159 | FIG_P[j+1] = FIG_P[j+2]<<1;//desplazamiento diagonal izquierda descendente de la pelota |
| cristianvillarraga | 0:b09782a64039 | 160 | FIG_P[j+2] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza |
| cristianvillarraga | 0:b09782a64039 | 161 | } |
| cristianvillarraga | 0:b09782a64039 | 162 | |
| cristianvillarraga | 0:b09782a64039 | 163 | |
| cristianvillarraga | 0:b09782a64039 | 164 | } |
| cristianvillarraga | 0:b09782a64039 | 165 | |
| cristianvillarraga | 0:b09782a64039 | 166 | if(FIG_P[j+1]==0x80)//condiciona a que la pelota llegue al extremo izquierdo de la matriz, justo en el bit mas significativo |
| cristianvillarraga | 0:b09782a64039 | 167 | |
| cristianvillarraga | 0:b09782a64039 | 168 | { |
| cristianvillarraga | 0:b09782a64039 | 169 | dir=0;// cambia de direccion hacia la derecha |
| cristianvillarraga | 0:b09782a64039 | 170 | |
| cristianvillarraga | 0:b09782a64039 | 171 | } |
| cristianvillarraga | 0:b09782a64039 | 172 | else if(FIG_P[j+1]==0x01)//condiciona a que la pelota llegue al extremo derecho de la matriz, justo en el bit menos significativo |
| cristianvillarraga | 0:b09782a64039 | 173 | { |
| cristianvillarraga | 0:b09782a64039 | 174 | dir=1;// cambia de direccion hacia la izquierda |
| cristianvillarraga | 0:b09782a64039 | 175 | } |
| cristianvillarraga | 0:b09782a64039 | 176 | |
| cristianvillarraga | 0:b09782a64039 | 177 | mostrar();//hace un llamado a la funcion mostrar con el fin de estar refrescando los datos a imprimir |
| cristianvillarraga | 0:b09782a64039 | 178 | wait(a);// tiempo de espera para poder visualizar los dezplazamientos |
| cristianvillarraga | 0:b09782a64039 | 179 | |
| cristianvillarraga | 0:b09782a64039 | 180 | if(j+1==7)//condiciona a que la pelota llegue hasta la extremo superior de la matriz |
| cristianvillarraga | 0:b09782a64039 | 181 | { |
| cristianvillarraga | 0:b09782a64039 | 182 | up=1;//cambia la direccion de la pelota hacia abajo |
| cristianvillarraga | 0:b09782a64039 | 183 | } |
| cristianvillarraga | 0:b09782a64039 | 184 | else if(j==0)//condiciona a que la pelota llegue hasta la extremo inferior de la matriz |
| cristianvillarraga | 0:b09782a64039 | 185 | { |
| cristianvillarraga | 0:b09782a64039 | 186 | int temp2=FIG_P[j+1]&FIG_P[0];//se crea una variable temporal, para alojar alli el resultado de la operacion logica AND, con el fin de identificar si este aloja un 1 o un 0, de esta forma se sabe si la pelota alcanzo a ser golpeada por la barra |
| cristianvillarraga | 0:b09782a64039 | 187 | if(temp2==0)//condiconal si la variable temproal es igual a 0 |
| cristianvillarraga | 0:b09782a64039 | 188 | { |
| cristianvillarraga | 0:b09782a64039 | 189 | FIG_P[j] = 0x00; |
| cristianvillarraga | 0:b09782a64039 | 190 | FIG_P[j+1] = 0x00;//al no ser devuelta la pelota por la barra, tanto como la pelota como la barra son borradas simulando un game over |
| cristianvillarraga | 0:b09782a64039 | 191 | mostrarg();//imprime en la matriz las letras G,O (iniciales de game over) indicando que el juego termino |
| cristianvillarraga | 0:b09782a64039 | 192 | wait(3);//tiempo en el que duran las letras en pantalla |
| cristianvillarraga | 0:b09782a64039 | 193 | borrar();//borra contenido actual en la matriz |
| cristianvillarraga | 0:b09782a64039 | 194 | |
| cristianvillarraga | 0:b09782a64039 | 195 | } |
| cristianvillarraga | 0:b09782a64039 | 196 | up=0;// la pelota al ser golpeada por la barra subira de nuevo |
| cristianvillarraga | 0:b09782a64039 | 197 | a=a/1.5;//reduce a la mitad el tiempo de espera, cada vez que la barra devuelve la pelota, aumenta la velocidad de dezplazamiento, es decir la velocidad del juego aumenta |
| cristianvillarraga | 0:b09782a64039 | 198 | } |
| cristianvillarraga | 0:b09782a64039 | 199 | } |
| cristianvillarraga | 0:b09782a64039 | 200 | |
| cristianvillarraga | 0:b09782a64039 | 201 | void mostrar()//imprime en la matriz la barra y la pelota contenidas en el arreglo |
| cristianvillarraga | 0:b09782a64039 | 202 | { |
| cristianvillarraga | 0:b09782a64039 | 203 | for(int i=0; i<8; i++)//contador para recorrer posiciones |
| cristianvillarraga | 0:b09782a64039 | 204 | { |
| cristianvillarraga | 0:b09782a64039 | 205 | sendSPI(i+1, FIG_P[i]);//avanza de 1 en 1 para recorrer todas las posiciones del arreglo e irlas mostrando |
| cristianvillarraga | 0:b09782a64039 | 206 | } |
| cristianvillarraga | 0:b09782a64039 | 207 | } |
| cristianvillarraga | 0:b09782a64039 | 208 | |
| cristianvillarraga | 0:b09782a64039 | 209 | void mostrarg()//imprime en la matriz la barra y la pelota contenidas en el arreglo |
| cristianvillarraga | 0:b09782a64039 | 210 | { |
| cristianvillarraga | 0:b09782a64039 | 211 | for(int i=0; i<8; i++)//contador para recorrer posciones |
| cristianvillarraga | 0:b09782a64039 | 212 | { |
| cristianvillarraga | 0:b09782a64039 | 213 | sendSPI(i+1, FIG_U[i]);//avanza de 1 en 1 para recorrer todas las posiciones del arreglo e irlas mostrando |
| cristianvillarraga | 0:b09782a64039 | 214 | } |
| cristianvillarraga | 0:b09782a64039 | 215 | } |
| cristianvillarraga | 0:b09782a64039 | 216 | void mostrarj()//imprime en la matriz la barra y la pelota contenidas en el arreglo |
| cristianvillarraga | 0:b09782a64039 | 217 | { |
| cristianvillarraga | 0:b09782a64039 | 218 | for(int i=0; i<6; i++)//contador para recorrer posciones |
| cristianvillarraga | 0:b09782a64039 | 219 | { |
| cristianvillarraga | 0:b09782a64039 | 220 | sendSPI(i+1, FIG_J[i]);//avanza de 1 en 1 para recorrer todas las posiciones del arreglo e irlas mostrando |
| cristianvillarraga | 0:b09782a64039 | 221 | } |
| cristianvillarraga | 0:b09782a64039 | 222 | } |
| cristianvillarraga | 0:b09782a64039 | 223 | |
| cristianvillarraga | 0:b09782a64039 | 224 | void inicio()//antes de comenzar el juego se hace una letura de voltaje en y del joystick, con el fin de lanzar la pelota e iniciar, ahora bien segun el desplazamiento que se haga de la barra con el joystick, la pelota tomara un direccion diferente de lanzamiento |
| cristianvillarraga | 0:b09782a64039 | 225 | { |
| cristianvillarraga | 0:b09782a64039 | 226 | analogo(); //se hace una llamada a la funcion analogo para hace las respectivas lecturas de voltaje |
| cristianvillarraga | 0:b09782a64039 | 227 | while(msy>0.7)//concional para el voltaje en y |
| cristianvillarraga | 0:b09782a64039 | 228 | { |
| cristianvillarraga | 0:b09782a64039 | 229 | analogo();//llamado a funcion analogo para leer voltajes |
| cristianvillarraga | 0:b09782a64039 | 230 | barra_ini();//llamado a funcion barra_ini para que haga los desplazamientos laterales junto a la pelota |
| cristianvillarraga | 0:b09782a64039 | 231 | mostrar();//llamado a funcion mostrar imprime el arreglo que contiene la barra y la pelota |
| cristianvillarraga | 0:b09782a64039 | 232 | if(msx<0.3)//condiciona segun voltaje en x |
| cristianvillarraga | 0:b09782a64039 | 233 | { |
| cristianvillarraga | 0:b09782a64039 | 234 | dir=1;//lanza la pelota inicialmente hacia la izquierda |
| cristianvillarraga | 0:b09782a64039 | 235 | } |
| cristianvillarraga | 0:b09782a64039 | 236 | else if (msx>0.7)//condiciona segun voltaje en x |
| cristianvillarraga | 0:b09782a64039 | 237 | { |
| cristianvillarraga | 0:b09782a64039 | 238 | dir=0;//lanza la pelota inicialmente hacia la derecha |
| cristianvillarraga | 0:b09782a64039 | 239 | } |
| cristianvillarraga | 0:b09782a64039 | 240 | } |
| cristianvillarraga | 0:b09782a64039 | 241 | |
| cristianvillarraga | 0:b09782a64039 | 242 | |
| cristianvillarraga | 0:b09782a64039 | 243 | } |
| cristianvillarraga | 0:b09782a64039 | 244 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| cristianvillarraga | 0:b09782a64039 | 245 | |
| cristianvillarraga | 0:b09782a64039 | 246 | //FUNCIONES MATRIZ |
| cristianvillarraga | 0:b09782a64039 | 247 | |
| cristianvillarraga | 0:b09782a64039 | 248 | |
| cristianvillarraga | 0:b09782a64039 | 249 | void imp_mat(uint8_t *temp)// Hace el desplazamiento hacia abajo de la figura |
| cristianvillarraga | 0:b09782a64039 | 250 | { |
| cristianvillarraga | 0:b09782a64039 | 251 | sendSPI(cont-3,mat_act[cont-3]); |
| cristianvillarraga | 0:b09782a64039 | 252 | sendSPI(cont-2,(*(temp+0) | mat_act[cont-2])); |
| cristianvillarraga | 0:b09782a64039 | 253 | sendSPI(cont-1,(*(temp+1) | mat_act[cont-1])); |
| cristianvillarraga | 0:b09782a64039 | 254 | sendSPI(cont,(*(temp+2) | mat_act[cont])); |
| cristianvillarraga | 0:b09782a64039 | 255 | } |
| cristianvillarraga | 0:b09782a64039 | 256 | uint32_t read_command() //ingresa "<",">" y define el tamaño del vector "dat" |
| cristianvillarraga | 0:b09782a64039 | 257 | { |
| cristianvillarraga | 0:b09782a64039 | 258 | char intc=pc.getc(); |
| cristianvillarraga | 0:b09782a64039 | 259 | while(intc != '<') |
| cristianvillarraga | 0:b09782a64039 | 260 | intc=pc.getc(); |
| cristianvillarraga | 0:b09782a64039 | 261 | for (int i =0;i<MAXDAT;i++) |
| cristianvillarraga | 0:b09782a64039 | 262 | dat[i]=pc.getc(); |
| cristianvillarraga | 0:b09782a64039 | 263 | intc=pc.getc(); |
| cristianvillarraga | 0:b09782a64039 | 264 | if(intc != '>'){ |
| cristianvillarraga | 0:b09782a64039 | 265 | return 0; |
| cristianvillarraga | 0:b09782a64039 | 266 | } |
| cristianvillarraga | 0:b09782a64039 | 267 | return 1; |
| cristianvillarraga | 0:b09782a64039 | 268 | } |
| cristianvillarraga | 0:b09782a64039 | 269 | void cop_fi (uint8_t* tfig) //Almacena la figura en la matriz temporal |
| cristianvillarraga | 0:b09782a64039 | 270 | { |
| cristianvillarraga | 0:b09782a64039 | 271 | for(i=0;i<8;i++) |
| cristianvillarraga | 0:b09782a64039 | 272 | { |
| cristianvillarraga | 0:b09782a64039 | 273 | mat_tmp[i]=*(tfig+i)>>dat[1]-1; |
| cristianvillarraga | 0:b09782a64039 | 274 | |
| cristianvillarraga | 0:b09782a64039 | 275 | } |
| cristianvillarraga | 0:b09782a64039 | 276 | for(i=0;i<8;i++) |
| cristianvillarraga | 0:b09782a64039 | 277 | { |
| cristianvillarraga | 0:b09782a64039 | 278 | mat_tmp1[i]= mat_tmp[i]; |
| cristianvillarraga | 0:b09782a64039 | 279 | } |
| cristianvillarraga | 0:b09782a64039 | 280 | } |
| cristianvillarraga | 0:b09782a64039 | 281 | void d_ale() |
| cristianvillarraga | 0:b09782a64039 | 282 | { |
| cristianvillarraga | 0:b09782a64039 | 283 | num=rand()%5+1; |
| cristianvillarraga | 0:b09782a64039 | 284 | mcol=4; |
| cristianvillarraga | 0:b09782a64039 | 285 | } |
| cristianvillarraga | 0:b09782a64039 | 286 | void ingred_d() //Tipo de figuras |
| cristianvillarraga | 0:b09782a64039 | 287 | { |
| cristianvillarraga | 0:b09782a64039 | 288 | uint8_t tf=dat[0]; |
| cristianvillarraga | 0:b09782a64039 | 289 | |
| cristianvillarraga | 0:b09782a64039 | 290 | switch(tf) |
| cristianvillarraga | 0:b09782a64039 | 291 | { |
| cristianvillarraga | 0:b09782a64039 | 292 | case tipo_c: // Cuadrado |
| cristianvillarraga | 0:b09782a64039 | 293 | cop_fi(FIG_C); |
| cristianvillarraga | 0:b09782a64039 | 294 | break; |
| cristianvillarraga | 0:b09782a64039 | 295 | case tipo_s: //S |
| cristianvillarraga | 0:b09782a64039 | 296 | cop_fi(FIG_S); |
| cristianvillarraga | 0:b09782a64039 | 297 | break; |
| cristianvillarraga | 0:b09782a64039 | 298 | case tipo_t: //T |
| cristianvillarraga | 0:b09782a64039 | 299 | cop_fi(FIG_T); |
| cristianvillarraga | 0:b09782a64039 | 300 | break; |
| cristianvillarraga | 0:b09782a64039 | 301 | case tipo_i: //I |
| cristianvillarraga | 0:b09782a64039 | 302 | cop_fi(FIG_I); |
| cristianvillarraga | 0:b09782a64039 | 303 | break; |
| cristianvillarraga | 0:b09782a64039 | 304 | case tipo_l: //L |
| cristianvillarraga | 0:b09782a64039 | 305 | cop_fi(FIG_L); |
| cristianvillarraga | 0:b09782a64039 | 306 | break; |
| cristianvillarraga | 0:b09782a64039 | 307 | |
| cristianvillarraga | 0:b09782a64039 | 308 | } |
| cristianvillarraga | 0:b09782a64039 | 309 | } |
| cristianvillarraga | 0:b09782a64039 | 310 | void analogoo() |
| cristianvillarraga | 0:b09782a64039 | 311 | { |
| cristianvillarraga | 0:b09782a64039 | 312 | mx=vrx.read(); |
| cristianvillarraga | 0:b09782a64039 | 313 | msx=mx; |
| cristianvillarraga | 0:b09782a64039 | 314 | my=vry.read(); |
| cristianvillarraga | 0:b09782a64039 | 315 | msy=my; |
| cristianvillarraga | 0:b09782a64039 | 316 | printf("Datosx = %f",msx); |
| cristianvillarraga | 0:b09782a64039 | 317 | } |
| cristianvillarraga | 0:b09782a64039 | 318 | void mover_fig()//mueve la figura por medio de botones |
| cristianvillarraga | 0:b09782a64039 | 319 | { |
| cristianvillarraga | 0:b09782a64039 | 320 | analogoo(); |
| cristianvillarraga | 0:b09782a64039 | 321 | int mfig; |
| cristianvillarraga | 0:b09782a64039 | 322 | |
| cristianvillarraga | 0:b09782a64039 | 323 | if(msy>0.7){ |
| cristianvillarraga | 0:b09782a64039 | 324 | mfig=1;} |
| cristianvillarraga | 0:b09782a64039 | 325 | if(msx<0.3){//mover figura a la derecha |
| cristianvillarraga | 0:b09782a64039 | 326 | mfig=2;} |
| cristianvillarraga | 0:b09782a64039 | 327 | if(msx>0.7){//mover figura a la izquierda |
| cristianvillarraga | 0:b09782a64039 | 328 | mfig=3;} |
| cristianvillarraga | 0:b09782a64039 | 329 | |
| cristianvillarraga | 0:b09782a64039 | 330 | switch(mfig) |
| cristianvillarraga | 0:b09782a64039 | 331 | { |
| cristianvillarraga | 0:b09782a64039 | 332 | case 1: |
| cristianvillarraga | 0:b09782a64039 | 333 | grad++; |
| cristianvillarraga | 0:b09782a64039 | 334 | if(grad<5){ |
| cristianvillarraga | 0:b09782a64039 | 335 | |
| cristianvillarraga | 0:b09782a64039 | 336 | switch (grad) |
| cristianvillarraga | 0:b09782a64039 | 337 | { |
| cristianvillarraga | 0:b09782a64039 | 338 | case 1: |
| cristianvillarraga | 0:b09782a64039 | 339 | mat_tmp[0]=mat_tmp1[4]; |
| cristianvillarraga | 0:b09782a64039 | 340 | mat_tmp[1]=mat_tmp1[5]; |
| cristianvillarraga | 0:b09782a64039 | 341 | mat_tmp[2]=mat_tmp1[6]; |
| cristianvillarraga | 0:b09782a64039 | 342 | break; |
| cristianvillarraga | 0:b09782a64039 | 343 | case 2: |
| cristianvillarraga | 0:b09782a64039 | 344 | mat_tmp[0]=mat_tmp1[0]; |
| cristianvillarraga | 0:b09782a64039 | 345 | mat_tmp[1]=mat_tmp1[2]; |
| cristianvillarraga | 0:b09782a64039 | 346 | mat_tmp[2]=mat_tmp1[1]; |
| cristianvillarraga | 0:b09782a64039 | 347 | break; |
| cristianvillarraga | 0:b09782a64039 | 348 | case 3: |
| cristianvillarraga | 0:b09782a64039 | 349 | mat_tmp[0]=mat_tmp1[6]; |
| cristianvillarraga | 0:b09782a64039 | 350 | mat_tmp[1]=mat_tmp1[5]; |
| cristianvillarraga | 0:b09782a64039 | 351 | mat_tmp[2]=mat_tmp1[4]; |
| cristianvillarraga | 0:b09782a64039 | 352 | break; |
| cristianvillarraga | 0:b09782a64039 | 353 | case 4: |
| cristianvillarraga | 0:b09782a64039 | 354 | mat_tmp[0]=mat_tmp1[0]; |
| cristianvillarraga | 0:b09782a64039 | 355 | mat_tmp[1]=mat_tmp1[1]; |
| cristianvillarraga | 0:b09782a64039 | 356 | mat_tmp[2]=mat_tmp1[2]; |
| cristianvillarraga | 0:b09782a64039 | 357 | break; |
| cristianvillarraga | 0:b09782a64039 | 358 | } |
| cristianvillarraga | 0:b09782a64039 | 359 | } |
| cristianvillarraga | 0:b09782a64039 | 360 | if(grad>4){ |
| cristianvillarraga | 0:b09782a64039 | 361 | grad=0; |
| cristianvillarraga | 0:b09782a64039 | 362 | } |
| cristianvillarraga | 0:b09782a64039 | 363 | break; |
| cristianvillarraga | 0:b09782a64039 | 364 | case 2: |
| cristianvillarraga | 0:b09782a64039 | 365 | int temp1 = mat_tmp[i]&(0x01); |
| cristianvillarraga | 0:b09782a64039 | 366 | if(temp1==0){ |
| cristianvillarraga | 0:b09782a64039 | 367 | for(i=0;i<3;i++) |
| cristianvillarraga | 0:b09782a64039 | 368 | mat_tmp[i]=mat_tmp[i]>>1; //mover derecha |
| cristianvillarraga | 0:b09782a64039 | 369 | //for(i=0;i<7;i++) |
| cristianvillarraga | 0:b09782a64039 | 370 | // mat_tmp1[i]=mat_tmp1[i]>>2; |
| cristianvillarraga | 0:b09782a64039 | 371 | } |
| cristianvillarraga | 0:b09782a64039 | 372 | break; |
| cristianvillarraga | 0:b09782a64039 | 373 | case 3: |
| cristianvillarraga | 0:b09782a64039 | 374 | int temp2 = mat_tmp[i]&(0x80); |
| cristianvillarraga | 0:b09782a64039 | 375 | if(temp2==0) |
| cristianvillarraga | 0:b09782a64039 | 376 | { |
| cristianvillarraga | 0:b09782a64039 | 377 | //for(i=0;i<7;i++){ |
| cristianvillarraga | 0:b09782a64039 | 378 | //mat_tmp1[i]=mat_tmp1[i]<<2; |
| cristianvillarraga | 0:b09782a64039 | 379 | // } |
| cristianvillarraga | 0:b09782a64039 | 380 | for(i=0;i<3;i++) |
| cristianvillarraga | 0:b09782a64039 | 381 | { |
| cristianvillarraga | 0:b09782a64039 | 382 | mat_tmp[i]=mat_tmp[i]<<1; //mover izquierda |
| cristianvillarraga | 0:b09782a64039 | 383 | } |
| cristianvillarraga | 0:b09782a64039 | 384 | } |
| cristianvillarraga | 0:b09782a64039 | 385 | break; |
| cristianvillarraga | 0:b09782a64039 | 386 | } |
| cristianvillarraga | 0:b09782a64039 | 387 | } |
| cristianvillarraga | 0:b09782a64039 | 388 | void act_matrix(uint8_t* temp)//Evalua figura guardada y su espacio |
| cristianvillarraga | 0:b09782a64039 | 389 | { |
| cristianvillarraga | 0:b09782a64039 | 390 | for (i=0;i<9;i++){ |
| cristianvillarraga | 0:b09782a64039 | 391 | save=*(temp+2)& mat_act[i]; |
| cristianvillarraga | 0:b09782a64039 | 392 | if (save==0 ) |
| cristianvillarraga | 0:b09782a64039 | 393 | { |
| cristianvillarraga | 0:b09782a64039 | 394 | fila=i+1; |
| cristianvillarraga | 0:b09782a64039 | 395 | } |
| cristianvillarraga | 0:b09782a64039 | 396 | if (save!=0) |
| cristianvillarraga | 0:b09782a64039 | 397 | { |
| cristianvillarraga | 0:b09782a64039 | 398 | fila=i; |
| cristianvillarraga | 0:b09782a64039 | 399 | i=9; |
| cristianvillarraga | 0:b09782a64039 | 400 | } |
| cristianvillarraga | 0:b09782a64039 | 401 | } |
| cristianvillarraga | 0:b09782a64039 | 402 | } |
| cristianvillarraga | 0:b09782a64039 | 403 | |
| cristianvillarraga | 0:b09782a64039 | 404 | void guardar_mat(uint8_t *temp)//guarda la matriz |
| cristianvillarraga | 0:b09782a64039 | 405 | { |
| cristianvillarraga | 0:b09782a64039 | 406 | mat_act[fila-3]=(*(temp+0))| mat_act[fila-3]; |
| cristianvillarraga | 0:b09782a64039 | 407 | mat_act[fila-2]=(*(temp+1))| mat_act[fila-2]; |
| cristianvillarraga | 0:b09782a64039 | 408 | mat_act[fila-1]=(*(temp+2))| mat_act[fila-1]; |
| cristianvillarraga | 0:b09782a64039 | 409 | }; |
| cristianvillarraga | 0:b09782a64039 | 410 | void elim_lin() |
| cristianvillarraga | 0:b09782a64039 | 411 | { |
| cristianvillarraga | 0:b09782a64039 | 412 | for(i=0;i<9;i++){ |
| cristianvillarraga | 0:b09782a64039 | 413 | if(mat_act[i]==255){ |
| cristianvillarraga | 0:b09782a64039 | 414 | for(uint8_t a=i;a>=1;a--){ |
| cristianvillarraga | 0:b09782a64039 | 415 | sendSPI(a,mat_act[a-1]); |
| cristianvillarraga | 0:b09782a64039 | 416 | mat_act[a]=mat_act[a-1]; |
| cristianvillarraga | 0:b09782a64039 | 417 | } |
| cristianvillarraga | 0:b09782a64039 | 418 | } |
| cristianvillarraga | 0:b09782a64039 | 419 | } |
| cristianvillarraga | 0:b09782a64039 | 420 | } |
| cristianvillarraga | 0:b09782a64039 | 421 | |
| cristianvillarraga | 0:b09782a64039 | 422 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| cristianvillarraga | 0:b09782a64039 | 423 | |
| cristianvillarraga | 0:b09782a64039 | 424 | //FUNCION PRINCIPAL |
| cristianvillarraga | 0:b09782a64039 | 425 | |
| cristianvillarraga | 0:b09782a64039 | 426 | int main() |
| cristianvillarraga | 0:b09782a64039 | 427 | { |
| cristianvillarraga | 0:b09782a64039 | 428 | //orden de funciones |
| cristianvillarraga | 0:b09782a64039 | 429 | test(); |
| cristianvillarraga | 0:b09782a64039 | 430 | borrar(); |
| cristianvillarraga | 0:b09782a64039 | 431 | mostrarj(); |
| cristianvillarraga | 0:b09782a64039 | 432 | |
| cristianvillarraga | 0:b09782a64039 | 433 | while(1)//ciclo que determina segun lectura de la funcion analogo que caso del swtich tomar, es decir que juego elegir |
| cristianvillarraga | 0:b09782a64039 | 434 | { |
| cristianvillarraga | 0:b09782a64039 | 435 | analogo();//se llama funcion para leer voltaje |
| cristianvillarraga | 0:b09782a64039 | 436 | |
| cristianvillarraga | 0:b09782a64039 | 437 | if(msx<0.3)//condicional que lleva al usuario al primer caso, en este caso juego de pin pon |
| cristianvillarraga | 0:b09782a64039 | 438 | { |
| cristianvillarraga | 0:b09782a64039 | 439 | op=1;//contiene las funciones del juego de pin pon |
| cristianvillarraga | 0:b09782a64039 | 440 | } |
| cristianvillarraga | 0:b09782a64039 | 441 | if(msx>0.7)//condicional que lleva al usuario al primer caso, en este caso juego de tetris |
| cristianvillarraga | 0:b09782a64039 | 442 | { |
| cristianvillarraga | 0:b09782a64039 | 443 | op=2;//contiene las funciones del juego de pin pon |
| cristianvillarraga | 0:b09782a64039 | 444 | } |
| cristianvillarraga | 0:b09782a64039 | 445 | |
| cristianvillarraga | 0:b09782a64039 | 446 | switch(op)//switch que hace seleccion de juego |
| cristianvillarraga | 0:b09782a64039 | 447 | { |
| cristianvillarraga | 0:b09782a64039 | 448 | case 1: //contenido del juego de pin pon |
| cristianvillarraga | 0:b09782a64039 | 449 | |
| cristianvillarraga | 0:b09782a64039 | 450 | borrar(); |
| cristianvillarraga | 0:b09782a64039 | 451 | wait(0.2); |
| cristianvillarraga | 0:b09782a64039 | 452 | inicio(); |
| cristianvillarraga | 0:b09782a64039 | 453 | |
| cristianvillarraga | 0:b09782a64039 | 454 | while(1)//ciclo principal del juego |
| cristianvillarraga | 0:b09782a64039 | 455 | { |
| cristianvillarraga | 0:b09782a64039 | 456 | mostrar(); |
| cristianvillarraga | 0:b09782a64039 | 457 | analogo(); |
| cristianvillarraga | 0:b09782a64039 | 458 | move_fig(); |
| cristianvillarraga | 0:b09782a64039 | 459 | if(up==0) |
| cristianvillarraga | 0:b09782a64039 | 460 | { |
| cristianvillarraga | 0:b09782a64039 | 461 | j++; //la va sumando de a 1 a la variable puntero con el fin de que la pelota ascienda |
| cristianvillarraga | 0:b09782a64039 | 462 | } |
| cristianvillarraga | 0:b09782a64039 | 463 | else |
| cristianvillarraga | 0:b09782a64039 | 464 | { |
| cristianvillarraga | 0:b09782a64039 | 465 | j--;//la va restando de a 1 a la variable puntero con el fin de que la pelota descienda |
| cristianvillarraga | 0:b09782a64039 | 466 | } |
| cristianvillarraga | 0:b09782a64039 | 467 | |
| cristianvillarraga | 0:b09782a64039 | 468 | } |
| cristianvillarraga | 0:b09782a64039 | 469 | |
| cristianvillarraga | 0:b09782a64039 | 470 | case 2://contenido del juego de tetris |
| cristianvillarraga | 0:b09782a64039 | 471 | borrar(); |
| cristianvillarraga | 0:b09782a64039 | 472 | anal.attach(&mover_fig,500); |
| cristianvillarraga | 0:b09782a64039 | 473 | while(1) |
| cristianvillarraga | 0:b09782a64039 | 474 | { |
| cristianvillarraga | 0:b09782a64039 | 475 | while(read_command()==0); |
| cristianvillarraga | 0:b09782a64039 | 476 | ingred_d(); |
| cristianvillarraga | 0:b09782a64039 | 477 | act_matrix(mat_tmp); |
| cristianvillarraga | 0:b09782a64039 | 478 | for (cont=0;cont<fila;cont++) |
| cristianvillarraga | 0:b09782a64039 | 479 | { |
| cristianvillarraga | 0:b09782a64039 | 480 | analogoo(); |
| cristianvillarraga | 0:b09782a64039 | 481 | mover_fig(); |
| cristianvillarraga | 0:b09782a64039 | 482 | act_matrix(mat_tmp); |
| cristianvillarraga | 0:b09782a64039 | 483 | imp_mat(mat_tmp); |
| cristianvillarraga | 0:b09782a64039 | 484 | wait_ms(500); |
| cristianvillarraga | 0:b09782a64039 | 485 | } |
| cristianvillarraga | 0:b09782a64039 | 486 | guardar_mat(mat_tmp); |
| cristianvillarraga | 0:b09782a64039 | 487 | elim_lin(); |
| cristianvillarraga | 0:b09782a64039 | 488 | } |
| cristianvillarraga | 0:b09782a64039 | 489 | } |
| cristianvillarraga | 0:b09782a64039 | 490 | |
| cristianvillarraga | 0:b09782a64039 | 491 | } |
| cristianvillarraga | 0:b09782a64039 | 492 | } |
| cristianvillarraga | 0:b09782a64039 | 493 |