BopIt on the mbed
Dependencies: SDFileSystem mbed wave_player
main.cpp@0:d30842e497f7, 2013-10-17 (annotated)
- Committer:
- dgobin
- Date:
- Thu Oct 17 19:58:54 2013 +0000
- Revision:
- 0:d30842e497f7
A game of bopIt on the mbed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dgobin | 0:d30842e497f7 | 1 | #include "mbed.h" |
dgobin | 0:d30842e497f7 | 2 | #include "bobit.h" |
dgobin | 0:d30842e497f7 | 3 | Serial pc(USBTX, USBRX); |
dgobin | 0:d30842e497f7 | 4 | |
dgobin | 0:d30842e497f7 | 5 | |
dgobin | 0:d30842e497f7 | 6 | int main() { |
dgobin | 0:d30842e497f7 | 7 | |
dgobin | 0:d30842e497f7 | 8 | int gamestate; |
dgobin | 0:d30842e497f7 | 9 | int ch=0; |
dgobin | 0:d30842e497f7 | 10 | float sl, tw; |
dgobin | 0:d30842e497f7 | 11 | int tehPlay; |
dgobin | 0:d30842e497f7 | 12 | int count = 0; |
dgobin | 0:d30842e497f7 | 13 | //set gamestate to starting state |
dgobin | 0:d30842e497f7 | 14 | gamestate = 1; |
dgobin | 0:d30842e497f7 | 15 | //declare files |
dgobin | 0:d30842e497f7 | 16 | FILE *sbyte; |
dgobin | 0:d30842e497f7 | 17 | FILE *begin; |
dgobin | 0:d30842e497f7 | 18 | //open starting sound file |
dgobin | 0:d30842e497f7 | 19 | begin = fopen("/sd/wavfiles/begin.wav","r"); |
dgobin | 0:d30842e497f7 | 20 | wplays.play(begin); |
dgobin | 0:d30842e497f7 | 21 | fclose(begin); |
dgobin | 0:d30842e497f7 | 22 | wait(1); |
dgobin | 0:d30842e497f7 | 23 | while(1) { |
dgobin | 0:d30842e497f7 | 24 | switch(gamestate) { |
dgobin | 0:d30842e497f7 | 25 | //"preparation" state |
dgobin | 0:d30842e497f7 | 26 | case 1: |
dgobin | 0:d30842e497f7 | 27 | //set all LEDs to 0 |
dgobin | 0:d30842e497f7 | 28 | led1 = 0; |
dgobin | 0:d30842e497f7 | 29 | led2 = 0; |
dgobin | 0:d30842e497f7 | 30 | led3 = 0; |
dgobin | 0:d30842e497f7 | 31 | led4 = 0; |
dgobin | 0:d30842e497f7 | 32 | //get play value |
dgobin | 0:d30842e497f7 | 33 | float b = slide.read()*1000 + count*15 + twist.read()*100 + 926; |
dgobin | 0:d30842e497f7 | 34 | srand(b); |
dgobin | 0:d30842e497f7 | 35 | tehPlay = (rand())%4; |
dgobin | 0:d30842e497f7 | 36 | //0 is bop it --hit a button |
dgobin | 0:d30842e497f7 | 37 | if(tehPlay == 0) { |
dgobin | 0:d30842e497f7 | 38 | sbyte = fopen("/sd/wavfiles/bop.wav","r"); |
dgobin | 0:d30842e497f7 | 39 | wplays.play(sbyte); |
dgobin | 0:d30842e497f7 | 40 | fclose(sbyte); |
dgobin | 0:d30842e497f7 | 41 | wait(.25); |
dgobin | 0:d30842e497f7 | 42 | //1 is slide it --slide switch |
dgobin | 0:d30842e497f7 | 43 | }else if (tehPlay == 1){ |
dgobin | 0:d30842e497f7 | 44 | sbyte = fopen("/sd/wavfiles/slide.wav","r"); |
dgobin | 0:d30842e497f7 | 45 | wplays.play(sbyte); |
dgobin | 0:d30842e497f7 | 46 | fclose(sbyte); |
dgobin | 0:d30842e497f7 | 47 | wait(.25); |
dgobin | 0:d30842e497f7 | 48 | //2 is swipe it --put hand over distance sensor |
dgobin | 0:d30842e497f7 | 49 | }else if (tehPlay == 2){ |
dgobin | 0:d30842e497f7 | 50 | sbyte = fopen("/sd/wavfiles/swipe.wav", "r"); |
dgobin | 0:d30842e497f7 | 51 | wplays.play(sbyte); |
dgobin | 0:d30842e497f7 | 52 | fclose(sbyte); |
dgobin | 0:d30842e497f7 | 53 | wait(.25); |
dgobin | 0:d30842e497f7 | 54 | //3 is twist it --twist dial sensor |
dgobin | 0:d30842e497f7 | 55 | }else if(tehPlay==3){ |
dgobin | 0:d30842e497f7 | 56 | sbyte = fopen("/sd/wavfiles/twist.wav","r"); |
dgobin | 0:d30842e497f7 | 57 | wplays.play(sbyte); |
dgobin | 0:d30842e497f7 | 58 | fclose(sbyte); |
dgobin | 0:d30842e497f7 | 59 | wait(.25); |
dgobin | 0:d30842e497f7 | 60 | }//close if |
dgobin | 0:d30842e497f7 | 61 | |
dgobin | 0:d30842e497f7 | 62 | //go to "play" state |
dgobin | 0:d30842e497f7 | 63 | gamestate = 2; |
dgobin | 0:d30842e497f7 | 64 | |
dgobin | 0:d30842e497f7 | 65 | break; |
dgobin | 0:d30842e497f7 | 66 | |
dgobin | 0:d30842e497f7 | 67 | //play state |
dgobin | 0:d30842e497f7 | 68 | case 2: |
dgobin | 0:d30842e497f7 | 69 | sl = slide.read(); |
dgobin | 0:d30842e497f7 | 70 | tw = twist.read(); |
dgobin | 0:d30842e497f7 | 71 | led1 = 0; |
dgobin | 0:d30842e497f7 | 72 | led2 = 0; |
dgobin | 0:d30842e497f7 | 73 | led3 = 0; |
dgobin | 0:d30842e497f7 | 74 | led4 = 0; |
dgobin | 0:d30842e497f7 | 75 | //depending on number of rounds so far, give the user more or less time to change a sensor |
dgobin | 0:d30842e497f7 | 76 | if( count < 3){ |
dgobin | 0:d30842e497f7 | 77 | for(int k = 0; k < 10; k++){ |
dgobin | 0:d30842e497f7 | 78 | ch = chSig(tehPlay, sl, tw); |
dgobin | 0:d30842e497f7 | 79 | if(ch == 1|| ch==2 ){ |
dgobin | 0:d30842e497f7 | 80 | count++; |
dgobin | 0:d30842e497f7 | 81 | break; |
dgobin | 0:d30842e497f7 | 82 | } |
dgobin | 0:d30842e497f7 | 83 | if( k < 3){ |
dgobin | 0:d30842e497f7 | 84 | led1 = 1; |
dgobin | 0:d30842e497f7 | 85 | }else if(k>=3 && k<6){ |
dgobin | 0:d30842e497f7 | 86 | led2 = 1; |
dgobin | 0:d30842e497f7 | 87 | }else if(k>= 6 && k<8 ){ |
dgobin | 0:d30842e497f7 | 88 | led3 = 1; |
dgobin | 0:d30842e497f7 | 89 | }else if(k>=8){ |
dgobin | 0:d30842e497f7 | 90 | led4 = 1; |
dgobin | 0:d30842e497f7 | 91 | } |
dgobin | 0:d30842e497f7 | 92 | wait(1); |
dgobin | 0:d30842e497f7 | 93 | }//close for |
dgobin | 0:d30842e497f7 | 94 | } else if( count >= 3 && count < 5){ |
dgobin | 0:d30842e497f7 | 95 | |
dgobin | 0:d30842e497f7 | 96 | for(int k =0; k < 10; k++){ |
dgobin | 0:d30842e497f7 | 97 | |
dgobin | 0:d30842e497f7 | 98 | ch = chSig(tehPlay, sl, tw); |
dgobin | 0:d30842e497f7 | 99 | if(ch == 1|| ch==2 ){ |
dgobin | 0:d30842e497f7 | 100 | count++; |
dgobin | 0:d30842e497f7 | 101 | break; |
dgobin | 0:d30842e497f7 | 102 | } |
dgobin | 0:d30842e497f7 | 103 | if( k < 3){ |
dgobin | 0:d30842e497f7 | 104 | led1 = 1; |
dgobin | 0:d30842e497f7 | 105 | }else if(k>=3 && k<6){ |
dgobin | 0:d30842e497f7 | 106 | led2 = 1; |
dgobin | 0:d30842e497f7 | 107 | }else if(k>= 6 && k<8 ){ |
dgobin | 0:d30842e497f7 | 108 | led3 = 1; |
dgobin | 0:d30842e497f7 | 109 | }else if(k>=8){ |
dgobin | 0:d30842e497f7 | 110 | led4 = 1; |
dgobin | 0:d30842e497f7 | 111 | } |
dgobin | 0:d30842e497f7 | 112 | wait(.2); |
dgobin | 0:d30842e497f7 | 113 | }//close for |
dgobin | 0:d30842e497f7 | 114 | }else if(count >= 5 && count < 8){ |
dgobin | 0:d30842e497f7 | 115 | |
dgobin | 0:d30842e497f7 | 116 | for(int k =0; k < 10; k++){ |
dgobin | 0:d30842e497f7 | 117 | ch = chSig(tehPlay, sl, tw); |
dgobin | 0:d30842e497f7 | 118 | if(ch == 1 || ch==2 ){ |
dgobin | 0:d30842e497f7 | 119 | count++; |
dgobin | 0:d30842e497f7 | 120 | break; |
dgobin | 0:d30842e497f7 | 121 | } |
dgobin | 0:d30842e497f7 | 122 | if( k < 3){ |
dgobin | 0:d30842e497f7 | 123 | led1 = 1; |
dgobin | 0:d30842e497f7 | 124 | }else if(k>=3 && k<6){ |
dgobin | 0:d30842e497f7 | 125 | led2 = 1; |
dgobin | 0:d30842e497f7 | 126 | }else if(k>= 6 && k<8 ){ |
dgobin | 0:d30842e497f7 | 127 | led3 = 1; |
dgobin | 0:d30842e497f7 | 128 | }else if(k>=8){ |
dgobin | 0:d30842e497f7 | 129 | led4 = 1; |
dgobin | 0:d30842e497f7 | 130 | } |
dgobin | 0:d30842e497f7 | 131 | wait(.13); |
dgobin | 0:d30842e497f7 | 132 | }//close for |
dgobin | 0:d30842e497f7 | 133 | }else if(count >= 8){ |
dgobin | 0:d30842e497f7 | 134 | count++; |
dgobin | 0:d30842e497f7 | 135 | for( int k = 0; k<10; k++){ |
dgobin | 0:d30842e497f7 | 136 | ch = chSig(tehPlay, sl, tw); |
dgobin | 0:d30842e497f7 | 137 | if(ch == 1|| ch==2 ){ |
dgobin | 0:d30842e497f7 | 138 | break; |
dgobin | 0:d30842e497f7 | 139 | } |
dgobin | 0:d30842e497f7 | 140 | if( k < 3){ |
dgobin | 0:d30842e497f7 | 141 | led1 = 1; |
dgobin | 0:d30842e497f7 | 142 | }else if(k>=3 && k<6){ |
dgobin | 0:d30842e497f7 | 143 | led2 = 1; |
dgobin | 0:d30842e497f7 | 144 | }else if(k>= 6 && k<8 ){ |
dgobin | 0:d30842e497f7 | 145 | led3 = 1; |
dgobin | 0:d30842e497f7 | 146 | }else if(k>=8){ |
dgobin | 0:d30842e497f7 | 147 | led4 = 1; |
dgobin | 0:d30842e497f7 | 148 | } |
dgobin | 0:d30842e497f7 | 149 | wait(.085); |
dgobin | 0:d30842e497f7 | 150 | }//close for |
dgobin | 0:d30842e497f7 | 151 | }//close if |
dgobin | 0:d30842e497f7 | 152 | |
dgobin | 0:d30842e497f7 | 153 | //if they completed the commands then go back to state 1 |
dgobin | 0:d30842e497f7 | 154 | if(ch == 1){ |
dgobin | 0:d30842e497f7 | 155 | ch = 0; |
dgobin | 0:d30842e497f7 | 156 | wait(.5); |
dgobin | 0:d30842e497f7 | 157 | gamestate = 1; |
dgobin | 0:d30842e497f7 | 158 | break; |
dgobin | 0:d30842e497f7 | 159 | //if the loop broke because time is up or they were wrong |
dgobin | 0:d30842e497f7 | 160 | }else if(ch == 2 || ch==0){ |
dgobin | 0:d30842e497f7 | 161 | gamestate = 3; |
dgobin | 0:d30842e497f7 | 162 | break; |
dgobin | 0:d30842e497f7 | 163 | }//close if |
dgobin | 0:d30842e497f7 | 164 | |
dgobin | 0:d30842e497f7 | 165 | //possibly unnecessary extra break to end case 2 |
dgobin | 0:d30842e497f7 | 166 | break; |
dgobin | 0:d30842e497f7 | 167 | |
dgobin | 0:d30842e497f7 | 168 | //game over state: print game over to terminal until player resets mbed |
dgobin | 0:d30842e497f7 | 169 | case 3: |
dgobin | 0:d30842e497f7 | 170 | while(1){ |
dgobin | 0:d30842e497f7 | 171 | pc.printf("Game Over! Score = %d", count); |
dgobin | 0:d30842e497f7 | 172 | led1 = 0; |
dgobin | 0:d30842e497f7 | 173 | led2 = 0; |
dgobin | 0:d30842e497f7 | 174 | led3 = 0; |
dgobin | 0:d30842e497f7 | 175 | led4 = 1; |
dgobin | 0:d30842e497f7 | 176 | sbyte = fopen("/sd/wavfiles/gOver.wav","r"); |
dgobin | 0:d30842e497f7 | 177 | wplays.play(sbyte); |
dgobin | 0:d30842e497f7 | 178 | fclose(sbyte); |
dgobin | 0:d30842e497f7 | 179 | wait(2); |
dgobin | 0:d30842e497f7 | 180 | }//close GO while |
dgobin | 0:d30842e497f7 | 181 | break; |
dgobin | 0:d30842e497f7 | 182 | }//close switch |
dgobin | 0:d30842e497f7 | 183 | |
dgobin | 0:d30842e497f7 | 184 | |
dgobin | 0:d30842e497f7 | 185 | |
dgobin | 0:d30842e497f7 | 186 | }//close main while |
dgobin | 0:d30842e497f7 | 187 | }//close main |