Contest IOT GSE5
/
contest_IOT4
Pong Game Tea Term
Fork of contest_IOT3 by
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "HCSR04.h" 00003 #include <math.h> 00004 00005 #define ECHO_1 PA_4 00006 #define ECHO_2 PB_3 00007 #define TRIG_1 PB_5 00008 #define TRIG_2 PA_10 00009 #define PUSH PA_9 //PC_13 00010 #define LED_1 PA_8 00011 00012 //------------------------------------ 00013 // Hyperterminal configuration 00014 // 115200 bauds, 8-bit data, no parity 00015 //------------------------------------ 00016 00017 00018 Serial pc(USBTX, USBRX); //UART 00019 DigitalOut led(LED_1); //Led d'état 00020 DigitalIn bp(PUSH); 00021 00022 HCSR04 sensor1(TRIG_1, ECHO_1); 00023 HCSR04 sensor2(TRIG_2, ECHO_2); 00024 00025 void pong_init_ttempro(){ 00026 00027 pc.printf("\033[2J"); //Efface la console 00028 pc.printf("\033[?25l"); //Cache le curseur 00029 00030 for(int i=0; i <= 128 ; i++){ 00031 pc.printf("\033[0;%dH",i); //Place le curseur à 0:0 00032 pc.printf("X"); //Place le curseur à 0:0 00033 pc.printf("\033[32;%dH",i); //Place le curseur à 0:0 00034 pc.printf("X"); //Place le curseur à 0:0 00035 } 00036 00037 for(int i=0; i <= 32 ; i++){ 00038 pc.printf("\033[%d;0H",i); //Place le curseur à 0:0 00039 pc.printf("X"); //Place le curseur à 0:0 00040 pc.printf("\033[%d;128H",i); //Place le curseur à 0:0 00041 pc.printf("X"); //Place le curseur à 0:0 00042 } 00043 00044 } 00045 00046 void print_cursor_ttempro(int *pos1, int *pos1prec, int *pos2, int *pos2prec){ 00047 for(int i=0;i<=29;i++){ 00048 if( pos1[i] != pos1prec[i] ){ 00049 if(pos1[i] == 1){ 00050 pc.printf("\033[%d;3H",i+2); //Place le curseur à 0:0 00051 pc.printf("X"); //Place le curseur à 0:0 00052 } 00053 else{ 00054 pc.printf("\033[%d;3H",i+2); //Place le curseur à 0:0 00055 pc.printf(" "); //Place le curseur à 0:0 00056 } 00057 } 00058 00059 if( pos2[i] != pos2prec[i] ){ 00060 if(pos2[i] == 1){ 00061 pc.printf("\033[%d;126H",i+2); //Place le curseur à 0:0 00062 pc.printf("X"); //Place le curseur à 0:0 00063 } 00064 else{ 00065 pc.printf("\033[%d;126H",i+2); //Place le curseur à 0:0 00066 pc.printf(" "); //Place le curseur à 0:0 00067 } 00068 } 00069 } 00070 } 00071 00072 void set_pos_vector(int *pos, int distance){ 00073 00074 if(distance <= 10){ 00075 for(int i=0;i<=5;i++){ pos[i] = 1; } 00076 } 00077 else if(distance >= 34){ 00078 for(int i=24;i<=29;i++){ pos[i] = 1; } 00079 } 00080 else{ 00081 for(int i=(distance-10);i<=(distance-4);i++){ pos[i] = 1; } 00082 } 00083 } 00084 00085 int set_print_ball(int *pos1,int *pos2,double *posBallX, double *posBallY, double *angBall){ 00086 00087 pc.printf("\033[%d;%dH",(int)*posBallY, (int)*posBallX); //Place le curseur à 0:0 00088 pc.printf(" "); //Place le curseur à 0:0 00089 *posBallX = *posBallX + 2.0*cos((double)*angBall*3.1415/180.0); 00090 *posBallY = *posBallY - 2.0*sin((double)*angBall*3.1415/180.0); 00091 00092 if(*posBallX <= 4){ 00093 if(pos1[(int)*posBallY] == 1){ 00094 *posBallX = 8 - *posBallX; 00095 *angBall = 180 - *angBall; 00096 } 00097 else{ return 1; } 00098 } 00099 else if(*posBallX >= 125){ 00100 if(pos2[(int)*posBallY] == 1){ 00101 *posBallX = 250 - *posBallX; 00102 *angBall = 180 - *angBall; 00103 } 00104 else{ return 2; } 00105 } 00106 00107 00108 if(*posBallY <= 2){ 00109 *posBallY = -*posBallY+4; 00110 *angBall = -*angBall; 00111 } 00112 else if(*posBallY >= 31){ 00113 *posBallY = 62 - *posBallY; 00114 *angBall = -*angBall; 00115 } 00116 pc.printf("\033[%d;%dH",(int)*posBallY, (int)*posBallX); //Place le curseur à 0:0 00117 pc.printf("o"); //Place le curseur à 0:0 00118 return 3; 00119 } 00120 00121 int main() { 00122 int pos1prec[30]; 00123 int pos2prec[30]; 00124 int pos1[30]; 00125 int pos2[30]; 00126 double posBallX; 00127 double posBallY; 00128 double angBall; 00129 int distance1; 00130 int distance2; 00131 00132 int state; 00133 int p1_score; 00134 int p2_score; 00135 00136 pc.baud(115200); 00137 pong_init_ttempro(); 00138 posBallX = 5.0; 00139 posBallY = 19.0; 00140 angBall = 25.0; 00141 state = 0; 00142 p1_score = 0; 00143 p2_score = 0; 00144 wait(1); 00145 led=1; 00146 wait(1); 00147 //Initialisation de l'interruption : en appuyant sur le bouton bleu de la carte, le programme change d'état 00148 00149 00150 //Boucle d'exécution du programme 00151 while(1) { 00152 switch(state){ 00153 case 0 : if(bp.read() == 1){ 00154 state = 3; 00155 pong_init_ttempro(); 00156 led = 1; 00157 } 00158 else led = 0; 00159 break; 00160 00161 case 3 : for(int i=0; i<=29; i++){ 00162 pos1prec[i]= pos1[i]; 00163 pos2prec[i]= pos2[i]; 00164 pos1[i]= 0; 00165 pos2[i]= 0; 00166 } 00167 distance1 = sensor1.distance(1); 00168 distance2 = sensor2.distance(1); 00169 set_pos_vector(pos1,distance1); 00170 set_pos_vector(pos2,distance2); 00171 print_cursor_ttempro(pos1,pos1prec,pos2,pos2prec); 00172 state = set_print_ball(pos1,pos2,&posBallX,&posBallY,&angBall); 00173 break; 00174 00175 case 1 : p2_score++; 00176 if( p2_score >= 3){ 00177 pc.printf("\033[2J"); //Efface la console 00178 pc.printf("\033[16;60H"); 00179 pc.printf("P2 WIN "); 00180 p1_score = 0; 00181 p2_score = 0; 00182 posBallX = 5.0; 00183 posBallY = 19.0; 00184 angBall = 25.0; 00185 } 00186 else{ 00187 pc.printf("\033[2J"); //Efface la console 00188 pc.printf("\033[10;60H"); 00189 pc.printf("P1 : %d // P2 : %d",p1_score,p2_score); 00190 posBallX = 5.0; 00191 posBallY = 19.0; 00192 angBall = 25.0; 00193 00194 } 00195 state = 0; 00196 break; 00197 00198 case 2 : p1_score++; 00199 if( p1_score >= 3){ 00200 pc.printf("\033[2J"); //Efface la console 00201 pc.printf("\033[16;60H"); 00202 pc.printf("P1 WIN "); 00203 p1_score = 0; 00204 p2_score = 0; 00205 posBallX = 124.0; 00206 posBallY = 19.0; 00207 angBall = 145.0; 00208 } 00209 else{ 00210 pc.printf("\033[2J"); //Efface la console 00211 pc.printf("\033[10;60H"); 00212 pc.printf("P1 : %d // P2 : %d",p1_score,p2_score); 00213 posBallX = 124.0; 00214 posBallY = 19.0; 00215 angBall = 145.0; 00216 } 00217 state = 0; 00218 break; 00219 } 00220 wait(0.1); 00221 } 00222 } 00223 00224
Generated on Mon Jul 18 2022 20:04:40 by 1.7.2