BopIt on the mbed

Dependencies:   SDFileSystem mbed wave_player

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?

UserRevisionLine numberNew 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