Mine Field Game

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed wave_player

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }