Mine Field Game
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
main.cpp@0:815fef421595, 2015-03-09 (annotated)
- Committer:
- evgeniy
- Date:
- Mon Mar 09 20:46:46 2015 +0000
- Revision:
- 0:815fef421595
- Child:
- 1:d6304f6b4e03
Mine Field Game;
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:815fef421595 | 5 | |
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 | 0:815fef421595 | 102 | |
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 | 0:815fef421595 | 111 | |
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 | } |