Mine Field Game
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
main.cpp
00001 #include "mbed.h" 00002 #include "uLCD_4DGL.h" 00003 #include "SDFileSystem.h" 00004 #include "wave_player.h" 00005 #define MINE 00006 uLCD_4DGL lcd(p28, p27, p30); 00007 AnalogIn AnalogX(p15); 00008 AnalogIn AnalogY(p16); 00009 SDFileSystem sd(p5,p6,p7,p8,"sd"); 00010 AnalogOut DACout(p18); 00011 00012 bool lose = false; 00013 00014 int main() { 00015 int AnalogXReading; 00016 int AnalogYReading; 00017 lcd.baudrate(3000000); 00018 int mine_field[4][4]; 00019 wave_player waver(&DACout); 00020 00021 00022 int round = 1; 00023 int mine; 00024 while(round <=3 && lose == false) 00025 { 00026 lcd.text_width(2); //2X size text 00027 lcd.text_height(2); 00028 lcd.printf("\n Round \n %d ", round); 00029 //printf("%d\n",round); 00030 int mine_location[round]; 00031 00032 for(int i=0; i<4; i++) 00033 { 00034 for(int j=0; j<4; j++) 00035 { 00036 mine_field[i][j]=0; 00037 } 00038 } 00039 00040 for(int i=0;i<round;i++) 00041 { 00042 bool same = false; 00043 mine = rand() % 14 + 1; 00044 do 00045 { 00046 for(int i=0; i<round; i++) 00047 { 00048 if(mine == mine_location[i]) 00049 { 00050 same = true; 00051 mine = rand() % 14 + 1; 00052 } 00053 else 00054 same = false; 00055 } 00056 }while(same == true); 00057 00058 mine_location[i]=mine; 00059 mine_field[mine%4][mine/4]=1; 00060 } 00061 00062 int startPointX=0; 00063 int startPointY=0; 00064 bool win=false; 00065 int previousX=0; 00066 int previousY=0; 00067 wait(3); 00068 lcd.cls(); 00069 while(1) { 00070 AnalogXReading = AnalogX.read()*128; 00071 AnalogYReading = AnalogY.read()*128; 00072 //lcd.cls(); 00073 lcd.line(0, 31 , 127, 31 , 0xFF0000); 00074 lcd.line(0, 63 , 127, 63 , 0xFF0000); 00075 lcd.line(0, 95 , 127, 95, 0xFF0000); 00076 lcd.line(31,0, 31, 127, 0xFF0000); 00077 lcd.line(63, 0, 63, 127, 0xFF0000); 00078 lcd.line(95, 0 , 95, 127, 0xFF0000); 00079 if(AnalogXReading >118) 00080 { 00081 if(startPointX<3) 00082 startPointX++; 00083 } 00084 if(AnalogXReading <10) 00085 { 00086 if(startPointX>0) 00087 startPointX--; 00088 } 00089 if(AnalogYReading >118) 00090 { 00091 if(startPointY>0) 00092 startPointY--; 00093 } 00094 if(AnalogYReading <10) 00095 { 00096 if(startPointY<3) 00097 startPointY++; 00098 } 00099 00100 //update ballLocation Here 00101 lcd.circle(32*startPointX+15, 32*startPointY+15, 5, 0xFF0000); 00102 #ifdef MINE 00103 for(int i=0 ; i<4; i++) 00104 { 00105 for(int j=0; j<4;j++) 00106 { 00107 if(mine_field[i][j]==1) 00108 lcd.circle(32*i+15, 32*j+15, 5, BLUE); 00109 } 00110 } 00111 #endif 00112 if(previousX != startPointX || previousY!= startPointY) 00113 { 00114 lcd.circle(32*previousX+15, 32*previousY+15, 5, GREEN); 00115 previousX=startPointX; 00116 previousY=startPointY; 00117 } 00118 00119 00120 if(startPointX == 3 && startPointY == 3) 00121 win = true; 00122 else if(mine_field[startPointX][startPointY]==1) 00123 lose= true; 00124 00125 if(win) 00126 { 00127 //make screen green 00128 lcd.cls(); 00129 if(round ==3) 00130 { 00131 lcd.media_init(); 00132 lcd.set_sector_address(0x0000, 0x001D); 00133 lcd.display_image(0,0); 00134 } 00135 break; 00136 } 00137 if(lose) 00138 { 00139 //make screen red 00140 lcd.cls(); 00141 lcd.text_width(2); //2X size text 00142 lcd.text_height(2); 00143 break; 00144 } 00145 wait(1); 00146 } 00147 round++; 00148 } 00149 lcd.text_width(2); //2X size text 00150 lcd.text_height(2); 00151 if(lose == true) 00152 { 00153 lcd.printf("You lose! "); 00154 FILE *wave_file = fopen("/sd/SDfiles/bad_disk_x.wav","r"); 00155 waver.play(wave_file); 00156 fclose(wave_file); 00157 } 00158 else 00159 { 00160 lcd.printf("You won!"); 00161 FILE *wave_file = fopen("/sd/SDfiles/applause_y.wav","r"); 00162 waver.play(wave_file); 00163 fclose(wave_file); 00164 } 00165 }
Generated on Tue Jul 19 2022 23:25:07 by 1.7.2