Mine Field Game

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed wave_player

Committer:
evgeniy
Date:
Mon Mar 09 21:02:25 2015 +0000
Revision:
1:d6304f6b4e03
Parent:
0:815fef421595
#ifdef for showing a mine;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evgeniy 0:815fef421595 1 #include "mbed.h"
evgeniy 0:815fef421595 2 #include "uLCD_4DGL.h"
evgeniy 0:815fef421595 3 #include "SDFileSystem.h"
evgeniy 0:815fef421595 4 #include "wave_player.h"
evgeniy 1:d6304f6b4e03 5 #define MINE
evgeniy 0:815fef421595 6 uLCD_4DGL lcd(p28, p27, p30);
evgeniy 0:815fef421595 7 AnalogIn AnalogX(p15);
evgeniy 0:815fef421595 8 AnalogIn AnalogY(p16);
evgeniy 0:815fef421595 9 SDFileSystem sd(p5,p6,p7,p8,"sd");
evgeniy 0:815fef421595 10 AnalogOut DACout(p18);
evgeniy 0:815fef421595 11
evgeniy 0:815fef421595 12 bool lose = false;
evgeniy 0:815fef421595 13
evgeniy 0:815fef421595 14 int main() {
evgeniy 0:815fef421595 15 int AnalogXReading;
evgeniy 0:815fef421595 16 int AnalogYReading;
evgeniy 0:815fef421595 17 lcd.baudrate(3000000);
evgeniy 0:815fef421595 18 int mine_field[4][4];
evgeniy 0:815fef421595 19 wave_player waver(&DACout);
evgeniy 0:815fef421595 20
evgeniy 0:815fef421595 21
evgeniy 0:815fef421595 22 int round = 1;
evgeniy 0:815fef421595 23 int mine;
evgeniy 0:815fef421595 24 while(round <=3 && lose == false)
evgeniy 0:815fef421595 25 {
evgeniy 0:815fef421595 26 lcd.text_width(2); //2X size text
evgeniy 0:815fef421595 27 lcd.text_height(2);
evgeniy 0:815fef421595 28 lcd.printf("\n Round \n %d ", round);
evgeniy 0:815fef421595 29 //printf("%d\n",round);
evgeniy 0:815fef421595 30 int mine_location[round];
evgeniy 0:815fef421595 31
evgeniy 0:815fef421595 32 for(int i=0; i<4; i++)
evgeniy 0:815fef421595 33 {
evgeniy 0:815fef421595 34 for(int j=0; j<4; j++)
evgeniy 0:815fef421595 35 {
evgeniy 0:815fef421595 36 mine_field[i][j]=0;
evgeniy 0:815fef421595 37 }
evgeniy 0:815fef421595 38 }
evgeniy 0:815fef421595 39
evgeniy 0:815fef421595 40 for(int i=0;i<round;i++)
evgeniy 0:815fef421595 41 {
evgeniy 0:815fef421595 42 bool same = false;
evgeniy 0:815fef421595 43 mine = rand() % 14 + 1;
evgeniy 0:815fef421595 44 do
evgeniy 0:815fef421595 45 {
evgeniy 0:815fef421595 46 for(int i=0; i<round; i++)
evgeniy 0:815fef421595 47 {
evgeniy 0:815fef421595 48 if(mine == mine_location[i])
evgeniy 0:815fef421595 49 {
evgeniy 0:815fef421595 50 same = true;
evgeniy 0:815fef421595 51 mine = rand() % 14 + 1;
evgeniy 0:815fef421595 52 }
evgeniy 0:815fef421595 53 else
evgeniy 0:815fef421595 54 same = false;
evgeniy 0:815fef421595 55 }
evgeniy 0:815fef421595 56 }while(same == true);
evgeniy 0:815fef421595 57
evgeniy 0:815fef421595 58 mine_location[i]=mine;
evgeniy 0:815fef421595 59 mine_field[mine%4][mine/4]=1;
evgeniy 0:815fef421595 60 }
evgeniy 0:815fef421595 61
evgeniy 0:815fef421595 62 int startPointX=0;
evgeniy 0:815fef421595 63 int startPointY=0;
evgeniy 0:815fef421595 64 bool win=false;
evgeniy 0:815fef421595 65 int previousX=0;
evgeniy 0:815fef421595 66 int previousY=0;
evgeniy 0:815fef421595 67 wait(3);
evgeniy 0:815fef421595 68 lcd.cls();
evgeniy 0:815fef421595 69 while(1) {
evgeniy 0:815fef421595 70 AnalogXReading = AnalogX.read()*128;
evgeniy 0:815fef421595 71 AnalogYReading = AnalogY.read()*128;
evgeniy 0:815fef421595 72 //lcd.cls();
evgeniy 0:815fef421595 73 lcd.line(0, 31 , 127, 31 , 0xFF0000);
evgeniy 0:815fef421595 74 lcd.line(0, 63 , 127, 63 , 0xFF0000);
evgeniy 0:815fef421595 75 lcd.line(0, 95 , 127, 95, 0xFF0000);
evgeniy 0:815fef421595 76 lcd.line(31,0, 31, 127, 0xFF0000);
evgeniy 0:815fef421595 77 lcd.line(63, 0, 63, 127, 0xFF0000);
evgeniy 0:815fef421595 78 lcd.line(95, 0 , 95, 127, 0xFF0000);
evgeniy 0:815fef421595 79 if(AnalogXReading >118)
evgeniy 0:815fef421595 80 {
evgeniy 0:815fef421595 81 if(startPointX<3)
evgeniy 0:815fef421595 82 startPointX++;
evgeniy 0:815fef421595 83 }
evgeniy 0:815fef421595 84 if(AnalogXReading <10)
evgeniy 0:815fef421595 85 {
evgeniy 0:815fef421595 86 if(startPointX>0)
evgeniy 0:815fef421595 87 startPointX--;
evgeniy 0:815fef421595 88 }
evgeniy 0:815fef421595 89 if(AnalogYReading >118)
evgeniy 0:815fef421595 90 {
evgeniy 0:815fef421595 91 if(startPointY>0)
evgeniy 0:815fef421595 92 startPointY--;
evgeniy 0:815fef421595 93 }
evgeniy 0:815fef421595 94 if(AnalogYReading <10)
evgeniy 0:815fef421595 95 {
evgeniy 0:815fef421595 96 if(startPointY<3)
evgeniy 0:815fef421595 97 startPointY++;
evgeniy 0:815fef421595 98 }
evgeniy 0:815fef421595 99
evgeniy 0:815fef421595 100 //update ballLocation Here
evgeniy 0:815fef421595 101 lcd.circle(32*startPointX+15, 32*startPointY+15, 5, 0xFF0000);
evgeniy 1:d6304f6b4e03 102 #ifdef MINE
evgeniy 0:815fef421595 103 for(int i=0 ; i<4; i++)
evgeniy 0:815fef421595 104 {
evgeniy 0:815fef421595 105 for(int j=0; j<4;j++)
evgeniy 0:815fef421595 106 {
evgeniy 0:815fef421595 107 if(mine_field[i][j]==1)
evgeniy 0:815fef421595 108 lcd.circle(32*i+15, 32*j+15, 5, BLUE);
evgeniy 0:815fef421595 109 }
evgeniy 0:815fef421595 110 }
evgeniy 1:d6304f6b4e03 111 #endif
evgeniy 0:815fef421595 112 if(previousX != startPointX || previousY!= startPointY)
evgeniy 0:815fef421595 113 {
evgeniy 0:815fef421595 114 lcd.circle(32*previousX+15, 32*previousY+15, 5, GREEN);
evgeniy 0:815fef421595 115 previousX=startPointX;
evgeniy 0:815fef421595 116 previousY=startPointY;
evgeniy 0:815fef421595 117 }
evgeniy 0:815fef421595 118
evgeniy 0:815fef421595 119
evgeniy 0:815fef421595 120 if(startPointX == 3 && startPointY == 3)
evgeniy 0:815fef421595 121 win = true;
evgeniy 0:815fef421595 122 else if(mine_field[startPointX][startPointY]==1)
evgeniy 0:815fef421595 123 lose= true;
evgeniy 0:815fef421595 124
evgeniy 0:815fef421595 125 if(win)
evgeniy 0:815fef421595 126 {
evgeniy 0:815fef421595 127 //make screen green
evgeniy 0:815fef421595 128 lcd.cls();
evgeniy 0:815fef421595 129 if(round ==3)
evgeniy 0:815fef421595 130 {
evgeniy 0:815fef421595 131 lcd.media_init();
evgeniy 0:815fef421595 132 lcd.set_sector_address(0x0000, 0x001D);
evgeniy 0:815fef421595 133 lcd.display_image(0,0);
evgeniy 0:815fef421595 134 }
evgeniy 0:815fef421595 135 break;
evgeniy 0:815fef421595 136 }
evgeniy 0:815fef421595 137 if(lose)
evgeniy 0:815fef421595 138 {
evgeniy 0:815fef421595 139 //make screen red
evgeniy 0:815fef421595 140 lcd.cls();
evgeniy 0:815fef421595 141 lcd.text_width(2); //2X size text
evgeniy 0:815fef421595 142 lcd.text_height(2);
evgeniy 0:815fef421595 143 break;
evgeniy 0:815fef421595 144 }
evgeniy 0:815fef421595 145 wait(1);
evgeniy 0:815fef421595 146 }
evgeniy 0:815fef421595 147 round++;
evgeniy 0:815fef421595 148 }
evgeniy 0:815fef421595 149 lcd.text_width(2); //2X size text
evgeniy 0:815fef421595 150 lcd.text_height(2);
evgeniy 0:815fef421595 151 if(lose == true)
evgeniy 0:815fef421595 152 {
evgeniy 0:815fef421595 153 lcd.printf("You lose! ");
evgeniy 0:815fef421595 154 FILE *wave_file = fopen("/sd/SDfiles/bad_disk_x.wav","r");
evgeniy 0:815fef421595 155 waver.play(wave_file);
evgeniy 0:815fef421595 156 fclose(wave_file);
evgeniy 0:815fef421595 157 }
evgeniy 0:815fef421595 158 else
evgeniy 0:815fef421595 159 {
evgeniy 0:815fef421595 160 lcd.printf("You won!");
evgeniy 0:815fef421595 161 FILE *wave_file = fopen("/sd/SDfiles/applause_y.wav","r");
evgeniy 0:815fef421595 162 waver.play(wave_file);
evgeniy 0:815fef421595 163 fclose(wave_file);
evgeniy 0:815fef421595 164 }
evgeniy 0:815fef421595 165 }